#include "regx52.h"
void Delay(int time)
{
while(time--) //while循环一次需要10us
{
}
}
void Timer0Init(void) //1毫秒@11.0592MHz
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x66; //设置定时初值
TH0 = 0xFC; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1;
EA = 1;
PT0 = 0;
}
int i,count,LEDMode;
// 中断后需要执行的内容
void Timer0_motion() interrupt 1
{
TL0 = 0x66; //设置定时初值
TH0 = 0xFC; //设置定时初值
count++;
if(count == 500)
{
if(LEDMode == 0) //LED灯左移
{
if(i>=8)i=0;
P2=~(0x01<<i);
i++;
}
if(LEDMode == 1) //LED灯右移
{
if(i<0)i=7;
P2=~(0x01<<i);
i--;
}
count=0;
}
}
//独立按键的信号处理
int Key(void)
{
int KeyNumber = 0;
if(P3_1==0){Delay(1000);while(P3_1==0);Delay(1000);KeyNumber = 1;}
if(P3_0==0){Delay(2000);while(P3_0==0);Delay(2000);KeyNumber = 2;}
if(P3_2==0){Delay(2000);while(P3_2==0);Delay(2000);KeyNumber = 3;}
if(P3_3==0){Delay(2000);while(P3_3==0);Delay(2000);KeyNumber = 4;}
return KeyNumber;
}
int main()
{
int KeyNum;
//计时器初始化
Timer0Init();
while(1)
{
KeyNum=Key(); //接收返回独立按键的状态
if(KeyNum)
{
if(KeyNum == 1)
{
LEDMode++;
if(LEDMode>=2)LEDMode=0;
}
}
}
return 0;
}
实验现象