微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 单片机 adc0832 lcd1602 数值减小从100变到199怎么回事

单片机 adc0832 lcd1602 数值减小从100变到199怎么回事

时间:10-02 整理:3721RD 点击:

数值变化 怎么会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   百位变成其他字符了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top