main.c
#include<REGX52.H>
#include<INTRINS.H> //循环左移_crol_,循环右移_cror_
#include“Timer0.h”
#include“Key.h”
unsigned char KeyNum;
void main()
{
Timer0_Init() //定时器初始化
while(1)
{
KeyNum=Key()
if(KeyNum)
{
if(KeyNum==1)
{
LEDMode++;
if(LEDMode>=2)LEDMode=0;
}
}
}
}
void Timer0_Routine() interrupt 1
{
static unsigned int T0Count; //局部变量,静态,只可以由本函数引用
TL0 = 0x18; //设置定时初始值
TH0 = 0xFC; //设置定时初始值
T0Count++;
if(T0Count>=500)
{
T0Count=0;
if(LEDMode==0)
P2=_crol_(P2,1);//左移一位
if(LEDMode==1)
P2=_cror_(P2,1);//右移一位
}
}
Timer0.c
//定时器0初始化,1毫秒12Mhz
void Timer0_Init(void) //定时器配置
{
//AUXR &= 0x7F; 定时器时钟12T模式 删除
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x18; //设置定时初始值
TH0 = 0xFC; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0=1;
EA=1;
PT0=0; //优先级
}
Timer0.H
#ifndef__TIMER0_H__
#define__TIMER0_H__
void Timer0_Init(void)
#endif
key.c
#include<REGX52.H>
#include"Delay.h"
unsigned char Key()
{
unsigned char KeyNumber=0;
if(P3_1==0){Delay(20);while(P3_1==0);Delay(20);KeyNumber=1}
if(P3_0==0){Delay(20);while(P3_0==0);Delay(20);KeyNumber=2}
if(P3_2==0){Delay(20);while(P3_2==0);Delay(20);KeyNumber=3}
if(P3_3==0){Delay(20);while(P3_3==0);Delay(20);KeyNumber=4}
return KeyNumber;
}
//获取独立按键键码
//按下键码范围0~4,无按键按下时返回值为0
key.h-------头文件预处理如上