51单片机按键控制数码管显示0-9

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

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

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

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

两个文章一结合就是一个新的产物,所以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
				}
			}
		}

实验原理图:

 

单片机控制数码管显示0-9是一个常见的嵌入式系统应用。数码管是一种显示数字的电子元件,通常有共阳极和共阴极两种类型。以下是实现这一功能的基本步骤: ### 硬件连接 1. **数码管连接**:将数码管的段(A-G)和位选(如果有多个数码管)连接到单片机的I/O口。 2. **限流电阻**:在每个段的前面串联一个限流电阻(通常为220Ω)以保护数码管单片机。 3. **位选控制**:如果有多个数码管,使用位选控制线来选择当前要显示数码管。 ### 软件编程 1. **段码表**:定义一个段码表,将0-9的数字映射到对应的段码。例如,对于共阴极数码管0的段码为0x3F,1的段码为0x06,依此类推。 2. **显示函数**:编写一个函数,根据传入的数字参数,从段码表中读取对应的段码并输出到数码管。 3. **扫描显示**:如果使用多个数码管,通过快速切换位选控制线,实现多位数码管的动态扫描显示。 ### 示例代码 以下是一个简单的示例代码,假设使用单片机的一个I/O口控制数码管的段,另一个I/O口控制位选: ```c #include <reg51.h> #define uint unsigned int #define uchar unsigned char uchar code table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; void delay(uint xms) { uint i, j; for(i = xms; i > 0; i--) for(j = 110; j > 0; j--); } void display(uchar num) { P0 = table[num]; delay(5); } void main() { while(1) { for(uchar i = 0; i < 10; i++) { display(i); } } } ``` ### 说明 1. **段码表**:定义了一个`table`数组,存储了0-9的段码。 2. **延时函数**:简单的延时函数,用于控制显示速度。 3. **显示函数**:根据传入的数字参数,从`table`数组中读取对应的段码并输出到P0口。 4. **主函数**:循环显示0-9。 通过上述步骤和代码示例,你可以实现单片机控制数码管显示0-9的功能。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值