实战之8051驱动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 <REGX51.H>
//延时函数
void delay(unsigned int ms){
int k,l;
for(k=0;k<ms;k++)
for(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;
}
}
免费领,单片机入门到高级进阶学习攻略(附教程+工具)
想要一起学习单片机的朋友,评论”我要入门“,有惊喜,加入我们,就可以与导师一对一互动,快速成长
实战之8051驱动8位数码管相关推荐
- c语言595驱动数码管,74hc595驱动4位数码管程序解析 - 74hc595驱动4位数码管电路连接图及程序解析...
74hc595驱动4位数码管程序解析 //MCU:AT89S52 //晶振:11.0592M. //采用4位共阳极数码管 #include <regx51.h> //#include &l ...
- c语言595驱动数码管,74hc595驱动4位数码管电路连接图及程序解析 - 全文
本设计使用了一个4位的数码管,为共阳型,为了节省单片机的IO口,使用了两片74HC595作为数码管的驱动芯片,共占用3个IO口.74HC595部分电路图如下: 与单片机相连接的三个脚分别为: HC_D ...
- 74HC595驱动2位数码管代码实现和注意事项
74HC595驱动2位数码管 驱动芯片:74HC595,74LS595, 单片机:AT89C52,或者STC89C52都可以 实例代码 #include <STC89C5xRC.H> // ...
- STM32驱动2位数码管
STM32驱动2位数码管 数码管简介 驱动 实现 完整代码如下 数码管简介 一般我们用的数码管是8位的,其实就是在一个模块中集成了8个LED,分别显示笔划,如下图 电路原理如下,若是将所有LED的N极 ...
- Arduino驱动4位数码管
文章目录 Arduino驱动4位数码管 基本原理 静态(只能保存单个数码管) 动态显示 数码管引脚及接线 引脚定义 保存显示的数组 初始化 显示 单个管教及其显示 多个数码管同时亮(最多支持4个) 动 ...
- K_A02_004 基于单片机驱动8位数码管模块(74HC595) 0-7滚动+ 时钟显示
目录 一.程序功能说明 二.基本参数 1.参数 2.芯片引脚说明 3.模块引脚说明 三.通信协议说明 时序: 代码: 四.部分代码说明 1.接线说明 1.1.STC89C52RC+8位数码管模块(74 ...
- K_A02_001 基于单片机驱动4位数码管模块(74HC595) 0-3滚动+ 时钟显示
目录 一.程序功能说明 二.基本参数 1.参数 2.芯片引脚说明 3.模块引脚说明 三.通信协议说明 时序: 代码: 四.部分代码说明 接线说明 1.1.STC89C52RC+4位数码管模块(74HC ...
- K_A02_003 基于单片机驱动8位数码管模块(MAX7219) 0-7静态显示+滚动显示
目录 一.资源说明 二.基本参数 1.电气参数 2.引脚说明 三.通信协议说明 工作时序 对应程序 四.部分代码说明 1.接线说明 1.1.STC89C52RC+8位数码管模块 1.2.STM32F1 ...
- 2个8位移位寄存器驱动4位数码管
一.相关芯片 1.74HC595N * 2 2. Arduino Uno 3. 4位8段数码管 二.关于引脚 1.74HC595N引脚 基本上引脚就是如此,两块级联的方法是,第一块的9脚(串行输出)接 ...
- c语言595驱动数码管,使用74hc595驱动一位数码管
本帖最后由 darknight 于 2018-7-20 22:42 编辑 74hc595是一种常用的I/O拓展芯片,今天我尝试用一个74hc595来驱动一个一位七段数码管,效果还行 功能:数码管循环显 ...
最新文章
- python3 uvloop 简介
- (一)准备阶段 2019年研究生数学建模D题《汽车行驶工况构建》
- MSU发布2018年视频压缩评比报告
- 如何在 SAPGUI 的同一个屏幕显示两个 ALV list
- 金山吹响讨伐灰鸽子的号角
- 2020牛客暑期多校训练营(第二场)Just Shuffle
- Guava入门~Charsets
- java反射之获取class对象,Java之反射机制(获取Class对象的三种方式)
- Prim算法的C语言程序
- 给.net初学者的一些建议(共勉之)
- java 调用tomcat api,tomcat处理http请求-下
- C++_你真的知道++i 和 i++的区别吗?_左值/右值/右值引用
- 项目日报模板_韶州中学项目建设正酣 ,计划明年9月投入使用
- Linux Command grep
- 微信扫一扫不能打开APK下载链接的问题
- 用js实现建议绘图板
- Visual Studio Ultimate 2013(VS2013旗舰版 下载地址及哈希校验)
- 电信宽带连接数限制的一个坑
- iOS 下载器实现-ASDownload
- macOS 切换python版本