先不解释静态和动态有什么区别,看完你就明白了(主要是我菜,解释不清)。

单片机上没有静态数码管模块,虽然没有,但依然可以 在动态数码管电路中使用其中一个来学习静态数码管显示。

数码管简介:

数码管51单片机上的数码管,通俗一点讲就是多个led组装在一起,数码管的点亮和led差不多(复杂一点),按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。

共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极 COM 接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,反之就不亮。

共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM 接到地线GND 上,当某一字段发光 二极管的阳极为高电平时,相应字段就点亮,反之就不亮。

我的单片机是共阴数码管,原理图如下:

数码管驱动芯片and译码器:

因为共阴数码管是要靠单片机 IO口输出电流来点亮的,但单片机 I/O口难以输出稳定、大的电流,所以数码管与单片机连接时需要加驱动电路,可以用上拉电阻的方法或使用专门的数码管驱动芯片,比如 74HC573、74HC245等,其输出电流较大, 电路接口简单

我的译码器是74HC138,(译码器稍微有点打脑壳,原理懂了就好了)。

静态数码管显示:

所以想让单个数码管显示,只需要字段让对应的led点亮就可以了。

例如,显示0,就是abcdef亮,g和Dp不亮,Dp是最高位,a是最低位,二进制就是0011 1111,十六进制是0x3f。以此原理就可以推出常用字符的段选,码表如下:

这里先不研究138译码器的原理,直接写代码,点亮左数第二个数码管(LED7),那么138译码器的配置:C=1,B=1,A=0。(C是高位,110进制转换就是6,0123456,第7个数)用这个方法来控制哪个显示,有没有很巧妙?

#include<reg52.h>typedef unsigned char u8;sbit K1=P2^2;
sbit K2=P2^3;
sbit K3=P2^4;u8 code number[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
//ram的资源比较宝贵    ,code的作用是告诉单片机,我定义的数据要存储在ROM(程序存储区)里面,写入后就不能再更改
//这个code可要可不要
void main()
{K3=1;K2=1;K1=0;                   //LED7显示while(1){P0=number[1];    //显示1}
}   

动态数码管显示:

上面的静态数码管显示一个就动用了出138译码器以外的8个I/O口,而要全部显示8个的话就需要64个I/O口,单片机根本就没有这么多资源。

所以用一个138译码器实现数码管的动态刷新显示,switch-case是核心。

#include<reg52.h>typedef unsigned char u8;sbit K1=P2^2;
sbit K2=P2^3;
sbit K3=P2^4;u8 code number[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};void delay(u8 t)
{while(t--);
}void dtxs(u8 i,x)
{switch(i){case 1:K3=0;K2=0;K1=0;break;case 2:K3=0;K2=0;K1=1;break;case 3:K3=0;K2=1;K1=0;break;case 4:K3=0;K2=1;K1=1;break;case 5:K3=1;K2=0;K1=0;break;case 6:K3=1;K2=0;K1=1;break;case 7:K3=1;K2=1;K1=0;break;case 8:K3=1;K2=1;K1=1;break;}                P0=number[x];delay(10);P0=0x00;
}void main()
{while(1){dtxs(1,9);dtxs(2,8);     //单片机最后两位显示89}
}   

萌新上路,制作不易,如有错误还请评论区指正。各位帅气逼人、美若天仙、颜值爆表的看官老爷点个赞吧,求求了。(在线卑微求赞)

51单片机:数码管(静态+动态)相关推荐

  1. #51单片机#数码管静态与动态显示

    数码管的静态显示与动态显示 学习数码管的静态与动态显示,首先要清楚,同一个时刻,单片机只能使能一个数码管. 动态显示:轮流点亮数码管,利用人眼的视觉暂留现象,造成多个数码管被点亮的视觉体验. 静态显示 ...

  2. 51单片机数码管显示60秒倒计时(C语言)

    51单片机数码管显示60秒倒计时(C语言) 基于普中51单片机开发板,运用定时器/计数器0和1,实现60秒的倒计时和LED灯0.5s间隔闪烁 文章目录 51单片机数码管显示60秒倒计时(C语言) 前言 ...

  3. 基于51单片机数码管显示

    基于51单片机数码管显示 ## 数码管显示原理 数码管(LED Segment Displays)由多个发光二极管封装在一起组成"8"字型的器件,引线已在内部连接完成,只需引出它们 ...

  4. 51单片机数码管交通灯倒计时c语言,51单片机数码管倒计时模拟交通灯汇编程序...

    /********************************************************************** 51单片机数码管倒计时模拟交通灯汇编程序 LED数码管为 ...

  5. 100、基于51单片机数码管温控 温度控制风扇系统设计

    毕设帮助.开题指导.技术解答(有偿)见文末. 目录 摘要 一.硬件方案 二.设计功能 三.实物图 四.原理图 五.PCB图 六.Protues仿真 七.程序 八.资料包括 摘要 在炎热的夏天人们用电风 ...

  6. 单片机c语言数码管显示5,51单片机数码管显示实验报告(5页)-原创力文档

    51单片机数码管显示实验 实验内容: 编写程序让8只数码管初始显示0,每隔大约1s加1显示(可以用延时函数实现),到数码管显示9后,再从0开始显示,如此循环反复. C语言程序 #include #de ...

  7. 51单片机数码管滚动显示学号_静、动态数码管动态显示

    1. 数码管静态.动态显示原理 静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码.当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止.这种方法的优点是占用CPU时间少, ...

  8. c语言数码管流动显示一个数,51单片机数码管动态显示 - 数码管动态扫描显示01234567程序(三种方案)...

    数码管动态扫描显示01234567程序二--51单片机动态显示共阳数码管01234567 原理图 c语言程序 程序如下: #include #define uint unsigned int #def ...

  9. 51单片机数码管的静态与动态显示

    操作数码管的显示其实与操作led灯的操作本质上差不多,可以把一个数码管当做操作8段led灯来让它显示我们所预想的效果,如下图所示. 假如我想让一个数码管显示1,把我只需把B.C两个LED灯点亮就可以了 ...

  10. 51单片机数码管滚动显示学号_数协微课 | LED数码管与51单片机应用

    遇见工学,学在工学 停课不停学 数协电子组教学微课 它又来了 让我们开始学起来吧! 本期学习内容 LED数码管的结构与工作原理及相关原理图介绍 51单片机的应用:静态数码管显示.动态数码管显示 LED ...

最新文章

  1. 回头再学Asp.net系列--基础篇(一)
  2. JAVA Calendar具体解释
  3. 39道高级java面试题及答案(最新)
  4. HDU多校7 - 6853 Jogging(bfs+结论)
  5. Java NIO:浅析I/O模型
  6. SQL Server 连接字符串
  7. plpgsql语句的兼容性
  8. ES6 数值的拓展笔记
  9. 10亿数据量只需要100MB内存,redis的位存储为什么这么牛?
  10. matlab:绘制box函数和高斯函数曲线并进行傅里叶变换
  11. 关于QTableWidget删除遇到的坑(removeRow)
  12. 电工模拟接线软件 app_图文详解:户内配电箱的安装及接线方法 ,电气初学者必看!...
  13. 我只想说“独孤求败”与“东方不败”是不同的!
  14. Git报错Kex_exchange_identification
  15. 女朋友让我深夜十二点催她睡觉,我用Python轻松搞定
  16. stl文件用proe怎么打开_3dmax怎么导入stl文件?如何将proe的文件导入3dmax进行渲染?...
  17. 【译】LiveData三连
  18. 17暑期ACM俱乐部个人训练赛第1场 (石油oj) 7.24号
  19. 编译器错误 C2355
  20. 云计算厂商比较有含金的证书推荐

热门文章

  1. 计算机c盘应该装什么区别,电脑的c盘和d盘有什么区别吗
  2. 各种文件上传绕过姿势(一)
  3. 谈谈mysql update语句 set顺序问题、列交换sql实现及多表更新注意事项
  4. 对随机变量值域的思考
  5. 【Java】Unicode转中文代码实现
  6. 高地址和低地址、高字节低字节、大小端模式(及如何互换),存储顺序(!!)
  7. 统计系列(二)常见的概率分布
  8. grid_map(五):grid_map函数定义、类型定义学习
  9. 2020互联网大厂的薪资职级一览
  10. SAP的物料编码分析