每日一练 51单片机 希望自己早日学到stm32
利用定时器中断实现延时,利用四个按键实现led灯的四种状态
#include "reg52.h" #include "intrins.h" #define uint unsigned int #define uchar unsigned char
sbit k1=P3^1; sbit k2=P3^0; sbit k3=P3^2; sbit k4=P3^3;
uint i; /****************led*********************/ void led1()? { ?? ?while(1) ?? ?{ ?? ??? ?P2=0x00; ?? ?} } /********************摇摆*********************/ void led2() { ?? ?P2=0x00; ?? ?TR0=1; ?? ?while(1) ?? ?{ ?? ??? ?if(i==10) ?? ??? ?{ ?? ??? ??? ?P2=~P2; ?? ??? ??? ?i=0; ?? ??? ?}?? ? ?? ?} }
/**********************流水灯*******************/ void led3() { ?? ?P2=0xfe; ?? ?TR0=1; ?? ?while(1) ?? ?{ ?? ??? ?if(i==10) ?? ??? ?{ ?? ??? ??? ?P2=_crol_(P2,1); ?? ??? ??? ?i=0; ?? ??? ?}?? ? ?? ?} }
/*****************轮流点亮*********************/ void led4()? {
?? ?P2=0XFE; ?? ?TR0=1; ?? ?while(1) ?? ?{ ?? ??? ?if(i==10&&P2!=0x00) ?? ??? ?{? ?? ??? ??? ?P2=P2<<1; ?? ??? ??? ?i=0; ?? ??? ?} ?? ??? ?if(P2==0x00) ?? ??? ??? ?led1(); ?? ?} } /****************设置初值***************/?? ? void init() { ?? ?TMOD=0X01; ?? ?TH0=0XB1; ?? ?TL0=0XE0; ?? ?ET0=1; ?? ?EA=1; } /*****************延时程序*************/ void time() interrupt 1 { ?? ?TH0=0XB1; ?? ?TL0=0XE0; ?? ?i++; }
void main() { ?? ?init(); ?? ?P2=0XFF; ?? ?if(k1==0) ?? ??? ?led1(); ?? ?if(k2==0) ?? ??? ?led2(); ?? ?if(k3==0) ?? ??? ?led3(); ?? ?if(k4==0) ?? ??? ?led4(); } ?
|