//刚学单片机 才写的一个,望大神们指导
#include <REGX51.H>
#define uchar unsigned char
#define K1 P2_0 //定义P0_0口为K1
#define K2 P2_1 //定义P0_1口为K2
//定义低电平有效
#define LED P0 //定义P0为LED引脚
//定义低电平有效
uchar key_chck; //按键检测标志
uchar time_05;
uchar time_tmp;
void time0_inter() interrupt 1
{
TH0 = 0x70; //20ms
TL0 = 0x00;
key_chck = 1; //隔20ms(时间可调)检测一下按键
time_tmp++;
if(time_tmp > 25)
{
time_tmp = 0;
time_05++;
}
}
void main()
{
uchar led_status = 0;
TMOD = 0x01;
ET0 = 1;
TR0 = 1;
TH0 = 0x70;
TL0 = 0x00;
EA = 1;
while(1)
{
if(key_chck)
{
key_chck = 0;
if(led_status == 0x08)
{
if(!K1)
{
led_status++; //将{led_status.1,led_status.0}设为K1状态标志
led_status %= 3;
}
}
if(!K2)
{
led_status += 0x04;
led_status &= 0x0C; //将{led_status.3,led_status.2}设为K2状态标志
}
}
switch(led_status)
{
case 0x00:
LED = 0x00; //LED常亮
break;
case 0x01:
if(time_05 & 0x01) //LED隔0.5s闪一次
{
LED = ~LED;
}
break;
case 0x02:
if(time_05 % 3 == 0) //LED 0.5s亮 1s灭
{
LED = 0xFF;
}
else
{
LED = 0x00;
}
break;
case 0x04:
LED = 0xFE;
if(time_05 & 0x01)
{
LED = LED << 1;
}
break;
case 0x08:
LED = 0xFF; //LED全灭 待命
break;
default:
;
}
}
}
|