keil5(按键控制流水灯)

 

前言

按键控制流水灯(正向,反向和暂停)


详细代码

main.c

#include 
#include"Timer0Init.h"
#include"key.h"
#include            //函数库
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 
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 

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语言实现按键控制流水灯(正向,反向和暂停)

 

你可能感兴趣的:(51单片机,单片机)