使用51单片机按键控制数码管显示0-9的方法详解

实验题目:使用51单片机设计两个按键控制数码管显示0-9,当K1按下减1,当K2按下加1.

理解程序可参考我的另外两个文章;

51单片机数码管显示0-9_学习笔记吧的博客-CSDN博客

51单片机独立按键控制合集_学习笔记吧的博客-CSDN博客

两个文章一结合就是一个新的产物,所以51单片机玩来玩去就是各种简单程序的相加。他套他,再套他,加个数码管加按键,加各种东西,重点是要理解,怎么让他们结合起来不会报错。

实验程序:

#include<REGX52.H>

unsigned char code Tab[]=     //共阴数码管段码表0-9
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void Delay1ms(unsigned int xms)  //延时1ms函数
{
unsigned char i,j;
while(xms)
{
i = 2 ;
j = 239 ;
do
{
while (--j);
}
while (--i);
xms--;
}
}

	void main ()    //主函数
	{
		unsigned char rge		= 0 ;   //局部变量计位数rge是段码表的位置
		P0= 0x3f;    //定义初始值显示0
		while(1)
		{

			if(P3_1 ==0)		//判断按键是否按下
			{
				Delay1ms(20);    //消抖
				while(P3_1 ==0);  //再次判断
				Delay1ms(20);     //消抖
				
				rge++;   //数字加1
				if(rge>=10)  //控制加的位数别超出段码表了
				{
					rge = 0 ;   //如果超出就让他回0去
				}
				 P0=Tab[rge];  //把第rge的段码赋值给P0口
			   Delay1ms(500);  //延时500ms
				}
				
				
				if(P3_0 ==0)		//判断按键是否按下
			{
				Delay1ms(20);    //消抖
				while(P3_0 ==0);  //再次判断
				Delay1ms(20);     //消抖
				
			if(rge==0)   //因为我们定义的变量led是无符号型,如果直接减减不可能减为负数
				rge = 9 ;  //所以判断如果减到0就重新给他赋值
			else
				rge--;   //如果没减到0就继续减减
			
				P0=Tab[rge];  //把第reg的段码赋值给P0口
			  Delay1ms(500);  //延时500ms
				}
			}
		}

实验原理图:

 

物联沃分享整理
物联沃-IOTWORD物联网 » 使用51单片机按键控制数码管显示0-9的方法详解

发表评论