单片机 adc0832 lcd1602 数值减小从100变到199怎么回事
数值变化 怎么会100 减小到199 10变到19 十位 百位 不变 怎么回事 求解
数值转换问题? 会是数值显示刷新问题?
你没有把99前面的1清除掉吧
BZ = 1;
else if(shuju < 100) BZ = 2;
else if(shuju < 1000) BZ = 3;
else if(shuju < 10000) BZ = 4;
else if( shuju <65535) BZ = 5;
switch(BZ)
{
case 5:HC[5] = shuju/10000; //百位
case 4:HC[3] = shuju%10000/1000;//十位
case 3:HC[2] = shuju%1000/100;//个位
case 2:HC[1] = shuju%100/10;//小数点后一位
case 1:HC[0] = shuju%10;
break;
default:break;
adc0832转换程序问题? 还是显示程序的问题
显示程序问题,100是三位数,要三个字符显示,99只有两位数,只要两个字符显示,你是不是把100三个字符中的00字符变成了99,没有把前面的1显示字符清掉显示
每个字符单独显示 从adc 得到一个转换显示每位数
void xiezhiling(unsigned char com,bit p)//写命令函数
{
if(p)
delay_10ns(5);
E=0;
Rs=0;
Rw=0;
DD=com;
delay_10ns(50);
E=1;
delay_1ms(2);
E=0;
delay_10ns(4);
}
void xieshuju(unsigned char DATA)//写数据函数
{
delay_10ns(50);
E=0;
Rs=1;
Rw=0;
DD=DATA;
delay_10ns(50);
E=1;
delay_10ns(50);
E=0;
delay_10ns(4);
}
void init(void)//初始化函数
{
delay_1ms(15);
xiezhiling(0x38,0);
delay_1ms(5);
xiezhiling(0x38,0);
delay_1ms(5);
xiezhiling(0x38,0);
delay_1ms(5);
xiezhiling(0x38,1); //功能设定(8位,2行,5*7点矩阵)
xiezhiling(0x08,1);
xiezhiling(0x01,1); //清除屏幕
xiezhiling(0x06,1); //加1
xiezhiling(0x0c,1);//显示器ON,光标OFF,闪烁OFF
你每次数据变化时,先把abc三位显示全都清除,然后再显示数据
或者,加个条件语句,当数据小于100大于10时,清a位显示,小于10时,清ab位显示
if( shuju <65535) BZ = 5;
switch(BZ)
{
case 5:HC[5] = shuju/10000; //百位
设置了还是会 那个问题
if(HC[5]*100+HC[3]*10+HC[2]<100) {
HC[5]=0;
}
if(HC[5]*100+HC[3]*10+HC[2]<10)
{
HC[3]=0;
}
不是计算的问题,是显示程序的问题,我说的清显示,是指写”0x20“进1602的a位,或b位
xiezhiling(0x80,1);//LCD第一行显示
xieshuju(HC[1]+0x30);
xieshuju(HC[7]+0x30);
xieshuju(HC[8]+0x30);
xieshuju(' ');
xieshuju(' ');
xieshuju(HC[6]+0x30);
xieshuju(' ');
xieshuju(' ');
xieshuju(HC[5]+0x30);百位
xieshuju(HC[3]+0x30);十位
xieshuju(HC[2]+0x30);个位
xieshuju(' ');
xieshuju('m');
xieshuju('/');
xieshuju('s');
xieshuju(' ');
从0x30 ~开始 显示数字 00110000到00111001
xieshuju(HC[1]+0x30);
xieshuju(HC[7]+0x30);
xieshuju(HC[8]+0x30);
xieshuju(' ');
xieshuju(' ');
xieshuju(HC[6]+0x30);
xieshuju(' ');
xieshuju(' ');
if(shuju < 100)
xieshuju(' ');
else
xieshuju(HC[5]+0x30);百位
if(shuju < 10)
xieshuju(' ');
else
xieshuju(HC[3]+0x30);十位
xieshuju(HC[2]+0x30);个位
xieshuju(' ');
xieshuju('m');
xieshuju('/');
xieshuju('s');
xieshuju(' ');
if(shuju < 100)
shuju不是那全局变量 无法直接使用
if(HC[5]<=0)
//xieshuju(0x20);
// else if(HC[5]>0)
xieshuju(HC[5] +0x30); 还是出现一样的情况
那就设为全局变量啊,关键是你都没有理解 if(shuju < 100) xieshuju(' '); 这句语句的作用,它是在你由100变为99的时候,在百位把1的显示替换成 ' '
你先理解了下面这几句语句的作用,在相应调整你的程序吧
if(shuju < 100)
xieshuju(' ');
else
xieshuju(HC[5]+0x30);百位
if(shuju < 10)
xieshuju(' ');
else
xieshuju(HC[3]+0x30);十位
- shuju<100 判断显示数值?
还是会 那个数据 ;
data_temp=(0.4)*Adc0832(0);
xs_int(1*data_temp);
if(HC[5] * 100 < 100)
xieshuju(' ');
else
xieshuju(HC[5]+0x30);百位
if((HC[5] * 100 + HC[3] * 10) < 10)
xieshuju(' ');
else
xieshuju(HC[3]+0x30);十位
还是会 我也蒙了 HC[5]好像会不会跟数组 与 lcd1602的显示的位相关
0是HC[5]的初始值
再加个HC[5]+0x30
显示的是 变成0x31 无法递减变成 0x30
xieshuju(HC[5]+0x2f); 0x30 变为 0x2f
就会变成 099 减小会变成 099
改为 0x2e 百位变成其他字符了
