Keil5按键控制流水灯实现教程
前言
按键控制流水灯(正向,反向和暂停)
详细代码
main.c
#include <REGX52.H>
#include"Timer0Init.h"
#include"key.h"
#include<INTRINS.H> //函数库
unsigned char keynum,LEDmood;
void main()
{
P2=0xFE;
Timer0Init();
while(1)
{
keynum=key();
if(keynum)
{
if(keynum==1)
{
LEDmood=1;
}
if(keynum==2)
{
LEDmood=2;
}
if(keynum==3)
{
LEDmood=3;
}
}
}
}
unsigned int T0Count;
void Timer0_Routine() interrupt 1
{
TL0 = 0x18; //设置定时初始值
TH0 = 0xFC; //设置定时初始值
T0Count++;
if(T0Count>=500)
{
T0Count=0;
if(LEDmood==1)
P2=_crol_(P2,1);
if(LEDmood==2)
P2=_cror_(P2,1);
if(LEDmood==3)
P2=_cror_(P2,0);
}
}
key.c
#include"Delay.h"
#include <REGX52.H>
unsigned char key()
{
unsigned char keynum = 0;
if(P3_1==0){Delay(20);while(P3_1==0);Delay(20);keynum=1;}
if(P3_0==0){Delay(20);while(P3_0==0);Delay(20);keynum=2;}
if(P3_2==0){Delay(20);while(P3_2==0);Delay(20);keynum=3;}
if(P3_3==0){Delay(20);while(P3_3==0);Delay(20);keynum=4;}
return keynum;
}
Timer0Init.c
#include <REGX52.H>
void Timer0Init(void) //1毫秒@12.000MHz
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x18; //设置定时初始值
TH0 = 0xFC; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //jia
EA = 1; //jia
PT0 = 0; //jia
}
Delay.c
void Delay(unsigned char xms)
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
key.h
#ifndef __KEY_H__
#define __KEY_H__
unsigned char key();
#endif
//ÖжϺ¯Êý
//unsigned int T0Count;
//void Timer0_Routine() interrupt 1
//{
// TL0 = 0x18;
// TH0 = 0xFC;
// T0Count++;
// if(T0Count>=500)
// {
// T0Count=0;
// if(LEDmood==1)
// P2=_crol_(P2,1);
// if(LEDmood==2)
// P2=_cror_(P2,1);
// if(LEDmood==3)
// P2=_cror_(P2,0);
// }
//}
Delay.h
#ifndef __DELAY_H__
#define __DELAY_H__
void Delay(unsigned char xms);
#endif
Timer0Init.h
#ifndef __TIMER0INIT_H__
#define __TIMER0INIT_H__
Timer0Init(void);
#endif
总结
keil5+c语言实现按键控制流水灯(正向,反向和暂停)