实验项目:利用按键及定时器控制LED流水灯模式
实验准备:2个按键,8个LED灯
实验接法:按键接P1_0和P_1,8个LED灯接P2口
实验内容:利用按键与定时器实现按一个按键,流水灯左移,按另一个按键,流水灯右移
实验代码:
main.c:
#include <REGX52.H>
#include <Timer0.H>
#include <INTRINS.H>
unsigned char KeyNum;LEDMode;
int main()
{P2=0X01;
Timer0_Init();
while(1)
{
KeyNum=Key();
if(KeyNum!=0){if(KeyNum==1){LEDMode=1;}if(KeyNum==2){LEDMode=0;}
}
}
return 0;
}
Timer0_Routine() interrupt 1
{ static unsigned int T0Count;
TH0=64535/256;//
TL0=64535%256;//
T0Count++;
if( T0Count>=500)
{T0Count=0;if(LEDMode==0){P2=_crol_(P2,1);}
if(LEDMode==1){P2=_cror_(P2,1);}}
}
Timer0.c:
#include <REGX52.H>
void Timer0_Init()//¶¨Ê±Æ÷0³õʼ»¯
{
TMOD=0x01;//¶¨Ê±Æ÷1£º(GATE|C/T|M1|M0)¶¨Ê±Æ÷2£º(GATE|C/T|M1|M0) M1|M0È·¶¨¹¤×÷ģʽ:00/01/10/11 C/T 1¼ÆÊý0¶¨Ê±£¬GATE=1¿ªÆô£»
TMOD=TMOD&0xf0;//TMODµÍËÄλÇå0¸ßËÄλ²»±ä
TMOD=TMOD|0x01; //TMOD×îµÍλÖÃ1¸ßËÄλ²»±ä
TF0=1; //TCON:¿ÉλѰַTF1|TR1|TF0|TR0|IE1|IT1|IE0|IT0// £¨TF0=1;TR0=1£»Î»Ñ°Ö·£©
TR0=1;
TH0=64535/256;//É趨ʱÆ÷³õֵΪ64535£¬ÄÇô¼Æʱʱ¼äΪ1ms,Äóö¸ß8λ
TL0=64535%256;//ÄóöµÍ8λ
ET0=1;
EA=1;
PT0=0;
}
Key.c:
#include <REGX52.H>
#include <Delay.H>
unsigned char Key()
{
unsigned char KeyNumber=0;
if (P1_0==0){Delay(20);while(P1_0==0);Delay(20);KeyNumber=1;}
if (P1_1==0){Delay(20);while(P1_1==0);Delay(20);KeyNumber=2;}
if (P1_2==0){Delay(20);while(P1_2==0);Delay(20);KeyNumber=3;}
if (P1_3==0){Delay(20);while(P1_3==0);Delay(20);KeyNumber=4;}
return KeyNumber;
}
Delay.c:
int Delay(unsigned int xms)
{
unsigned char i, j;
while(xms)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
xms--;
}
}
实验结果: