51单片机教程:数码管动态显示(0~99999999)74hc138驱动

发布者:BlissfulAura最新更新时间:2022-01-27 来源: eefocus关键字:51单片机  数码管  动态显示 手机看文章 扫描二维码
随时随地手机看文章

数码管动态显示0~99999999

一、共阴极8位数码管原理

在这里插入图片描述
在这里插入图片描述

首先了解一些必要知识

1、多位数码管是扫描显示,也就是同一时刻只有一个数码管显示

2、视觉暂留效果:第一个数码管显示完,第二个数码管接着显示,接着后面数码管一次显示,当显示(扫描)足够快的时候,人眼是看不到闪烁的,就认为多个数码管是同时显示的

3、多位数码管只能同时显示多个一样的数字,要显示不同数字需要扫描显示


比如说要显示12345678,你看起来8个数码管是同时亮的,其实同一时刻只有一个数码管是亮的

在这里插入图片描述

我们把时间放慢,看看数码管都发生了什么变化:

1、第1毫秒

在这里插入图片描述

2、第二毫秒

在这里插入图片描述

3、第三毫秒

在这里插入图片描述

4、第四毫秒

在这里插入图片描述

5、第五毫秒

在这里插入图片描述

6、第六毫秒

在这里插入图片描述

7、第七毫秒

在这里插入图片描述

8、第八毫秒

在这里插入图片描述

当数码管的扫描频率大于50hz的时候人眼是基本分不清的,也就是你的扫描8个数码管的周期控制在20ms内就可以实现动态显示不闪烁。


二、了解原理后打开proteus仿真,画电路图

这里用了74hc138,不会用的可以百度一下芯片用法

在这里插入图片描述

三、编写代码

代码功能,显示从0自加到99999999


#include


typedef unsigned long u32;    //对数据类型进行声明定义

typedef unsigned int u16;

typedef unsigned char u8;


sbit LSA=P3^0; //74hc138的A B C引脚定义

sbit LSB=P3^1;

sbit LSC=P3^2;


#define SMG P0 //定义数码管段数据接口P0


u8 buff[8]; //显示缓冲数组

u8 a[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//分别显示0 1 2 3 4 5 6 7 8 9


void delay_ms(u16 t)

{

u16 i,j;

for(i=0; i for(j=0; j<120; j++);

}


void update(u32 val)  //更新缓冲数组

{

//分离各位数据

buff[0]=val/10000000%10; //12345678/10000000%10=1;

buff[1]=val/1000000%10; //12345678/1000000%10=2;

buff[2]=val/100000%10; //12345678/100000%10=3;

buff[3]=val/10000%10; //12345678/10000%10=4;

buff[4]=val/1000%10;      //12345678/1000%10=5;

buff[5]=val/100%10;     //12345678/100%10=6;

buff[6]=val/10%10;       //12345678/10%10=7;

buff[7]=val%10;         //12345678%10=8;

}


void display(void)   //显示函数

{

u8 n;

for(n=0; n<8; n++)

{

switch(n)   //先位选

{

case 0:LSC=0;LSB=0;LSA=0;break;

case 1:LSC=0;LSB=0;LSA=1;break;

case 2:LSC=0;LSB=1;LSA=0;break;

case 3:LSC=0;LSB=1;LSA=1;break;

case 4:LSC=1;LSB=0;LSA=0;break;

case 5:LSC=1;LSB=0;LSA=1;break;

case 6:LSC=1;LSB=1;LSA=0;break;

case 7:LSC=1;LSB=1;LSA=1;break;

}

SMG=a[buff[n]]; //后发送段数据

delay_ms(1); //小延时,显示更稳定

}

}


void main(void)

{

u32 num=0; //要显示的数据

u16 t; //延时用

while(1)

{

update(num);    //更新显示缓冲数组

for(t=0; t<50; t++)   //用for循环来延时不然显示不正常

{

display(); //显示缓冲数组

}

num++; //显示数据自加

}

}


执行效果:一开始显示00000000,然后自动加一,一会变成00000035,直到溢出

在这里插入图片描述
在这里插入图片描述

关键字:51单片机  数码管  动态显示 引用地址:51单片机教程:数码管动态显示(0~99999999)74hc138驱动

上一篇:51单片机项目设计:超声波测距、智能小车(keil+proteus)
下一篇:51单片机教程:按键的定时器消抖(有延时的程序不是好程序

推荐阅读最新更新时间:2024-11-22 13:26

基于LabVIEW和MCS-51单片机实现数据采集与信息分析系统的设计
1、LabVIEW部分设计 1.1VISA简介 LabVIEW提供了功能强大的VISA库。VISA(Virtual Instrument Software Architecture)——虚拟仪器软件规范,是用于仪器编程的标准I/O函数库及其相关规范的总称。VISA库驻留于计算机系统中,完成计算机与仪器之间的连接,用以实现对仪器的程序控制,其实质是用于虚拟仪器系统的标准的API。VISA本身不具备编程能力,它是一个高层API,通过调用底层驱动程序来实现对仪器的编程,其层次如图1所示。VISA是采用VPP标准的I/O接口软件,其软件结构包含三部分,如图2所示。 与其他现存的I/O接口软件相比,VISA的I/O控制功能具有如下几个特
[测试测量]
基于LabVIEW和MCS-<font color='red'>51单片机</font>实现数据采集与信息分析系统的设计
MCS51单片机复位后各特殊功能寄存器的状态
单片机的复位操作使单片机进入初始化状态,其中包括使程序计数器PC=0000H,这表明程序从0000H地址单元开始执行。单片机冷启动后,片内RAM为随机值,运行中的复位操作不改变片内RAM区中的内容,21个特殊功能寄存器复位后的状态为确定值,见下表。 值得指出的是,记住一些特殊功能寄存器复位后的主要状态,对于了解单片机的初态,减少应用程序中的初始化部分是十分必要的。 说明:表中符号*为随机状态; A=00H,表明累加器已被清零; 特殊功能寄存器 初始状态 特殊功能寄存器 初始状态 A 00H TMOD 00H B 00H TCON 00H PSW 00
[单片机]
MCS<font color='red'>51单片机</font>复位后各特殊功能寄存器的状态
七段数码管显示四位数字
七段数码管显示四位数字的C代码: #include reg51.h //#include INTRINS.H unsigned char a,b,c,d; unsigned char code dispbitcode ={0x10,0x20,0x40,0x80,0x00};//共阴位码 unsigned char code dispcode = { 0X3F,/*0*/ 0X06,/*1*/ 0X5B,/*2*/ 0X4F,/*3*/ 0X66,/*4*/ 0X6D,/*5*/ 0X7D,/*6*/ 0X07,/*7*/ 0X7F,/*8*/ 0X6F,
[单片机]
七段<font color='red'>数码管</font>显示四位数字
51单片机基础之外部中断(一)
代码: #include reg51.h typedef unsigned char u8; typedef unsigned int u16; sbit LED=P2^0; sbit KEY=P3^2; void delay(u16 i) { while(i--); } void EXIT0_Init(void) //外部中断初始化 { IT0=1;//跳变沿触发方式(下降沿),低电平触发 EX0=1;//打开INT0的中断允许,打开外部中断0允许 EA=1;//打开总中断 } void main(void) { EXIT0_Init(); while
[单片机]
基于51单片机太阳能风能风光互补路灯控制器设计
一.硬件方案 本设计由STC89C52单片机电路+太阳能电池板电路+风机发电电路+锂电池充电保护电路+升压电路+稳压电路+光敏电阻电路+4位高亮LED灯电路+2档拨动开关电路+电源电路设计而成。 二.设计功能 (1)采用风机和太阳能电池板给锂电池充电,具有充电保护电路和稳压电路。 (2)锂电池升压到5V给单片机和附属电路供电。 (3)路灯用4个高亮LED灯模拟。 (4)用光敏传感器测光线亮度,低于设置值时自动开启灯光。 (5)路灯控制分为手动模式和自动模式,手动模式下可以自由的开灯或者关灯,自动模式下通过光敏电阻根据光照强度自动控制灯的开和关。 三.设计原理图 (1)原理图主要采用AD软件进行设计,如图: (2)PCB
[单片机]
基于<font color='red'>51单片机</font>太阳能风能风光互补路灯控制器设计
基于51单片机的ADC0809C程序代码
51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。 A/D转换器是模拟信号源与计算机或其它数字系统之间联系的桥梁,它的任务是将连续变化的模拟信号转换为数字信号,以便计算机等数字系统进行处理、存储、控制和显示。在工业控制
[单片机]
51单片机-温度PID算法(C程序)
#include reg51.h #include intrins.h #include math.h #include string.h struct PID { unsigned int SetPoint; // 设定目标 Desired Value unsigned int Proportion; // 比例常数 Proportional Const unsigned int Integral; // 积分常数 Integral Const unsigned int Derivative; // 微分常数 Derivative Const unsigned int LastError; // Error
[单片机]
基于51单片机的数字电压表设计
0 引言 数字电压表的设计和开发已有很多类型和款式,传统的数字电压表有自己的特点,它们适合在现场做手工测量,而要完成远程测量并对测量的数据做进一步处理,运用传统的数字电压表是无法完成的。为此,本文设计了基于PC通信的数字电压表,该表既可以完成测量数据的传递,又可借助PC进行测量数据的处理。所以,这种类型的数字电压表无论在功能和实际应用上,都具有传统数字电压表无法比拟的优点,这使得它的开发和应用都具有良好的前景。 1 系统构成 本系统主要由硬件和软件两部分构成,硬件主要包括数据采集电路,单片机最小数据采集系统,单片机与PC机的接口电路等。软件主要有单片机数据采集程序,单片机与上位机通信程序,以及上位机数据处理程序。 2
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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