sweetyy、

导航

单片机独立式按键

单片机独立式按键

一、所用开发板原理图

二、自动清零方式

1、Keil程序

#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar code dis_code[]={0x06,0x5B,0X4F,0X66};   //共阴极数码段1,2,3,4
//按键对应端口
sbit K1=P3^4;
sbit K2=P3^5;
sbit K3=P3^6;
sbit K4=P3^7;

//声明延时函数
 void delay10ms (void);
 void delay(uint t);
 
 //主函数
 void main(void) 
 {
       //因为按键是低电平有效,所以独立键盘的P3.4~P3.7端口置1,(低四位P3.0~P3.3置为1)
		P3=0xff;
		//P2.4~P2.7是数码管片选信号,这里选择P2.4号端口显示数字,即0001 1111
	    P2=0x1f;
	  
	     //扫描按键
		  if((P3&0xf0)!=0xf0)
			{
				 delay10ms();
				 if(K1==0)
				 {
				       //去抖动
						delay10ms();
						if(K1==0)
							{
							    //数码管显示1
								 P0=dis_code[0];
							    //显示数字时长
								 delay(180);
							} 
				 }
					if(K2==0)
					{
					    //去抖动
						 delay10ms();
						 if(K2==0)
						 {  
						    //数码管显示2
							 P0=dis_code[1];
							 delay(180);
						 }
					}
					if(K3==0)
					{
					     //去抖动
						 delay10ms();
						 if(K3==0)
						 {
						     //数码管显示3
							 P0=dis_code[2];
							 delay(180);
						 }
					}
					if(K4==0)
					{
					     //去抖动
						 delay10ms();
						 if(K4==0)
						 {
						     //数码管显示4
							 P0=dis_code[3];
							 delay(180);
						 }
					}
			}
	 
 }
 
  void delay10ms (void)
	{
		unsigned char i,j;
		for(i=0;i<100;++i)
		{
	    	for(j=0;j<100;j++);
		}
		
	}
			 
  void delay(uint t)
	{
		 uchar i;
		 while(t--)
		 for(i=0;i<200;++i);
	 }

2、效果展示:

二、持续显示方式

1、Keil程序

#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar code dis_code[]={0x06,0x5B,0X4F,0X66};
sbit K1=P3^4;
sbit K2=P3^5;
sbit K3=P3^6;
sbit K4=P3^7;
 void delay10ms (void);
 void delay(uint t);
 void main(void) 
 {
	  P3=0xff;
	  P2=0x1f;
	  
	  //相对于第一种方法,多增了一个while(1)死循环,按下某个键后,数码管持续显示,P0没有改变
	  while(1)
		{
		  if((P3&0xf0)!=0xf0)
			{
				 delay10ms();
				 if(K1==0)
				 {
						delay10ms();
						if(K1==0)
							{
								 P0=dis_code[0];
								 delay(180);
							} 
				 }
					if(K2==0)
					{
						 delay10ms();
						 if(K2==0)
						 {
							 P0=dis_code[1];
							 delay(180);
						 }
					}
					if(K3==0)
					{
						 delay10ms();
						 if(K3==0)
						 {
							 P0=dis_code[2];
							 delay(180);
						 }
					}
					if(K4==0)
					{
						 delay10ms();
						 if(K4==0)
						 {
							 P0=dis_code[3];
							 delay(180);
						 }
					}
			}
	 }
 }
  void delay10ms (void)
	{
		unsigned char i,j;
		for(i=0;i<100;++i)
		{
	    	for(j=0;j<100;j++);
		}
		
	}
			 
  void delay(uint t)
	{
		 uchar i;
		 while(t--)
		 for(i=0;i<200;++i);
	 }

2、效果展示

posted on 2021-12-09 21:14  sweetyy、  阅读(38)  评论(0)    收藏  举报