資源簡介
設計一個定時器。要求:能夠輸入定時時間,定時最長時間為99分59秒;按啟動鍵后開始倒計時,數碼管顯示當前剩余時間,每秒鐘刷新一次數碼管顯示的數值;定時時間到達后,用數碼管閃爍指示。

代碼片段和文件信息
/*---------------------------------------------------------------------------
實驗四??SPI按鍵顯示接口設計??
by?周健力
(2)定時器的設計
按鍵0-9為數字鍵
按鍵10為左移
按鍵11為右移
按鍵12為時鐘用戶設置值重裝
按鍵13為定時器啟動
按鍵14為定時器暫停
按鍵15為系統重置
---------------------------------------------------------------------------*/
#include
unsigned?char?counter=0;
unsigned?char?systemflag=1;?//系統重置標志??
unsigned?char?time[4]={9959};////當前倒數計時各個位值
unsigned?int?total=5999;?//當前倒數計時
unsigned?int?totalset=5999;//用戶設定值?
unsigned?char?wei=0;?//當前設定位
unsigned?char?key_num=20;//鍵值寄存變量
void?main()
{
unsigned?int?i;
????SysClkIn(); //配置系統時鐘頻率
dog_set(); //看門狗配置
Port_Init() ;?//端口初始化
DelayMs(300);?//延時300ms,等待ZLG7289?復位完畢
ZLG7289_Init(40);?//調用ZLG7289?的初始化函數
????for?(?i=0;i<=3;i++?)
{
ZLG7289_Download(1i0time[i]);//前四個數碼管初始化
}
ZLG7289_Hide(0x0f);//?后四個數碼管消隱
Timer1_Init();//定時器1初始化
interrupt_Init(); //中斷初始化
ZLG7289_Flash(~(0x01< while(systemflag);?//系統重置標志?
}
void?keyinterrupt()?interrupt 0??//按鍵中斷產生的單片機外部中斷0
{???
????unsigned?int?i;
key_num=ZLG7289_Key();
if(key_num==10)//左移只有在未開始倒計時時有效
{
if(TR1==0)
{
wei=(wei+1)%4;
ZLG7289_Flash(~(0x01< }
}
else?if(key_num==11)//右移只有在未開始倒計時時有效
{
if(TR1==0)
{
wei=(wei+3)%4;
ZLG7289_Flash(~(0x01< }
}
else?if(key_num>=0&&key_num<=9)//當前位設置值只有在未開始倒計時時有效
{
if(TR1==0)
{
time[wei]=key_num;
totalset=(time[0]*10+time[1])*60+time[2]*10+time[3];//用戶設置總計時
total=totalset;
ZLG7289_Download(1wei0key_num);
}
}
else?if(key_num==13)//開始倒計時
{
ZLG7289_Flash(0xff);//取消閃爍顯示
TR1=1;//定時器1開始工作
wei=0;//當前設定位清零
}
else?if(key_num==14)//暫停計時
{
if(TR1==1)
{
TR1=0;//定時器1暫停工作
ZLG7289_Flash(~(0x01< }
}
else?if(key_num==12)//設置值重裝
{
Timer1_Init();//定時器初始化
ZLG7289_Flash(~(0x01< total=totalset;//當前時鐘還原為設置值
time[3]=(total%60)%10;?
time[2]=(total%60)/10;
time[1]=(total/60)%10;
time[0]=(total/60)/10;
for?(?i=0;i<=3;i++?)
{
ZLG7289_Download(1i0time[i]);//前四個數碼管初始化
}
}
else?if(key_num==15)//系統復位
{
systemflag=0;
}
else?;
}
void?timerinterrupt()?interrupt?3 ???//定時器1中斷
{
????unsigned?int?i;
counter++;
TH1=0x3c;
TL1=0xb0;
TF1=0;
if(counter==20)
{
counter=0;
total--;
time[3]=(total%60)%10;?
time[2]=(total%60)/10;
time[1]=(total/60)%10;
time[0]=(total/60)/10;
for?(?i=0;i<=3;i++?)
{
ZLG7289_Download(1i0time[i]);
}
if(total==0)?
{TR1=0;
ZLG7289_Flash(0x00);
}
}
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????18863??2011-04-24?22:15??shiyansi_2_\shiyansi
?????文件???????3009??2011-04-24?22:15??shiyansi_2_\shiyansi.c
?????文件???????4405??2011-04-24?22:15??shiyansi_2_\shiyansi.hex
?????文件???????7017??2011-04-24?22:15??shiyansi_2_\shiyansi.LST
?????文件??????23619??2011-04-24?22:15??shiyansi_2_\shiyansi.M51
?????文件???????9085??2011-04-24?22:16??shiyansi_2_\shiyansi.OBJ
?????文件???????2198??2011-04-24?22:16??shiyansi_2_\shiyansi.Opt
?????文件????????165??2011-04-24?22:16??shiyansi_2_\shiyansi.plg
?????文件???????2164??2011-04-24?22:16??shiyansi_2_\shiyansi.Uv2
?????文件???????2188??2011-04-24?22:16??shiyansi_2_\shiyansi_Opt.Bak
?????文件???????2283??2011-04-24?22:16??shiyansi_2_\shiyansi_Uv2.Bak
?????文件???????1206??2011-04-24?22:16??shiyansi_2_\systemset.c
?????文件????????276??2011-04-24?22:16??shiyansi_2_\systemset.h
?????文件???????3081??2011-04-24?22:16??shiyansi_2_\systemset.LST
?????文件???????4873??2011-04-24?22:16??shiyansi_2_\systemset.OBJ
?????文件???????3520??2011-04-24?22:16??shiyansi_2_\ZLG7289.C
?????文件???????2868??2011-04-24?22:16??shiyansi_2_\ZLG7289.h
?????文件???????7686??2011-04-24?22:16??shiyansi_2_\ZLG7289.LST
?????文件???????8732??2011-04-24?22:16??shiyansi_2_\ZLG7289.OBJ
?????目錄??????????0??2011-04-24?22:16??shiyansi_2_
-----------?---------??----------?-----??----
???????????????107238????????????????????20
- 上一篇:VL53L0X_STM32例程
- 下一篇:讀取EXCEL到JTABLE
評論
共有 條評論