void main()
{
u16 num; //AD2电压检测变量
float ADCBat,stress; //压力计算中间变量
P0M1 = 0x00; P0M0 = 0x00; //设置为准双向口
P2M1 = 0x00; P2M0 = 0x00; //设置为准双向口
P3M1 = 0x00; P3M0 = 0x00; //设置为准双向口
P5M1 = 0x00; P5M0 = 0x00; //设置为准双向口
led1=0; md1=0; Beep=0;
Timer0Init(); //定时器0调用
Timer1Init(); //定时器1调用
STC8ADC_INIT(); //adc.c模块ADC获取子程序调用
EA=1; //中断总开关
while(1)
{
ADCBat = line_bat_0-line_bat_1; //AD0-AD1的结果赋给ADCBat无符号整型变量
if(0<ADCBat<150) //当压力值介于0PSI到150PSI之间时,遵循线性变换公式:y=(115-15)/(243-13)*X+15kpa
{
stress=((10.0/11.4)*ADCBat)-18.5; //测试时补偿值为-18.5
press=stress*10; //放大10倍,便于后面计算
}
num=1.022*line_bat_2*1000/4095; //电量计算
if (num>776) DAT=3; // 776 四格
else if (num>710) DAT=2; // 710 三格
else if (num>660) DAT=1; // 664 二格
else if (num>610) DAT=0; // 613 一格
dis_Service(); //显示服务函数
DaQi(); //打气服务函数
}
}
上面主函数里定时器 Timer1Init(); 调用过keynum1值显示,下面是按键函调用过EEPROM的读和写,也没看到重复调用的问题呀?请大神指点一下!
void key_scan()
{
static unsigned char state=S0,key_time;
unsigned char key;
key=P3&0x1f; //屏蔽P1低四位
switch(state) //检测状态
{
case S0: //状态0
if(key!= 0x1f) state = S1; break; //判断输入是否为0,为0转入状态1
case S1: //状态1
if(key==0x1f) state = S0; //判断输入是否为1,为1返回状态0
else //否则,转入状态2,执行按键程序
{
state=S2;
switch(key)
{
case 0x1E:
switch(wnd)
{
case 0:T1Cnt=epxs_short; keynum1 = Read_EEPROM_u16(0x0200); SSCnt=0; flag=0; keyflag=0; if(keynum1>1049) keynum1=30; if(flag==0 && keyflag==0){if(keynum1<1000) keynum1 = keynum1+5; else keynum1++;} Save_EEPROM_u16(0x0200, keynum1);Setflag=1; break; //psi:0~150,0~100加5,到100退位显示100~150加1
case 1:T1Cnt=epxs_short; keynum2 = Read_EEPROM_u16(0x0400); SSCnt=0; flag=0; keyflag=0; if(keynum2>1002) keynum2=20; if(flag==0 && keyflag==0){if(keynum2<1000) keynum2 = keynum2+5; else keynum2++;} Save_EEPROM_u16(0x0400, keynum2);Setflag=1; break; //BAR:0.2-10.3
case 2:T1Cnt=epxs_short; keynum3 = Read_EEPROM_u16(0x0600); SSCnt=0; flag=0; keyflag=0; if(keynum3>994) keynum3=20; if(flag==0 && keyflag==0){ keynum3 = keynum3+5; } Save_EEPROM_u16(0x0600, keynum3);Setflag=1; break; //kpa:20-995
case 3:T1Cnt=epxs_short; keynum4 = Read_EEPROM_u16(0x0800); SSCnt=0; flag=0; keyflag=0; if(keynum4>1002) keynum4=20; if(flag==0 && keyflag==0){if(keynum4<1000) keynum4 = keynum4+5; else keynum4++;} Save_EEPROM_u16(0x0800, keynum4);Setflag=1; break; //kg/cm:0.2-10.5
}
FMQCnt = FMQ_short; //按键声音触发,滴一声就停。
break;
void timer1_ISR(void) interrupt 3 //定时器中断1,中断号:3
{
TR1=0; //定时器1计时关闭
//定时设定值3S显示
if(T1Cnt != 0) //如果T1Cnt不等于0
{
T1Cnt--; //每次进入定时中断都自减1,直到等于零为止。
keyflag=1; //3S到keyflag=1:读EEPROM值,显示3S按键调整值
switch(wnd) //不同窗口显示按键值
{
case 0: parm1 = keynum1; break;
case 1: parm2 = keynum2; break;
case 2: parm3 = keynum3; break;
case 3: parm4 = keynum4; break;
default:break;
}
}
else
{
keyflag=0; //3S到keyflag=0:退出显示压力值
switch(wnd) //不同窗口显示压力值
|