|
采用老貼各位大神的方法,目前數(shù)碼管設(shè)置時(shí)可以讓它閃爍了,但還不是我想要的功能。我想加或減鍵按下數(shù)碼管(含小數(shù)點(diǎn))需要顯示的位(含小數(shù)點(diǎn))閃爍,加減調(diào)整時(shí)不閃爍,調(diào)整完成后閃爍3秒退出。現(xiàn)在的情況是:按下加或減數(shù)字會(huì)按設(shè)定的500ms閃爍,不管調(diào)整不調(diào)整都一直閃爍到3s退出(主要是閃爍時(shí)調(diào)數(shù)字不方便觀看)。
定時(shí)部分單片機(jī)源程序如下:
void Timer1Init(void) //1毫秒@12.000MHz
{
TMOD &= 0x0F; //設(shè)置定時(shí)器模式
TMOD |= 0x10; //設(shè)置定時(shí)器模式
TL1 = 0x18; //設(shè)置定時(shí)初始值
TH1 = 0xFC; //設(shè)置定時(shí)初始值
TF1 = 0; //清除TF1標(biāo)志
ET1=1; //定時(shí)器1開關(guān)
TR1 = 1; //定時(shí)器1開始計(jì)時(shí)
}
void timer1_ISR(void) interrupt 3 //定時(shí)器中斷1,中斷號:3
{
TR1=0; //定時(shí)器1計(jì)時(shí)關(guān)閉
//定時(shí)設(shè)定值3S顯示
if(T1Cnt != 0) //如果T1Cnt不等于0
{
T1Cnt--; //每次進(jìn)入定時(shí)中斷都自減1,直到等于零為止。
keyflag=1; //3S到keyflag=1:讀EEPROM值,顯示3S按鍵調(diào)整值
}
else
{
keyflag=0; //3S到keyflag=0:退出顯示壓力值
}
if(++SSCnt>=500) //閃爍累加>=500ms
{
SSCnt=0; //清0,下一個(gè)500ms
flag =~ flag; //閃爍標(biāo)志500ms取反一次
}
顯示部分
if(keyflag)
{
switch(wnd) //不同窗口顯示按鍵值
{
case 0: parm1 = keynum1; break; //窗口1顯示按鍵值
case 1: parm2 = keynum2; break; //窗口2顯示按鍵值
case 2: parm3 = keynum3; break; //窗口3顯示按鍵值
case 3: parm4 = keynum4; break; //窗口4顯示按鍵值
default:break;
}
}
else
{
switch(wnd) //不同窗口顯示壓力值//補(bǔ)氣值
{
case 0: if(md1==1) parm1 = press-30; else parm1 = press; if(press<30) parm1=0; break; //窗口1顯示壓力值
case 1: if(md1==1) parm2 = press*0.689-30; else parm2 = press; if(press<30) parm2=0; break; //窗口2顯示壓力值 case 2: if(md1==1) parm3 = press*0.689-30; else parm2 = press; if(press<30) parm3=0; break; //窗口3顯示壓力值
case 3: if(md1==1) parm4 = press*0.7-30; else parm2 = press; if(press<30) parm4=0; break; //窗口4顯示壓力值
default:break;
}
}
按鍵部分 keynum1<996本來這里是按小于1000判斷的,但不知道為什么退一位后再加直接跳到104,不能顯示101 102 103,再往回減到101再加可以102,103,如果減到995再加又直接跳到104. 改到小于996后可以正常加減并正常顯示,但不知道為什么? 注:只有三位數(shù)碼管,小于100顯示兩位整數(shù)加一位小數(shù),超出100,舍棄小數(shù)位,顯示三位整數(shù)。
void key_Service()
{
switch(key_scan(160))
{
case 1:
switch(wnd) 按下按鍵先讀取eeprom,然后判斷加減范圍,現(xiàn)在發(fā)現(xiàn)第一次上電后按減鍵會(huì)超出范圍,顯示亂碼,只有按加鍵才行,不理 解?還有加減后保存到eeprom,每次只能保存一個(gè)窗口的值,再選到其它窗口再設(shè)置保存后,上次的窗口的值就會(huì)復(fù)位還原!
{
case 0:T1Cnt=epxs_short; keynum1 = Read_EEPROM_u16(0x0400);
if(keynum1<996) keynum1 = keynum1+5;else keynum1++; if(keynum1>1050) keynum1=30; Save_EEPROM_u16(0x0400, keynum1); break; //范圍:0~150,0~100加5,到100退位顯示100~150加1
case 1:T1Cnt=epxs_short; keynum2 = Read_EEPROM_u16(0x0500);
if(keynum2<996) keynum2 = keynum2+5; else keynum2++; if(keynum2>1003) keynum2=20; Save_EEPROM_u16(0x0500, keynum2); break;
case 2:T1Cnt=epxs_short; keynum3 = Read_EEPROM_u16(0x0600);
keynum3 = keynum3+5; if(keynum3>995) keynum3=20; Save_EEPROM_u16(0x0600, keynum3); break; //kpa:20-995
case 3: T1Cnt=epxs_short; keynum4 = Read_EEPROM_u16(0x0700);
if(keynum4<996) keynum4 = keynum4+5; else keynum4++; if(keynum4>1003) keynum4=20; Save_EEPROM_u16(0x0700, keynum4); break; //kg/cm:0.2-10.5 } FMQCnt = FMQ_short; //按鍵聲音觸發(fā),滴一聲就停。 break;
上面紅字部分都是我需要各路大神的指點(diǎn),不勝感激!
|
|