本帖最后由 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;
|