找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1338|回复: 14
打印 上一主题 下一主题
收起左侧

单片机读取EEPROM值修改后如何再返回AD值显示界面?附程序

[复制链接]
跳转到指定楼层
楼主
ID:686513 发表于 2022-3-26 09:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhth1979 于 2022-4-3 11:51 编辑

void main()
{  
         u16 num;
         float vary, ADCBat,press;

    P0M1 = 0x00;   P0M0 = 0x00;   //设置为准双向口
    P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
    P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口   
    P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口
         
         led1=0; md1=0; Buzzer=0;
                          
         Timer0Init();
         STC8ADC_INIT();         
         EA=1;       //中断总开关
         
                 while(1)
           {  
                        
                        ADCBat =line_bat_0-line_bat_1;
                        
                        if(0<ADCBat<100)//当压力值介于15KPA到115KPA之间时,遵循线性变换  0-100Psi 7-135  
                        {
                       vary=ADCBat; //y=(115-15)/(243-13)*X+15kpa
                       press=((10.0/12.8)*vary)-6;//测试时  0-100Psi(5-107)((10.0/11.9)*vary)-5.5补偿值为5.5
                         wendu=press*10;//放大10倍,便于后面计算
                         }                          
               
         parm1 = wendu;       问题1: AD值送给 parm1 拆分一直显示,后面按键按下读出EEPROM,并修改其值,然后保存到EEPROM,自动退出后又返回到AD值显示!我现在想实现的就是AD值(wendu)和EEPROM值都送给parm1显示(蓝色标注部分),AD值(wendu)是一直显示,EEPROM是按键按下加减设置时显示,自动保存退出后又返回AD值显示。主要这两个值如何切换显示?
           }
}

void dis_Service()
{
         u8 temp0,temp1,temp2;
                switch(wnd)   //wnd为哪几个窗口显示,我有四个窗口选择。
          {
                        case 0:
                                temp0= parm1/100;
                          temp1= parm1%100/10;                          
                          temp2= parm1%10;
                          LEDBuf[3]=wnd;
                          LEDBuf[4]=DAT;
                        
                          if(parm1<100)
                {
                        LEDBuf[0] = 16;
          }
             else
               {
                 LEDBuf[0] = temp0;
               }
                                                   
               LEDBuf[1] = temp1&0x7f;    问题2:&0x7f 为什么小数点不能正常显示?(共阳数码管)    



//部分按键程序,key_scan()判断加键有效,四个窗口中加键的情况,按下 读取EEPROM,并修改其值,然后保存到EEPROM,退出。我想要的是设置保存后退出设置显示后返回到AD值!
         
        switch(key_scan(100))  //key_scan()按键判断
                {
                        
                case 1:
                          switch(wnd)   //wnd为四个窗口中之一的加键显示
                          {                                                
                                       
                        case 0:parm1 = IapRead(0x0400); parm1++;if(parm1>150) parm1=150; IapErase(0x0400);IapProgram(0x0400, parm1);break;        
                        case 1:parm2 = IapRead(0x0500); parm2++;if(parm2>150) parm2=150; IapErase(0x0500);IapProgram(0x0500, parm2);break;  
                        case 2:parm3 = IapRead(0x0600); parm3++;if(parm3>995) parm3=955; IapErase(0x0600);IapProgram(0x0600, parm3);break;      
                        case 3:parm4 = IapRead(0x0700); parm4++;if(parm4>250) parm4=250; IapErase(0x0700);IapProgram(0x0700, parm4);break;                                                            
                        }                                       
                        break;
   
                                 

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:301191 发表于 2022-3-26 18:24 | 只看该作者
顶一下
回复

使用道具 举报

板凳
ID:161164 发表于 2022-3-26 19:52 | 只看该作者
用手机看,没下载附件
1. 在Key_scan中不要用parm1,改用parm1_sp, 然后在显示函数中用wnd来選擇显示哪个变数
2. LEDbuf是放0~9吧?&0x7F干什么?输出到P口时才运算吧?而且共阳不是用|=0x80吗?
回复

使用道具 举报

地板
ID:686513 发表于 2022-3-27 13:19 | 只看该作者
lkc8210 发表于 2022-3-26 19:52
用手机看,没下载附件
1. 在Key_scan中不要用parm1,改用parm1_sp, 然后在显示函数中用wnd来選擇显示哪个 ...

1.我有四个单位界面要显示,wnd参数为切换这四个界面,所以这个参数不能动。2.共阳数码管为&0x7f,共阴数码管是|0X80。temp1是parm1这个数拆分出的十位,也就是第二个数码管要显示的值&0x7f,不对吗?
回复

使用道具 举报

5#
ID:301191 发表于 2022-3-27 18:24 | 只看该作者
顶一下
回复

使用道具 举报

6#
ID:592807 发表于 2022-3-28 10:06 | 只看该作者
不是很懂你什么意思。显示界面你要是没有改变它的显示模式(刷新),他会一直存在,你说的返回显示界面什么意思
回复

使用道具 举报

7#
ID:121859 发表于 2022-3-28 10:30 | 只看该作者
修改设置后返回后要显示以前的数据界面,重新显示一遍就可以了,这里没有像电脑那样有保存显存再恢复的操作。
回复

使用道具 举报

8#
ID:686513 发表于 2022-3-28 11:14 | 只看该作者
本帖最后由 zhth1979 于 2022-3-28 11:31 编辑
黄youhui 发表于 2022-3-28 10:06
不是很懂你什么意思。显示界面你要是没有改变它的显示模式(刷新),他会一直存在,你说的返回显示界面什么 ...

显示界面正常显示压力值时,按下加或减读EEPROM内保存的值显示在当前界面(此时压力值不显示),加减设置后等3秒自动保存到EEPROM并退出,这时又返回到显示压力值(压力值在不按加减键是一直显示的)。
回复

使用道具 举报

9#
ID:161164 发表于 2022-3-28 11:45 | 只看该作者
zhth1979 发表于 2022-3-27 13:19
1.我有四个单位界面要显示,wnd参数为切换这四个界面,所以这个参数不能动。2.共阳数码管为&0x7f,共阴数 ...

1. 我也是借用wnd的值来显示,没有动它
2. 你说的对,共阳是&0x7f,共阴是|0X80
3. 我知道temp1是parm1的十位,假如parm1是123,temp1就是2,LEDBuf[1]也是2(不加小数点),但数码管的驱动不是2(B00000010)而是0xA4(B10100100),加上小数点就是0x24(B00100100)
所以不是LEDBuf[1] = temp1&0x7f;
而是PX = table[LEDBuf[1]] &0x7F;(代码不全,假设你用P口直驱)
回复

使用道具 举报

10#
ID:686513 发表于 2022-3-28 12:25 | 只看该作者
黄youhui 发表于 2022-3-28 10:06
不是很懂你什么意思。显示界面你要是没有改变它的显示模式(刷新),他会一直存在,你说的返回显示界面什么 ...

不按按键屏一直显示压力值  (parm1 = wendu;),按下加或减读取EEPROM内上次保存的值(此时显示EEPROM值parm1 = IapRead(0x0400); ,压力值不显示),加减设置完成3秒后,EEPROM擦除写入新值并保存退出显示 ,然后还是一直显示压力值。也就是EEPROM值只是在按下加减键时显示,其它时间一直显示压力值。
回复

使用道具 举报

11#
ID:686513 发表于 2022-3-28 12:31 | 只看该作者
lkc8210 发表于 2022-3-28 11:45
1. 我也是借用wnd的值来显示,没有动它
2. 你说的对,共阳是&0x7f,共阴是|0X80
3. 我知道temp1是parm1 ...

你说的对,但如果这样写的话,四个界面十位都会加上小数点,而其它三个界面小数点不在十位上。
回复

使用道具 举报

12#
ID:161164 发表于 2022-3-28 13:25 | 只看该作者
zhth1979 发表于 2022-3-28 12:31
你说的对,但如果这样写的话,四个界面十位都会加上小数点,而其它三个界面小数点不在十位上。

还是那一句,用wnd来选择显示什么
无论是parm1,parm2还是小数点的位置

因为代码不全,我只能按你贴的代码来分析问题
然后你用没贴上来的那部分来说有问题
我只能呵呵了
回复

使用道具 举报

13#
ID:592807 发表于 2022-3-30 09:29 | 只看该作者
zhth1979 发表于 2022-3-28 12:25
不按按键屏一直显示压力值  (parm1 = wendu;),按下加或减读取EEPROM内上次保存的值(此时显示EEPROM值p ...

你这个应该属于分级菜单。你去网上搜一下很多这方面的资料的。
回复

使用道具 举报

14#
ID:301191 发表于 2022-4-3 02:30 | 只看该作者
顶一下
回复

使用道具 举报

15#
ID:624769 发表于 2022-4-4 00:57 | 只看该作者
把:         LEDBuf[1] = temp1&0x7f;    问题2:&0x7f 为什么小数点不能正常显示?(共阳数码管)   

改成:  LEDBuf[1] = temp1 | 0x10;   
或者: LEDBuf[1] = temp1 + 16;      即可
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表