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位数码管相关推荐

  1. c语言595驱动数码管,74hc595驱动4位数码管程序解析 - 74hc595驱动4位数码管电路连接图及程序解析...

    74hc595驱动4位数码管程序解析 //MCU:AT89S52 //晶振:11.0592M. //采用4位共阳极数码管 #include <regx51.h> //#include &l ...

  2. c语言595驱动数码管,74hc595驱动4位数码管电路连接图及程序解析 - 全文

    本设计使用了一个4位的数码管,为共阳型,为了节省单片机的IO口,使用了两片74HC595作为数码管的驱动芯片,共占用3个IO口.74HC595部分电路图如下: 与单片机相连接的三个脚分别为: HC_D ...

  3. 74HC595驱动2位数码管代码实现和注意事项

    74HC595驱动2位数码管 驱动芯片:74HC595,74LS595, 单片机:AT89C52,或者STC89C52都可以 实例代码 #include <STC89C5xRC.H> // ...

  4. STM32驱动2位数码管

    STM32驱动2位数码管 数码管简介 驱动 实现 完整代码如下 数码管简介 一般我们用的数码管是8位的,其实就是在一个模块中集成了8个LED,分别显示笔划,如下图 电路原理如下,若是将所有LED的N极 ...

  5. Arduino驱动4位数码管

    文章目录 Arduino驱动4位数码管 基本原理 静态(只能保存单个数码管) 动态显示 数码管引脚及接线 引脚定义 保存显示的数组 初始化 显示 单个管教及其显示 多个数码管同时亮(最多支持4个) 动 ...

  6. K_A02_004 基于单片机驱动8位数码管模块(74HC595) 0-7滚动+ 时钟显示

    目录 一.程序功能说明 二.基本参数 1.参数 2.芯片引脚说明 3.模块引脚说明 三.通信协议说明 时序: 代码: 四.部分代码说明 1.接线说明 1.1.STC89C52RC+8位数码管模块(74 ...

  7. K_A02_001 基于单片机驱动4位数码管模块(74HC595) 0-3滚动+ 时钟显示

    目录 一.程序功能说明 二.基本参数 1.参数 2.芯片引脚说明 3.模块引脚说明 三.通信协议说明 时序: 代码: 四.部分代码说明 接线说明 1.1.STC89C52RC+4位数码管模块(74HC ...

  8. K_A02_003 基于单片机驱动8位数码管模块(MAX7219) 0-7静态显示+滚动显示

    目录 一.资源说明 二.基本参数 1.电气参数 2.引脚说明 三.通信协议说明 工作时序 对应程序 四.部分代码说明 1.接线说明 1.1.STC89C52RC+8位数码管模块 1.2.STM32F1 ...

  9. 2个8位移位寄存器驱动4位数码管

    一.相关芯片 1.74HC595N * 2 2. Arduino Uno 3. 4位8段数码管 二.关于引脚 1.74HC595N引脚 基本上引脚就是如此,两块级联的方法是,第一块的9脚(串行输出)接 ...

  10. c语言595驱动数码管,使用74hc595驱动一位数码管

    本帖最后由 darknight 于 2018-7-20 22:42 编辑 74hc595是一种常用的I/O拓展芯片,今天我尝试用一个74hc595来驱动一个一位七段数码管,效果还行 功能:数码管循环显 ...

最新文章

  1. python3 uvloop 简介
  2. (一)准备阶段 2019年研究生数学建模D题《汽车行驶工况构建》
  3. MSU发布2018年视频压缩评比报告
  4. 如何在 SAPGUI 的同一个屏幕显示两个 ALV list
  5. 金山吹响讨伐灰鸽子的号角
  6. 2020牛客暑期多校训练营(第二场)Just Shuffle
  7. Guava入门~Charsets
  8. java反射之获取class对象,Java之反射机制(获取Class对象的三种方式)
  9. Prim算法的C语言程序
  10. 给.net初学者的一些建议(共勉之)
  11. java 调用tomcat api,tomcat处理http请求-下
  12. C++_你真的知道++i 和 i++的区别吗?_左值/右值/右值引用
  13. 项目日报模板_韶州中学项目建设正酣 ,计划明年9月投入使用
  14. Linux Command grep
  15. 微信扫一扫不能打开APK下载链接的问题
  16. 用js实现建议绘图板
  17. Visual Studio Ultimate 2013(VS2013旗舰版 下载地址及哈希校验)
  18. 电信宽带连接数限制的一个坑
  19. iOS 下载器实现-ASDownload
  20. macOS 切换python版本

热门文章

  1. h.264视频编码器
  2. 利用Python爬虫和Tableau分析链家网二手房信息
  3. 不想更新计算机怎么办,联想笔记本电脑不想更新系统更新怎么办啊
  4. 【老生谈算法】matlab实现K均值聚类算法——K均值聚类算法
  5. ODB for mysql
  6. 计算机科学导论课程考试,计算机科学导论教学革新阐述
  7. 阿里云大学Linux学习路线图(学+测)重磅上线!
  8. 批量删除新浪微博关注
  9. FreeSwitch Originate API
  10. 将AI中的对象复制到ppt编辑