• 大小: 33KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-29
  • 语言: 其他
  • 标签: ZLG7289  c8051f330  

资源简介

设计一个定时器。要求:能够输入定时时间,定时最长时间为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


评论

共有 条评论

相关资源