![](https://i-blog.csdnimg.cn/blog_migrate/ca0905e5fd193d42923323ad3ea2e3a8.png)
#include <REGX52.H>
#include "Timer0.h"
#include "Key.h"
//函数库文件
#include <INTRINS.H>
unsigned char KeyNum,LEDMode;
void main(){
P2=0xFE;
Timer0Init();
while(1){
// Key()是监听独立按键按下并返回对应数字的函数
KeyNum=Key();
if(KeyNum){
//监听K1按下的状态
if(KeyNum==1){
LEDMode++;
// 监听独立按键按下,按下后判断LEDMode的状态,并进行改变
if(LEDMode>=2)LEDMode=0;
}
}
}
}
//中断程序,每一秒执行一次
void Timer0_Routine() interrupt 1{
// 定义为静态变量,程序结束后会保留不会清零
static unsigned int T0Count;
TL0 = 0x20;
TH0 = 0xD1;
T0Count++;
if(T0Count>=100){
T0Count=0;
if(LEDMode==0)
//左移一位
P2=_crol_(P2,1);
if(LEDMode==1)
//右移一位
P2=_cror_(P2,1);
}
}
时钟小案例源码
#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "Timer0.h"
unsigned char Sec=55,Min=59,Hour=23;
void main()
{
LCD_Init();
Timer0Init();
LCD_ShowString(1,1,"Clock:"); //上电显示静态字符串
LCD_ShowString(2,1," : :");
while(1)
{
LCD_ShowNum(2,1,Hour,2); //显示时分秒
LCD_ShowNum(2,4,Min,2);
LCD_ShowNum(2,7,Sec,2);
}
}
void Timer0_Routine() interrupt 1
{
static unsigned int T0Count;
TL0 = 0x18; //设置定时初值
TH0 = 0xFC; //设置定时初值
T0Count++;
if(T0Count>=1000) //定时器分频,1s
{
T0Count=0;
Sec++; //1秒到,Sec自增
if(Sec>=60)
{
Sec=0; //60秒到,Sec清0,Min自增
Min++;
if(Min>=60)
{
Min=0; //60分钟到,Min清0,Hour自增
Hour++;
if(Hour>=24)
{
Hour=0; //24小时到,Hour清0
}
}
}
}
}