MCU-51单片机直接驱动多位数码管2直接驱动多位数码管
单片机驱动LED数码管的方法

系统装置技术与应用TECHNOLOGY & APPLICATION单片机静态输出驱动和动态输出静态驱动都可以分为单片机直接七段码输出驱动和单片机8421码输出七段译码驱动。
动态扫描驱动显示可以分为单片机七段码输出动态位选驱动、单片机8421码输出七段译码动态位选驱动、串行移位输出扫描驱动等,现分析这几种驱动方法的工作原理及优缺点。
工作原理及优缺点1. 单片机静态输出驱动LED七段数码管工作原理及优缺点单片机静态输出驱动LED七段数码管是指给每位数码管的笔段加驱动信号,以显示数据。
它分为单片机直接七段码输出驱动和单片机8421码输出七段译码驱动,工作原理及优缺点如下。
1) 单片机直接七段码输出驱动。
单片机将要显示的数据通过程序译成七段码,经单片机I/O口直接驱动LED数码管。
显示1位LED数码(含小数点)需要8位I/O口驱动,除显示十进制数、十六进制数外,还可以显示一部分特定的字符,如“H”、“J”、“L”、“n”、“o”、“P”、“q”及“U”等字符。
2) 单片机8421码输出七段译码驱动。
单片机将要显示的十进制数或十六进制数的8421码直接从I/O口输出,经过七段译码器驱动LED数码管。
显示1位LED数码(不含小数点)只需要4位I/O口驱动,但需要外部译码器支持,一般只能显示十进制数、十六进制数对应的数字、字符。
控制程序与直接七段码输出驱动相似,省去了“查找对应的七段码”过程。
2. 单片机动态输出静态驱动LED七段数码管工作原理及优缺点单片机动态输出静态驱动LED七段数码管也是单片机驱动LED数码管的方法文/福建省建阳市供电有限公司 蓝厚荣单片机应用于工业控制等方面时,经常要用LED七段数码管显示一些数据。
单片机驱动LED数码管的方法有很多种,可以分为静态输出驱动、动态输出静态驱动和动态扫描驱动等几种方法。
94 | 电气时代・2008年第4期www.eage.com.cn系统装置技术与应用TECHNOLOGY & APPLICATION2008年第4期・电气时代 | 95指给每位数码管加驱动信号,以显示数据。
51单片机-数码管

51单片机-数码管共阴极是指所有发光二极管阴极连接在一起,这个共阴极可以用来做片选。
如图,这里有8个发光二极管,到底哪个亮需要进行片选。
段选:8 段数码管每一段的控制段叫段选位选:就是进行哪个8 段数码管亮的选择TX-1C 使用两片锁存器74HC573 实现位选和段选这里的D0”7是连在单片机的I/O 口上,当为高电平时,Q 与D 中的数据一致,遇到负跳变沿时Q 中的数据保持住,D 中的数据即使变化也不会影响Q。
MCUVersion2 使用的是74HC245 和38 译码器74HC13874HC245 有一个缓冲和驱动的作用,这样可以使led 显示的更加稳定,数码管显示分动态显示和静态显示,每个数码管的状态都是被不断更新的,利用的人的视觉暂留,使看上去数值保持在一个固定的位置上,人的视觉是有延续性的,当一个东西不断变化时,变化的时间小于人眼的视觉暂留时间的话,人的眼睛会以为这个东西是连续的。
静态显示是一幅画面放在那看上去是不动的而它确实是不动的。
动态扫描显示即轮流向各位数码管送出字型码和相应位选,利用发光管的余晖和视觉暂留作用,使人的感觉好像各位数码管同时都在显示。
静态显示:数码管从左向右依次点亮: #include <reg52.h>void delay(){int i,j; for(i = 0; i <0xff; i++) for(j = 0; j <0xff; j++) ;} unsigned int code duan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07};unsigned int code wei[]={ 0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff};void main(){ while(1){ int i; P2 = 0x39; for(i = 0; i <8; i++){ P2 = duan[ i]; P1 = wei[ i]; delay(); } } } 想让哪个数码管亮多少就亮多少:tips:感谢大家的阅读,本文由我司收集整编。
51单片机综合学习系统之数码管使用学习篇

码管三极管的基极分别接在单片机的 P2.0--P2.7口上。通过控制这些三极管基极电平来打开或关闭数码管 的显示,即起到“使能”作用。
理论讲了一大堆,现在我们就来一起动手实践一下,这样才有感性的认识。从包装盒中取出 51单片机
图7
51单片机综合学习系统资源丰富,可做实验有:8位 LED 数码管、32路 LED、4x4矩阵键盘、4个直控键 盘、蜂鸣器喇叭、继电器试验、I2C 总线接口、SPI 总线接口、160X 液晶、128X64液晶、红外接收头接口、 支持 PS/2接口的104键标准键盘、步进电机驱动接口、ADC0832模/数转换接口、PC817光电耦合器、串行时 钟芯片 DS1302、温度传感器 DS18B20接口、RS232串口通讯、外扩展接口以便外接更多的实验资源。
显示数字 0
p0.7 p0.6 p0.5
1
1
0
p0.4 0
p0.3 0
p0.2 0
p0.1 0
p0.0 0
16进制代码 C0H
1
1
1
1
1
1
0
0
1FLeabharlann H2101
0
0
1
0
0
A4H
3
1
0
1
1
0
0
0
0
B0H
4
1
0
0
1
1
0
0
1
99H
5
1
0
0
1
0
0
1
0
92H
6
51单片机串口1工作方式0驱动74hc595和74hc164输出数码管

我也是研究了好几天才开发明白的所以废话不多少,直接上硬货一,代码部分:(1)相关寄存器配置:串行口控制寄存器SCON串行口控制寄存器SCON的格式D7 D6 D5 D4 D3 D2 D1 D0SCON SM0 SM1 SM2 REN TB8 RB8 TI RI 98H 位地址9FH 9EH 9DH 9CH 9BH 9AH 99H 98HSM0、SM1——串行口的4种工作方式选择位SM0 SM1 方式功能0 0 0 同步移位寄存器方式0 1 1 8位异步收发,波特率由定时器控制1 02 9位异步收发,波特率为时钟频率的1/64或者1/32 1 13 9位异步收发,波特率由定时器控制寄存器的十六进制操作控制:复习一下例子:SCOM = 0x020X02的0代表在高八位,2的位置代表在低八按照8421 8421顺序操控scon SM0 SM1 SM2 REN TB8 RB8 TI RI8 4 2 1 8 4 2 1还不懂的画再来一个例子明白了就跳过往下:例如问配置REN置1,发送8位时间置1,接收标志位置1怎么配置答:0x1A好接着往下:(1)代码原创:#include <reg52.h>#include <intrins.h>unsigned char count;sbit ST_CP = P3^5; //P3^5 串行锁存寄存器时钟RCK,上升沿有效void main(){SCON = 0x00;//工作方式0while(1){for(count=0;count<8;count++){SBUF = 0x55;while(!TI)TI = 0;//左移一位将高位补给低位,如果二进制数为01010101 那么_crol_(1) 为10101010}ST_CP = 1;_nop_();_nop_();ST_CP = 0;for(count=30000;count>0;count--);//串口通信太快了,延时一下方便看示波器时序}}(1)代码解析51单片机通过直接操控SBUF寄存器会自动启动发送8位数据,期间TXD作为时钟线,每发送一位都会置1一次时钟线TXD,因此74HC595的SCK引脚只需连接51芯片的TXD引脚即可,51单片机会自动拉高拉低发送.二,protues仿真部分:(1),74HC595引脚功能:9 脚:串行数据出口引脚。
51单片机数码管显示程序设计

练习3主程序参考:
ORG 0000H LJMP START ORG 000BH LJMP T0SERV ;T0中断入口 ORG 0030H START: MOV SP,#50H ;初始化堆栈 LCALL INIT ;初始化 MOV DISBUF,#0 MOV DISBUF+1,#1 MOV DISBUF+2,#2 MOV DISBUF+3,#3 MOV DISBUF+4,#4 MOV DISBUF+5,#0 MOV FLASH,#11000000B MOV R0,#0 LOOP: MOV DISBUF+5,R0 LCALL DELAY INC R0 CJNE R0,#10,LOOP MOV R0,#0 AJMP LOOP
恢复现场
返回
动态显示参考程序1:定义变量
;--------------------------------------------------------;动态显示程序 ;--------------------------------------------------------;全局变量定义 FLAG EQU 20H ;标志位 DISSEG EQU P0 ;显示段驱动 DISBIT EQU P2 ;显示位驱动P2.7-P2.2 DISBUF EQU 21H ;显示缓冲区首地址21H-26H DISBITBUF EQU 27H ;当前显示位计数器0-5 FLASH EQU 28H ;闪烁控制xxxxxx00,将x=1闪烁,=0不闪 ;小数点的处理: ;若显示‘3’,缓冲区放‘3’,若显示‘3.’,缓冲区放‘3+80H’, 最高位为1 S_PULSE EQU FLAG.0 ;秒脉冲 CNT_2D5MS EQU 2FH ;2.5MS计数器 CNT_10MS1 EQU 30H ;10MS计数器 CN_0D5S EQU 31H ;0.5秒计数器 ;----------------------------------------------------------
跟我学51单片机5单片机动态扫描驱动数码管

跟我学51单片机(五):单片机动态扫描驱动数码管一、本文内容提要本刊第四期介绍了单片机外接键盘的原理,并给出了应用实例。
本期将介绍单片机动态驱动段式数码管。
通过该讲,读者可以掌握段式数码管的工作原理和如何通过动态驱动的方法设计电路以及程序。
二、原理简介常用的段式数码管有七段式和八段式,八段比七段多了一个小数点,其他的基本相同。
所谓的几段就是指数码管里有相应的几个小LED 发光二极管,通过控制不同的LED 的亮灭来显示出不同的字形(见图1(a))。
从各发光二极管的电极连接方式又可以分为共阳极和共阴极两种类型。
共阴极则是所有的二极管的阴极连接在一起,而阳极是分离的(见图1(b));而共阳极就是所有二极管的阳极是公共相连,而阴极则是分离的(见图1(c))。
本学习板采用的是八段共阴极数码管,型号为LG3641AH。
图1 数码管内部结构图前文所述,数码管与发光二极管的工作原理相同,共阳极时,所有正端接电源正极,当负端有低电平时,该段有电流流过,发光管亮,当负端为高电平时,该段无电流流过,发光管不亮。
要显示什么数字,就使对应的段为低电平(见表1)。
共阴极与共阳极的电平变化状态相反。
当每个段的驱动电流为2~20mA,电流越大,发光越亮。
表1 显示的数字和七段码各位的对应关系表常用的七段式数码管的硬件驱动设计方法有:静态驱动与动态驱动。
静态驱动即指每个数码管的数据线都有一个单独的数据锁存器,数据锁存器输入的数据由使能端控制,当使能端为高电平时,数据线上的数据(要显示的七段码)进入显示器,使能端与地址译码器的输出相连,要显示那位,则选通那位的地址,在软件设计上不要求程序循环,也不存在显示数字发生闪烁。
但是这样会占用很多口线。
动态显示是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。
这样一来,就没有必要每一位数码管配一个锁存器,从而节省了口线,地简化了硬件电路。
所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。
51单片机第四节数码管
51单⽚机第四节数码管本笔记默认学习者已拥有:1.Keil5和stc 烧写⼯具 等各种软件、驱动、环境;2.有⼀个属于⾃⼰的 51单⽚机开发板及相关零件 ;3.认识C 语⾔的语法;本⼈使⽤的51开发板为 郭天祥C51 TX-1C 增强版开发板 ;本笔记根据B 站up 主:江科⼤⾃化协的教学视频 整理得到ヾ(•ω•)4-1 静态数码管显⽰上图为TX-1C 的 数码管及LED 模块 原理图138译码器和74HC245 都是⽤来控制 数码管显⽰ 的;单数码管1.上图为 ⼀位数码管,数码管有两种连接⽅式(对应 右边上下两幅图);2.右上图的原理图,8个LED的阴极都连在⼀个引脚上,称为共阴极连接;3.右下图的原理图,8个LED的阳极都连在⼀个引脚上,称为共阳极连接;TX-1C 开发板的连接⽅式是 共阴极连接;4.左下⾓的 左边图⽚ ,定义了8个LED的名称;5.左下⾓的 右边图⽚ ,定义了引脚的名称,与右图的引脚名称⼀⼀对应假设数码管连接⽅式为 共阳极连接,观察可以发现,数码管中的 LED 的引脚引出,使⽤的是就近原则;假设数码管连接⽅式为 共阴极连接,如果上数码管显⽰ 数字6 ?1.要让数码管显⽰ 数字6,让要 LED-A、C、D、E、F、G亮起;2.共阴极的公共端 要接地(给数据‘0’,或者是低电平);3.阳极(称为位选端)根据LED的亮灭需求给 数据0或1(1亮、0灭) ,称为 段码(阳码) (1011 1110 即为段码);如果 共阳极连接,共阳极端 要接到 VCC (⾼电平),阴极给 数据0或1 (1灭,0亮),称为 段码(阴码),和共阴极正好是相反关系;共阳极连接→共阳极端接VCC 并选中→阴极(位选端)传递(阴码)段码(1亮、0灭)→数码管显⽰共阴极连接→共阴极端接GND 并选中→阳极(位选端)传递(阳码)段码(1灭、0亮)→数码管显⽰四位⼀体数码管开发板上即为 四位⼀体的数码管,且有两个,正好组成了 ⼋位数码管;⽽TX-1C 上 包含的是六位数码管,⽽⾮⼋位;1.四位数码管 也有 两种连接⽅式,即 共阴极连接 和 共阳极连接 ;{Processing math: 100%2.四位数码管,(每位的公共端 单独引出来,位选端全部连在⼀起(所有A段连在⼀起、所有B段连在⼀起……),总共有12个引脚;假设数码管连接⽅式为共阴极连接,如何在第三位显⽰数字1 ?1.给第三位的公共端 赋值 0(低电平),给其他位的公共端 赋值 1(⾼电平);这样等同于 其他位的公共端(负极)接到了正极上,⽆论如何都亮不了;只有第三位能亮;2.这样给 LED-B、C 的位选端 赋值 1,其他 位选端 赋值0共阳极连接即为公共端赋值 1(⾼电平)亮,其他以此类推;3.发现这样⼀个现象,数码管⽆法在同⼀时间显⽰多个数字,其在同⼀时刻下只能有⼀个显⽰,只有⼀个数码管能被点亮,即使有多个被选中的数码管,显⽰的数字也是相同的;这种共⽤引脚的现象,是为了减少控制数码管IO⼝;(四位数码管有32个LED,如果都采⽤共阴极连接的⽅式,也要32+1(公共端)=33个引脚;)(采⽤这种链接,就只需要12个引脚即可控制四位数码管;)如何让数码管多位显⽰不同数字(动态数码管显⽰)?1.利⽤ ⼈眼视觉的暂留 和 数码管显⽰的余辉 的原理先让第⼀位数码管显⽰1,然后很快地让第⼆位数码管显⽰2,再很快地让第三位数码管显⽰3,让它不断地扫描,重复显⽰1、2、3的过程,这样三个数字就“同时”显⽰了;原理分析138译码器1.观察到 原理图右图 与数码管有关的,有138译码器(74LS138)和74HC245两枚芯⽚;TX-1C的原理图为左图,也有两个74HC573芯⽚与数码管有关;芯⽚名称与功耗、电压、说明符号有关,具体内容不做分析;2.如图,数码管连接⽅式为 共阴极连接,这样传输数据,就能让第三位显⽰ 数字1 了;3.⽽上⾯的 LED1 ~ 8,其实接在了138译码器的输出端,138译码器正好可以实现让LED1 ~ 8输出 0或1;LED1 ~ 8 对应了 TX-1C 六位数码管的SEG DS 1 ~ 6;4.138译码器可将LED 1 ~ 8的⼋个端⼝ 转化为 由 3个端⼝ (P22、P23、P24)控制,⽽G1、G2A、G2B端⼝ 被 称为 使能端;使能端相当于⼀种开关,如果电平有效,它就可以⼯作;如果电平⽆效,它就不⼯作;观察原理图发现,使能端是已经接好 VCC 和 GND 的,也就是说,其上电其实就会⼯作TX-1C的74HC573也是同理,但其并未压缩控制端⼝的数量;5.138译码器也叫“38线译码器”,是由3个线到8个线,其中C是⾼位、A是低位,CBA组成的数符合8进制,控制着Y0 ~ Y7 这8个端⼝;6.所以,138译码器的作⽤就是⽤来选中某⼀位数码管的74HC2451.74HC245是⼀种 双向数据缓冲器,VDD、GND都可视为电源,OE为使能(其 接地 就⼯作);2.DIR(direction),是⽅向的意思,它接到了VCC(⾼电平)上,将数据从左边输出到右边,从右边将数据读取回左边;DIR若接到低电平上,会将数据从右边输出到左边,从左边将数据读取回右边;3.单⽚机的⾼电平 驱动能⼒有限,其输出的最⼤电流不能太⼤;其低电平 驱动能⼒强;因此,LED模块才采⽤了低电平点亮的模式;4.如果⽤⾼电平 直接点亮 数码管,电流会很⼩,灯会很暗;所以其加⼀个缓冲器,缓冲器可以提⾼ 其驱动能⼒,如果直接将 数据 输出 给 数码管,数据就会被视为 驱动数据;现在增加了缓冲器,数据 就变成了 控制信号,控制信号 只需要很微弱,缓冲器 就可以接收到,缓冲器再通过⾃⼰接到的电源,输出 数据 到引脚上,这样控制的电流只需要⾮常⼩,就能驱动数码管 以⽐较亮的形式显⽰;2电容 是⽤来 稳定电源的,叫电源滤波;6.图右有 ⼀ 排阻,阻值为100R(即为100Ω),作⽤为 限流电阻 ,防⽌数码管的电流过⼤;TX-1C既没有电容,也没有排阻;原理总结1.⽤ 138译码器 使 数码管 的某⼀位 被选中;2.再给P0⼝⼀个 段码数据;TX-1C虽然⽤P0⼝控制段码输⼊,但也⽤P0⼝控制位选;需要先⽤ P2.6⼝和P2.7⼝控制输⼊数据是段码还是位选;P2.6⼝控制段码的输⼊;P2.7⼝控制位选的输⼊;例,给P2.6 数据1 (⾼电压)、给P2.7 数据 0 (低电压),就可以确定现在给数据是段码;1.由TX-1C的原理图可知,数码管内 LED灯 与 P0端⼝ 的顺序关系:(1)LED的名称定义是通⽤⽆疑的;(2)数码管本⾝的引脚名称不重要,重要的是 LED与哪个 P0 的 引脚 相连;2.由TX-1C的原理图可知, P0.0引脚 控制 数码管的最左位,P0.5引脚控制 数码管的最右位,剩余引脚是没有控制 数码管 位选 的作⽤的,哪个P0 的 引脚 控制 六位数码管的 哪位 很重要;代码实现静态数码管显⽰(让数码管第三位显⽰3).c#include<reg51.h>sbit D=P2^6; //段码⼝sbit W=P2^7; //位选⼝void main(){D=0;W=1;P0=0xFB;//1111 1011W=0;D=1;P0=0x4F;//0100 1111while(1);}下⾯写出了⼀个通⽤函数,可以让数码管在 第⼏个位置 显⽰ 哪个数#include<reg51.h>#define uchar unsigned charsbit D=P2^6;sbit W=P2^7;void NixieTube(uchar wei,uchar duan){ //NixieTube是数码管的英⽂uchar WEI,DUAN; //(Nixie是⼥⽔妖的意思)D=0;W=1;switch(wei){ //位选部分case 1:WEI=0xFE; break;case 2:WEI=0xFD; break;case 3:WEI=0xFB; break;case 4:WEI=0xF7; break;case 5:WEI=0xEF; break;case 6:WEI=0xDF; break;}P0=WEI;W=0;D=1;switch(duan){ //段码部分case 0:DUAN=0x3F; break;case 1:DUAN=0x06; break;case 2:DUAN=0x5B; break;case 3:DUAN=0x4F; break;case 4:DUAN=0x66; break;case 5:DUAN=0x6D; break;case 6:DUAN=0x7D; break;case 7:DUAN=0x07; break;case 8:DUAN=0x7F; break;case 9:DUAN=0x6F; break;case 10:DUAN=0x77; break; //Acase 11:DUAN=0x7F; break; //Bcase 12:DUAN=0x39; break; //Ccase 13:DUAN=0x3F; break; //Dcase 14:DUAN=0x79; break; //Ecase 15:DUAN=0x71; break; //Fcase 16:DUAN=0x80; break; //.}P0=DUAN;}void main(){NixieTube(3,3);while(1);}运⾏结果如下:4-2 动态数码管显⽰1.如果只是单纯让其显⽰完⼀个再显⽰⼀个,代码如下:#include<reg51.h>#define uchar unsigned charsbit D=P2^6;sbit W=P2^7;uchar Nixiewei[]={0,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF};uchar Nixiecode[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7F,0x39,0x3F,0x79,0x71,0x80};//将两个switch改进为数组void NixieTube(uchar wei,uchar duan){D=0;W=1;P0=Nixiewei[wei];W=0;D=1;P0=Nixiecode[duan];}void main(){while(1){NixieTube(1,1);NixieTube(2,2);NixieTube(3,3);}}运⾏结果如下:2.这是⼀个数码管的常见问题,称为 数码管的消影 ;位选-->段选-->位选-->段选-->位选-->......在这⼀位的段选(输⼊段码)结束,进⾏下⼀位的位选时,很短的时间内,上⼀位的数据会串到下⼀位数据⾥⾯去;所以我们在段选和位选之间,增加⼀个 P0 清零的操作;动态数码管显⽰(数码管同时显⽰123).c#include<reg51.h>#define uchar unsigned charsbit D=P2^6;sbit W=P2^7;uchar Nixiewei[]={0,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF};uchar Nixiecode[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7F,0x39,0x3F,0x79,0x71,0x80};void Delayms(unsigned int x){unsigned int j;for(;x>0;x--) for(j=110;j>0;j--);}void NixieTube(uchar wei,uchar duan){D=0;W=1;P0=Nixiewei[wei];W=0;D=1;P0=Nixiecode[duan];Delayms(1); //让数码管稳定显⽰,⽴刻清零会让数码管显⽰较暗P0=0; //清零操作}void main(){while(1){NixieTube(1,1);NixieTube(2,2);NixieTube(3,3);}}运⾏结果如下:相关知识1.在运⾏某些代码时,TX-1C的LED点阵模块会乱闪2.将左下⾓ DOT-OE旁的跳线帽 拔下来即可 断开LED点阵模块,3.拔下来的跳线帽不要乱丢,可以 只插⼀个脚放在原处,也可以妥善保管在其他地⽅上图即为拔下来的跳线帽1.此元件为电容;2.104的数量规则与 第⼆节 所讲的电容是相同的,其单位是pF1000pF=1nF, 1000nF=1uF, 1000uF=1000mF, 1000mF=1FF 是⼀个很⼤的单位,正常电容都是uF、nF级别的;超级电容能达到1 ~ 2 F,其⼀般作为备⽤电池;3.TX-1C的原理图上,电容的量都是直接⽤单位标记好的。
单片机驱动数码管设计详解(用74HC595实现)
单⽚机驱动数码管设计详解(⽤74HC595实现)简单设计了⼀个单⽚机驱动数码管的电路,该设计中只使⽤了4位数码管,占⽤了单⽚机3个IO⼝,如果驱动芯⽚全⽤满可以驱动8位数码管。
仅供初学者分享学习。
1. 数码管显⽰设计本设计使⽤了⼀个4位的数码管,为共阳型,为了节省单⽚机的IO⼝,使⽤了两⽚74HC595作为数码管的驱动芯⽚,共占⽤3个IO⼝。
74HC595部分电路图如下:与单⽚机相连接的三个脚分别为:HC_DAT,HC_RCK,HC_CLK。
两⽚595采⽤级联⽅式,即U2的第9脚接到U3的第14引脚。
2. 74HC595简介74HC595是8位的移位寄存器,串⼊并出,并具有锁存功能,被⼴泛的⽤于数码管、点阵的驱动电路中。
其管脚介绍如下:15:数据输出A-接数码管数据A段;1:数据输出B-接数码管数据B段;2:数据输出C-接数码管数据C段;3:数据输出D-接数码管数据D段;4:数据输出E-接数码管数据E段;5:数据输出F-接数码管数据F段;6:数据输出G-接数码管数据G段;7:数据输出H-接数码管数据H段;16:电源正脚-接电源正;8:电源负脚-接电源负;14:数据输⼊脚-接单⽚机管脚;12:数据锁存时钟-接单⽚机管脚;11:数据输⼊时钟-接单⽚机管脚;13:使能输出脚-低电平有效,接低电平;10:数据清零-不清零,接⾼电平;9:数据级联输出-接下⼀⽚595的数据输⼊脚;74HC595的真值表如下:知道了74HC595的引脚定义和真值表,那该如何编程呢?下⾯重点来了,通过时序图来编程。
看重点!!!3. 74HC595时序图我是重点!我是重点!我是重点!通过时序可以看出:1. SCK是上升沿的时候要把数据写⼊;2. RCK是上升沿的时候数据才能锁存显⽰;3. 有数据操作的过程中RESET必须是⾼电平;4. EN必须是低电平,595才能⼯作;知道了以上4点就可以写程序了。
其中3、4条是硬件连接上的事情(也可以⽤单⽚机的IO⼝来连接,这样的话可以随时控制74HC595的⼯作与否情况)。
数码管的几种驱动方式汇总
动态的也叫扫描方式,是利用发光二极管的余辉效应和人眼的视觉暂留效应来实现的,只要在在一定时间内数码管的笔段亮的频率够快,人眼就看不出闪烁,一般外围硬件较少,但是对单片机资源耗用巨大。
静态的也较锁存方式,单片机送出数据后控制外围锁存器件锁存数据,这样数码管笔段里的电流不变,数码管稳定显示,这样单片机可以干别的活不用管数码管了。这种方案的优点是对单片机的P口资源和时间耗用很少,但是数码管的外围辅助电路复杂。
●支持段电流上限调整,可以省去所有限流电阻。
●扫描极限控制,支持1到8个数码管,只为有效数码管分配扫描时间。
(二)键盘控制
●内置64键键盘控制器,基于8×8矩阵键盘扫描。
●内置按键状态输入的下拉电阻,内置去抖动电路。
●键盘中断,低电平有效输出。
●提供按键释放标志位,可供查询按键按下与释放。
(三)其它
特点
I2C串行接口,提供键盘中断信号,方便于处理器接口;
可驱动8位共阴数码管或64只独立LED和64个按键;
可控扫描位数,可控任一数码管闪烁;
提供数据译码和循环,移位,段寻址等控制;
8个功能键,可检测任一键的连击次数;
无需外接元件即直接驱LED,可扩展驱动电流和驱动电压;
提供工业级器件,多种封装形式PDIP24,SO24。
●高速的4线串行接口,支持多片级联,时钟速度从0到10MHz。
●串行接口中的DIN和DCLK信号线可以与其它接口电路共用,节约引脚。
●完全内置时钟振荡电路,不需要外接晶体或者阻容振荡。
●内置上电复位和看门狗Watch-Dog,提供高电平有效和低电平有效复位输出。
●支持3V~5V电源电压。
●提供SOP28和DIP24S两种无铅封装,兼容RoHS。
多位数码管驱动电路
多位数码管驱动电路在单片机控制系统中,一般使用LED数码管或液晶LCD作为显示设备,用来显示控制系统的工作状态。
这两种显示设备的价格便宜,配置灵活,与单片机接口方便。
这里向大家介绍下数码管,如下图:上图2-1:这是数码管的段排列方式,内部是LED发光二极管,八个发光二极管排成“8”字形(还有小数点),通过各段LED灯亮灭的不同组合,可以显示数字及一些字母或符号。
数码管类型有共阴和共阳两种,共阴是将八个LED灯的阴级接在一起,共阳则是阳极连接在一起。
如上图2-2是共阴型,段码从阳级输入,阴极接低电平(0),使段码为高电平(1)的LED段亮,不同的段码就可显示不同的信息。
共阳型则相反,阳极接高电平(1),由阴极输入段码,使段码为低电平(0)的LED段亮。
如上图2-3为四位共阴型数码管的电路图,将四个一位管的段接在一起,引出12个引脚,即8个段脚和4个位选择脚。
这样大大简化了引脚数量。
为了显示数字或符号,要给LED数码管提供代码,这些代码是为了显示字形的,因此称之为字形代码(以下简称段值)。
7段LED灯加上一个小数点,共计8段,提供给LED数码管的字形码正好是一个字节,可由一个P口来驱动。
共阴型电路驱动:数码管的驱动需要一定的电流,静态电流与LED灯一样,在3-10MA,如果由P口来直接驱动段位的话,亮度会达不到理想状态,特别是动态扫描,因此需要加大电流,市面上有很多种专用的驱动芯片,这里向大家介绍一种驱动电路,如下图(L3学习板使用这种方式),由74HC245和74HC138来组合驱动,P口输出经245后电流提高,刚好与138的吸收电流配合使数码管在亮度上达到理想。
共阳型电路驱动:与共阴一样也需要一定的电流来驱动,除使用专用芯片外,有一种简单的驱动方式,从上面的思路看看下面的电路图,单片机的P口输出电流不大,但吸收电路则可以达到数码管的亮度要求,因此使用共阳形的数码管段引脚可以直接接入IO口,那位的选择也可以使用138译码器,不过需要在138的输出到数码管位选择之间加一极三极管来加大输出电流。