proteus仿真0-5V的ADC0808单片机电压表,为什么滑动变阻器滑到中间采样值突变为0,采样最大值为2.5V

proteus仿真0-5V的ADC0808单片机电压表,为什么滑动变阻器滑到中间采样值突变为0,采样最大值为2.5V

#include
sbit rs=P2^0;
sbit rw=P2^1;
sbit en=P2^2;
//sbit psb=P1^3;
sbit START=P3^4;
sbit EOC=P3^3;
sbit OE=P3^2;
sbit ALE=P3^1;
sbit CLK=P3^5;
#define uint unsigned int
#define uchar unsigned char
uint i;
uchar vol,v;
uchar code table[]={"nit"};
uchar code table1[]={"CO:"};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com) //LCD指令程序
{
en=0;
rs=0;
delay(5);
P0=com;
delay(5);
en=1;
delay(5);
en=0;
}
void write_data(uchar dat) //LCD数据程序
{
en=0;
rs=1;
delay(5);
P0=dat;
delay(5);
en=1;
delay(5);
en=0;
}
void write_xianshi(uchar add,int date)
{
char bai,shi,ge;
bai=date/100;
shi=date%100/10;
ge=date%10;
write_com(0x80+0x40+add);//显示位置
write_data(0x30+bai);
write_data(0x2e);
write_data(0x30+shi);
write_data(0x30+ge);
}
void init()
{
en=0;
rw=0; //LCD写操作
write_com(0x38);//设置16*2显示,5*7点阵,8位数据接口
write_com(0x0c);//开显示不显示光标
write_com(0x06);//显示一个数据后光标自动加1
write_com(0x01);//清屏
for(i=0;i<(sizeof(table)-1);i++) //第一行输入
{
write_com(0x80+i);
write_data(table[i]);
}
for(i=0;i<(sizeof(table1)-1);i++) //第二行输入
{
write_com(0x80+0x40+i);
write_data(table1[i]);
}
}
void start(void)
{
ALE=1;
delay(1);
START=1;
delay(1);
ALE=0;
delay(1);
START=0;
}
void check(void)
{
while(EOC==1)
delay(1);
while(EOC==0)
delay(1);
OE=1;
delay(1);
vol=P1;
OE=0;
}
void deal(void)
{
if(vol>=251)
vol=250;
v=vol*2;
}
void timer0( ) interrupt 1 //定时器0工作方式1
{
TH0=0xff; //定时时间高八位初值
TL0=0xfe; //定时时间低八位初值
CLK=!CLK; //取反
}
void main()
{
TMOD=0X01; //定时器中断0
CLK=0; //脉冲信号初始值为0
TH0=0xff; //定时时间高八位初值
TL0=0xfe; //定时时间低八位初值
EA=1; //开CPU中断
ET0=1; //开T/C0中断
TR0=1;
init();
while(1)
{
start();
check();
deal();
write_xianshi(5,v);
}
}
13513613288 1年前 已收到1个回答 举报

zhgoutian8858 幼苗

共回答了20个问题采纳率:90% 举报

#include
sbit rs=P2^0;
sbit rw=P2^1;
sbit en=P2^2;
//sbit psb=P1^3;
sbit START=P3^4;
sbit EOC=P3^3;
sbit OE=P3^2;
sbit ALE=P3^1;
sbit CLK=P3^5;
#define uint unsigned int
#define uchar unsigned char
uint i;
//uchar vol,v;----把这行,改成下面两行
uchar vol;
uint v;
//---------后面的,都不用改动
uchar code table[]={"nit"};
……
试试看.
------------------------------
说明:
void deal(void)
{
if(vol>=251)
vol=250;
v=vol*2;-----就是这句,超出了 v 的范围.
}

1年前

9
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 16 q. 1.212 s. - webmaster@yulucn.com