实战之8051驱动8位数码管

发布者:电子创新者最新更新时间:2022-12-08 来源: zhihu关键字:驱动  8位数码管 手机看文章 扫描二维码
随时随地手机看文章

8051驱动共阴极

过年有点时间,整理电脑,翻到一个之前的小作品,应一位刚入门的朋友的要求做的,控制8位数码管,依次显示0~9。发出来给大家瞧瞧,高手请略过。

由于当时手上没有开发板,就用Proteus来做电路仿真了。


工作环境:

Keil uVision5

Proteus 8 Professional


数码管




首先了解下数码管的相关知识

数码管的基本单元是发光二极管,按段数可分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元,也就是多一个小数点(DP),这个小数点可以更精确的表示数码管想要显示的内容;按能显示多少个(8)可分为1位、2位、3位、4位、5位、6位、7位、8位等数码管。



>数码管内部原理


上图是一个数码管的内部示意图,一个数码管的显示部分由8个二极管构成,刚好是一个字节,51单片机也是8位单片机。

根据内部发光二极管的公共连接端不同,可以分为共阳极接法和共阴极接法,共阳极接法就是发光二极管的正极共同接电源VCC,通过控制每个发光二极管的负极是否接地来显示数字。共阴极接法就是每个发光二极管的负极共同接地GND,通过控制每个发光二极管的正极是否接电源来显示数字。

图中a~g管脚分别控制着每个发光二极管的亮灭,所以,如果要显示1的话,只需要点亮b,c两段即可(把单片机对应端口输出0x06即可);如果要显示数字5,则只需要点亮a,f,g,c,d段即可组成数字5的显示(0x6d)。



>多位数码管内部原理图






上图是4位数码管的内部接线,每位数码管的阳极(或阴极)相连,其他相同引脚的引脚相连,一共有12个控制引脚,也可以得出8位的数码管有16个控制引脚,8个共阳(或共阴)端,8个控制a~g显示内容。



74LS138译码器

从数码管的显示原理来看,一个数码管要显示不同的字符,就要对数码管中的每个二极管进行不同控制,每个二极管要用到单片机的一个控制引脚,比如在实际应用中八位的共阴极或共阳极数码管,共有16个引脚,如果都使用单片机引脚进行控制,这就太浪费了,本来单片机的资源就很紧张。


解决办法是用一个译码器作为数码管的位选择器,需要哪一位显示就控制哪一位数码管的共阳(或共阴)端。



74LS138译码器1~3为输入端,由高到低为CBA; 7~15为输出端,由高到低为Y7-Y0。

工作过程:输入端输入三位二进制数,转成十进制,经过译码器后,输出端对应该十进制数的引脚(对应的Y)为低电平,其余为高电平,比如:


输入000,十进制为0,输出端的0位引脚为低电平,其余为高,也就是1111 1110;


输入101,十进制为5,输出端的5位引脚为低电平,其余为高,也就是1101 1111。

三位二进制数刚好可以表示0~7,8个数字,也就是可以控制8位数码管。


P=============roteus电路图



程序设计

#include

//延时函数

void delay(unsigned int ms){

int k,l;

for(k=0;kfor(l=0;l<120;l++);

}


//一个数码管显示 0~f 十六进制数组

char numHex[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};


/**

选择数码管,并显示出对应的十进制数

index :数码管位下标

num :char numHex[] 数组对应十进制数的下标

*/

void setIndexNum(unsigned char index,unsigned char num){

switch(index){//数码管位选,74LS138译码器的输入

case 0:

P1_2=0;

P1_3=0;

P1_4=0;

break;

case 1:

P1_2=1;

P1_3=0;

P1_4=0;

break;

case 2:

P1_2=0;

P1_3=1;

P1_4=0;

break;

case 3:

P1_2=1;

P1_3=1;

P1_4=0;

break;

case 4:

P1_2=0;

P1_3=0;

P1_4=1;

break;

case 5:

P1_2=1;

P1_3=0;

P1_4=1;

break;

case 6:

P1_2=0;

P1_3=1;

P1_4=1;

break;

case 7:

P1_2=1;

P1_3=1;

P1_4=1;

break;

}

P3=numHex[num];//数码管显示字符

}


void main(){

//proteus 不用while即可循环,不明白

unsigned char i,j;

for(i = 0;i < 8;i++){

for(j = 0;j < 16;j++){

setIndexNum(i,j);

delay(300);

if(j >= 15) break;

}

if(i >= 7) break;

}

}


关键字:驱动  8位数码管 引用地址:实战之8051驱动8位数码管

上一篇:51单片机还适合作为初学者入门的单片机吗?
下一篇:如何快速零基础到入门51单片机(三)

推荐阅读最新更新时间:2024-11-12 20:56

全面屏手机驱动下的新一轮“指纹”较量
  今年以来,各种关于苹果十周年纪念款 iPhone 8 的谣言不断,甚至连样机更是炒出了数个模版,但对于 Touch ID  指纹识别 传感器的具体位置却始终未定。不幸的是,凯基投顾分析师郭明錤近日透露,OLED 版 iPhone 不支持 指纹识别 。下面就随网络通信小编一起来了解一下相关内容吧。   究其原因, 全面屏 设计的手机已然成为智能手机发展的重要趋势。为了能在有限的智能手机尺寸上把屏幕做到最大,一整块显示屏将覆盖整个智能手机的正面,挤掉了原有正面Home键的位置。三星Galaxy S8正是因为这一原因将 指纹识别 转至手机背面,用户体验却一直被诟病。   近日,Vivo展示了基于高通第二代超声波指纹识别方案的智能手
[网络通信]
I2C串行总线标准驱动程序(C51)
I2C串行总线标准驱动程序(C51)-万能程序 /*------------------------------------------------------------------------------------------ I2C.c 1.1b ===================================================================================*/ #i nclude reg51.h #i nclude intrins.h unsigned char SystemError; sbit SCL= P1^6; //定义串行时钟线所在口 使用时根据自己
[单片机]
LED驱动电源选配方法及注意事项
  LED驱动 电源 选配方法:   LED本身的负载特性大大影响了用 开关电源 驱动它的可靠性。LED的负载特性,即伏安特性,属二极管特性。在一定区间内,LED两端电压的升高,使其电流的增长呈指数式,爆炸型的增长。故很多用开关电源驱动的LED灯具,表现出很多不稳定特性。原因就是,开关电源的输出,并不是很干净的平滑直流电压(电流)能量,而是一种非常复杂的能量信号,其大致可以看成是平稳的。   而LED对电压变化非常敏感,LED在稳定的电流下工作时,其两端电压一般是3.0-3.6V之间(大小功率LED略有差异),当加在其两端的电压稍微波动后,其两端电流就会剧烈变动,此时电源的输出功率也即猛烈变化。若电网电压中有较突然的变大,此时很
[电源管理]
摄像头驱动学习
driversmediavideos3c2440camif.c driversmediavideos3c2440_ov9650.c driversmediavideosccb.c 硬件连接 I2C总线连接 I2CSCL ——GPE14 I2CSDA——GPE15 Sccb.h #define SIO_C S3C2410_GPE14 #define SIO_D S3C2410_GPE15 #define State(x) s3c2410_gpio_getpin(x) #define High(x) do{s3c2410_gpio_setpin(x,1); smp_mb();}while(0) #define Low(x) d
[单片机]
摄像头<font color='red'>驱动</font>学习
低压驱动的RF MEMS开关设计与模拟
近年来射频微电子系统(RF MEMS)器件以其尺寸小、功耗低而受到广泛关注,特别是MEMS开关构建的移相器与天线,是实现上万单元相控阵雷达的关键技术,在军事上有重要意义。在通信领域上亦凭借超低损耗、高隔离度、成本低等优势在手机上得到应用。然而RF MEMS开关普遍存在驱动电压高、开关时间长的问题,劣于FET场效应管开关和PIN二极管开关。相对于国外已取得的成果,国内的研究尚处于起步阶段。下文将针对MEMS开关的缺陷做一些改进。   1 RF MEMS开关的一般考虑   当MEMS开关的梁或膜受静电力吸引向下偏移到一定程度时达到阈值电压,梁或膜迅速偏移至下极板,电压大小取决于材料参数、开关尺寸及结构。梁或膜的材料需要比较好的杨氏
[模拟电子]
低压<font color='red'>驱动</font>的RF MEMS开关设计与模拟
单片机驱动19264液晶大数字时钟程序
弄了个简单的19264液晶时钟,采用大数字显示,用DS1302和ds12cr887时钟芯片,分别两个对应程序。只有时、分、秒和温度显示。 仿真原理图如下 单片机源程序如下: /*系统头文件--------------------------------------------------------------------*/ #include reg52.h #include absacc.h /*包含的文件--------------------------------------------------------------------*/ #include MODEL.h #include LCD19264.
[单片机]
单片机<font color='red'>驱动</font>19264液晶大数字时钟程序
MSP430G2553单片机驱动TLC5540
#include msp430g2553.h #include stdio.h typedef unsigned char INT8U; typedef unsigned int INT16U; #define ADC_CTRL_DIR_PORT (P2DIR) #define ADC_CTRL_OUT_PORT (P2OUT) #define ADC_DATA_DIR_PORT (P1DIR) #define ADC_DATA_IN_PORT (P1IN) #define ADC_OE_BIT (BIT0) #define ADC_CLK_BIT (BIT1) #define ADC
[单片机]
LED驱动器的可靠性和电磁兼容性测试方案(一)
一  引言   随着人类科技的不断发展,我们星球的夜晚变得越来越明亮,越来越绚烂,在这些变化的背后,是不断发展的照明技术。在照明技术的开发及制造中使用的电子系统和元器件改变了照明设备及系统的未来。纵观照明技术的发展历史,大致经历了四个时代的跨越式变迁,并得到了长足的发展。早期具有代表性的是它通过二极管和晶体管对交流电进行整流,随后发展为内置直流逆变产生高频交流,高效驱动T8灯具的电子荧光灯照明镇流器。如今,设计者已不再仅仅设计电子镇流器, 而致力于AC-DC智能变换器的设计,有些内部还含基于微处理器构成的用以照明控制和调光的复杂控制系统。   设计者们给发光二极管—LED和阵列作光源设计的供电电源,称之为LED电子驱动器。对于
[模拟电子]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved