标题: 单片机数码管程序递加找不出错在哪里 [打印本页]

作者: dreams9158    时间: 2019-12-25 12:13
标题: 单片机数码管程序递加找不出错在哪里
                if(STARflag)//如果按下了启动按钮,置位
                                {   
                                         Morebyte_Readluf(0x2200);//读EEPROM中的luf数组中的数据
                                        LL=luf[1]*256;
                                        LL=LL+luf[0];
                                    BL=LL;
                                    Morebyte_Readcuf(0x2400);//读EEPROM中的cuf数组中的数据
                                    CC=cuf[1]*256;
                                        CC=CC+cuf[0];
                                        numc=CC;
                                        numc+=BL;//每按一次按钮numc就增加BL值
                                    if(numc>9998)
                                             {
                                               numc=0;
                                             }
                                        CC=numc;
                                                
                                    dct[0]=CC%256; //BB的低八位
                                        dct[1]=CC/256; //BB的高八位
                                        Sector_Erase(0x2400);//擦除扇区
                                    Morebyte_Program(0x2400,dct);//将numc写入EEPROM中
                                 
                                      SMGBUFFER[4][0]=DuanMa[numc%10]; //四位数码管待显示数据
                                    SMGBUFFER[4][1]=DuanMa[numc/10%10];
                                    SMGBUFFER[4][2]=DuanMa[numc/100%10];
                                   SMGBUFFER[4][3]=DuanMa[numc/1000%10];

                                 DISPLAY(4);//显示函数
                                STARflag=0;//按键复位
                                 
           }
求高手指导一下,为什么我的数码管显示一直是每按一次加1,而不是加10(BL值我设置为10),谢谢了!!!
作者: wulin    时间: 2019-12-25 14:10
本帖最后由 wulin 于 2019-12-25 15:33 编辑

16位数据可以按字节存EEPROM同一扇区不同地址,读取后再合并还原为16位数据。
        if(STARflag)//如果按下了启动按钮,置位
        {   
                luf[0]=Morebyte_Readluf(0x2200);//读EEPROM保存的低八位放在在luf[0]缓存数组中
                luf[1]=Morebyte_Readluf(0x2200+1);//读EEPROM保存的高八位放在在luf[1]缓存数组中
                numc=luf[1]<<8|luf[0];//合并为16位数据
       
                numc+=BL;//每按一次按钮numc就增加BL值
                if(numc>9998)
                {
                        numc=0;
                }
                dct[0]=numc;                 //缓存低八位,高位溢出
                dct[1]=numc>>8;         //缓存高八位
                Sector_Erase(0x2200);//擦除扇区
                Morebyte_Program(0x2200,dct[0]);//将numc低八位写入EEPROM中
                Morebyte_Program(0x2200+1,dct[1]);//将numc高八位写入EEPROM中
       
                SMGBUFFER[4][0]=DuanMa[numc%10]; //四位数码管待显示数据
                SMGBUFFER[4][1]=DuanMa[numc/10%10];
                SMGBUFFER[4][2]=DuanMa[numc/100%10];
                SMGBUFFER[4][3]=DuanMa[numc/1000%10];
               
                DISPLAY(4);//显示函数
                STARflag=0;//按键复位
        }


作者: botgs    时间: 2019-12-25 14:19
BL是从EEPROM读出来的,这里看不到你怎么设置BL的,设置后是否写到EEPROM中?
作者: dreams9158    时间: 2019-12-25 15:30
botgs 发表于 2019-12-25 14:19
BL是从EEPROM读出来的,这里看不到你怎么设置BL的,设置后是否写到EEPROM中?

BL我有设置过并确认己经写入了EEPRPM的,因为我用另一个按键可以调阅已设置好的参数,并在数码管显示,结果没错,谢谢你的答复
作者: dreams9158    时间: 2019-12-25 17:18
问题找出来了,问题出在哪里呢?显示的条件是: if(STARflag),可是最后把这个条件否定了:STARflag=0;//按键复位,造成了瞬间显示,根本看不出显示效果,应该延时一些时间再退出,谢谢回复我的朋友!!!
作者: zhy123654    时间: 2019-12-25 17:22
BL=LL;  LL=luf[1]*256+luf[0];是多少
作者: 未成为大佬    时间: 2019-12-25 17:34
luf[1]和luf[0]是多少啊
作者: dreams9158    时间: 2019-12-25 22:50
zhy123654 发表于 2019-12-25 17:22
BL=LL;  LL=luf[1]*256+luf[0];是多少

具体值有按键驱动函数设置,谢谢!
作者: dreams9158    时间: 2019-12-25 22:52
未成为大佬 发表于 2019-12-25 17:34
luf[1]和luf[0]是多少啊

具体值有按键驱动函数设置,谢谢!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1