资源简介
设计一个定时器。要求:能够输入定时时间,定时最长时间为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
评论
共有 条评论