CT107D蓝桥杯单片机按键代码

1、独立按键

/*
#include 

sbit led0 = P0^0;
sbit led1 = P0^1;
sbit led2 = P0^2;
sbit led3 = P0^3;
void delayms(int ms);

void main()
{
	char i,temp;
	P2=0XA0;P0=0X00;P2=0x80;P0=0XFF;
	
	while(1)
	{
		temp = 0x01;
		for(i=0;i<8;i++)
		{
			P0 = ~temp;
			delayms(1000);
			temp = 1<0;i--)
		for(j=845;j>0;j--);
}
*/
/*
#include  
void delay(int t)
{    
	int a;
	for(;t>0;t--)
	{
		for(a=20000;a>0;a--);
	}
}
void main()
{
	int status = 0x7f;
	int a,b,count = 0;
	P2=0xa0;P0=0x00;
	P2=0x80;P0=0xff;//关闭蜂鸣器,关闭所有小灯
	while(1)
	{
		P0=status;//led0亮
		delay(100);//时间间隔1秒
		a = status>>1;//亮的小灯左移一位
		b = status<<7;//确保status因左移而补进的0变为1
		status = a|b;
		count++;
		if(7 == count)
		{
			status = 0x7f;
		}
	}
}*/
/*独立按键:系统上电LED全灭,按下s7全开,s6全灭,s5偶数亮,s4奇数亮*/
#include 
#include 

sbit s7 = P3^0;
sbit s6 = P3^1;
sbit s5 = P3^2;
sbit s4 = P3^3;

void Delay1ms();
void delayms(int ms);
void keyscan4();


void main()
{
	P2=0xa0;P0=0x00;P2=0x80;P0=0xff;
	while(1)
	{
		keyscan4();
	}
}

void keyscan4()
{
	//按下s7全亮
	if(s7==0)
	{
		delayms(5);	 //延时去抖
		if(s7==0)
		{
			P0 = 0x00;
		}
		while(!s7);  //上升沿去抖,确保按一下只调用一次函数
	}
	
	//按下s6全灭
	if(s6==0)
	{
		delayms(5);
		if(s6==0)
		{
			P0 = 0xff;
		} 
		while(!s6);	
	}
	
	//按下s5奇数亮
	if(s5==0)
	{
		delayms(5);
		if(s5==0)
		{
			P0 = 0x55;
		}
		while(!s5);	
	}
	
	//按下s4偶数亮
	if(s4==0)
	{
		delayms(5);
		if(s4==0)
		{
			P0 = 0xaa;
		}	
		while(!s4);
	}
	
}

void Delay1ms()		//@11.0592MHz
{
	unsigned char i, j;

	_nop_();
	_nop_();
	_nop_();
	i = 11;
	j = 190;
	do
	{
		while (--j);
	} while (--i);
}

void delayms(int ms)
{
	int i;
	for(i=0;i

2、矩阵键盘

#include 
//#include 
#include 

sfr P4 = 0xc0;//P4寄存器地址
sbit P42 = P4^2;
sbit P44 = P4^4;
char temp;

void Delay1ms();
void delayms(int ms);
void keyscan16();

void main()
{
	P2=0xa0;P0=0x00;P2=0x80;P0=0xff; //关闭蜂鸣器,关闭小灯
	
	while(1)
	{
		keyscan16();
	}
}

void keyscan16()
{
	P3 = 0x7f;P44 = 0;
	temp = P3;
	temp = temp&0x0f;
	if(temp != 0x0f)
	{
		delayms(5);
		temp = P3;
		temp = temp&0x0f;
		if(temp != 0x0f)
		{
			temp = P3;       //很重要,这才是真正的P3的值
			switch(temp)
			{
				case 0x7e: P0 = 0xfe;break;
				case 0x7d: P0 = 0xfd;break;
				case 0x7b: P0 = 0xfb;break;
				case 0x77: P0 = 0xf7;break;
			}
		}
		while(temp != 0x0f)
		{
			temp = P3;
			temp = temp&0x0f;
		}
	}
	P44=1;
	
}

void Delay1ms()		//@11.0592MHz
{
	unsigned char i, j;

	_nop_();
	_nop_();
	_nop_();
	i = 11;
	j = 190;
	do
	{
		while (--j);
	} while (--i);
}

void delayms(int ms)
{
	int i;
	for(i=0;i

 

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