51单片机:数码管(静态+动态)
先不解释静态和动态有什么区别,看完你就明白了(主要是我菜,解释不清)。
单片机上没有静态数码管模块,虽然没有,但依然可以 在动态数码管电路中使用其中一个来学习静态数码管显示。
数码管简介:
数码管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单片机:数码管(静态+动态)相关推荐
- #51单片机#数码管静态与动态显示
数码管的静态显示与动态显示 学习数码管的静态与动态显示,首先要清楚,同一个时刻,单片机只能使能一个数码管. 动态显示:轮流点亮数码管,利用人眼的视觉暂留现象,造成多个数码管被点亮的视觉体验. 静态显示 ...
- 51单片机数码管显示60秒倒计时(C语言)
51单片机数码管显示60秒倒计时(C语言) 基于普中51单片机开发板,运用定时器/计数器0和1,实现60秒的倒计时和LED灯0.5s间隔闪烁 文章目录 51单片机数码管显示60秒倒计时(C语言) 前言 ...
- 基于51单片机数码管显示
基于51单片机数码管显示 ## 数码管显示原理 数码管(LED Segment Displays)由多个发光二极管封装在一起组成"8"字型的器件,引线已在内部连接完成,只需引出它们 ...
- 51单片机数码管交通灯倒计时c语言,51单片机数码管倒计时模拟交通灯汇编程序...
/********************************************************************** 51单片机数码管倒计时模拟交通灯汇编程序 LED数码管为 ...
- 100、基于51单片机数码管温控 温度控制风扇系统设计
毕设帮助.开题指导.技术解答(有偿)见文末. 目录 摘要 一.硬件方案 二.设计功能 三.实物图 四.原理图 五.PCB图 六.Protues仿真 七.程序 八.资料包括 摘要 在炎热的夏天人们用电风 ...
- 单片机c语言数码管显示5,51单片机数码管显示实验报告(5页)-原创力文档
51单片机数码管显示实验 实验内容: 编写程序让8只数码管初始显示0,每隔大约1s加1显示(可以用延时函数实现),到数码管显示9后,再从0开始显示,如此循环反复. C语言程序 #include #de ...
- 51单片机数码管滚动显示学号_静、动态数码管动态显示
1. 数码管静态.动态显示原理 静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码.当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止.这种方法的优点是占用CPU时间少, ...
- c语言数码管流动显示一个数,51单片机数码管动态显示 - 数码管动态扫描显示01234567程序(三种方案)...
数码管动态扫描显示01234567程序二--51单片机动态显示共阳数码管01234567 原理图 c语言程序 程序如下: #include #define uint unsigned int #def ...
- 51单片机数码管的静态与动态显示
操作数码管的显示其实与操作led灯的操作本质上差不多,可以把一个数码管当做操作8段led灯来让它显示我们所预想的效果,如下图所示. 假如我想让一个数码管显示1,把我只需把B.C两个LED灯点亮就可以了 ...
- 51单片机数码管滚动显示学号_数协微课 | LED数码管与51单片机应用
遇见工学,学在工学 停课不停学 数协电子组教学微课 它又来了 让我们开始学起来吧! 本期学习内容 LED数码管的结构与工作原理及相关原理图介绍 51单片机的应用:静态数码管显示.动态数码管显示 LED ...
最新文章
- 回头再学Asp.net系列--基础篇(一)
- JAVA Calendar具体解释
- 39道高级java面试题及答案(最新)
- HDU多校7 - 6853 Jogging(bfs+结论)
- Java NIO:浅析I/O模型
- SQL Server 连接字符串
- plpgsql语句的兼容性
- ES6 数值的拓展笔记
- 10亿数据量只需要100MB内存,redis的位存储为什么这么牛?
- matlab:绘制box函数和高斯函数曲线并进行傅里叶变换
- 关于QTableWidget删除遇到的坑(removeRow)
- 电工模拟接线软件 app_图文详解:户内配电箱的安装及接线方法 ,电气初学者必看!...
- 我只想说“独孤求败”与“东方不败”是不同的!
- Git报错Kex_exchange_identification
- 女朋友让我深夜十二点催她睡觉,我用Python轻松搞定
- stl文件用proe怎么打开_3dmax怎么导入stl文件?如何将proe的文件导入3dmax进行渲染?...
- 【译】LiveData三连
- 17暑期ACM俱乐部个人训练赛第1场 (石油oj) 7.24号
- 编译器错误 C2355
- 云计算厂商比较有含金的证书推荐