51单片机驱动数码管显示

1. 数码管介绍.

数码管可以看成是一个个LED,大家学的第一个关于单片机的第一个例程,应该就是点亮一个LED,而这个数码管就是有顺序的点亮某几个LED.在这里插入图片描述

2.数码管的段选

从上面图片可以看到有共阴极和共阳极两种数码管,所以当我们让其中几个数码管显示的时候,只需要让a、b、c、d、e、f、g、dp(这几段称为段选端)这8段中的其中几段点亮就ok了。

3.多个数码管并联

一般来说,使用数码管不会单单一个,当使用多个数码管一起使用的时候,这时候几个数码管的段选端会并联在一起。每一个的共阳或者共阴极不在直接和电源的正或者负极相连,而是成为位选端,当需要其点亮时让其接通
(下图中a~g、dp为段选端,1 ~4 为位选端)
在这里插入图片描述

4.如何驱动四位数码管显示数字。

①四位数码管有8个段选端,4个位选端,让单独一个数码管显示的时候只需要在段选端输入段码,并且接通该数码管的位选端;
②如果需要显示四位数字时,就需要动态显示了,因为人类的视觉暂留效应(自行百度)在很短时间内依次显示数字,因为时间很短,看起来就像是同时亮着。

亚龙某实验台上的四位数码管显示。

#include "reg52.h"				 //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16;	 	 //对数据类型进行声明定义
typedef unsigned char u8;
//数码管位选
sbit seg1=	P2^0;//第一个数码管
sbit seg2= 	P2^1;//第二个数码管
sbit seg3=	P2^2;//第三个数码管
sbit seg4=	P2^3;//第四个数码管
u8 DisplayData[8];
//u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//自己开发板
u8 code smgduan[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//学校平台使用
void delay(u16 i)
{
	while(i--);
}

/*******************************************************************************
* 函 数 名       : segdisplay()
* 函数功能		 : 数码管显示
* 输    入       : 无
* 输    出    	 : 无
*******************************************************************************/
void segdisplay()
{
	int i;
	for(i=1;i<5;i++)
	{
		switch(i)
		{
			P0=0Xff;
			delay(5);	
			case 1:	 seg1=0;seg2=1;seg3=1;seg4=1; break;
			case 2:	 seg2=0;seg1=1;seg3=1;seg4=1; break;
			case 3:	 seg3=0;seg1=1;seg2=1;seg4=1; break;
			case 4:	 seg4=0;seg1=1;seg2=1;seg3=1; break;
		}
		
		P0=DisplayData[i];
		delay(100);
		P0=0XFF;
		delay(5);	
	}		
}

/*******************************************************************************
* 函 数 名       : main
* 函数功能		 : 主函数
* 输    入       : 无
* 输    出    	 : 无
*******************************************************************************/
void main()
{
 	while(1)
 	{
 		//显示带两位小数的数字,提前把数字乘100,四舍五入或者取整
		 DisplayData[1]=smgduan[temp /1000%10];//显示十位
    	 DisplayData[2]=smgduan[temp /100%10]&0x7f;//显示个位和小数点
    	 DisplayData[3]=smgduan[temp /10%10];//显示十分位
    	 DisplayData[4]=smgduan[temp /1%10];//显示百分位
    	 segdisplay();  
	}
}		

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jun8086

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值