用164实现对数码管的控制
164和165的使用
浅谈单片机系统中I/O的扩展--基于74HC164和74HC165在我们的单片机应用系统中,常常会遇到I/O口不够的情况。
譬如说接有外部RAM而且要求有16个以上的按键,8位数码管以上的显示。
而且还不包括其它的外围器件。
这时整个系统的I/O资源就很吃紧了。
系统的扩展性也不好。
这时我们就需要考虑对单片机的I/O进行扩展了。
虽然专门的I/O扩展芯片市场上也有不少,但对于我们一般的应用,没有必要整的那么复杂。
用一些简单的移位寄存器芯片一样可以实现我们的目标。
下面我们首先来认识一下74HC164这款芯片。
这款芯片的作用是把串行输入的数据并行输出。
注意,它没有锁存功能,在允许输出的情况下,每一个时钟的上升沿,数据依次从最低位移向最高位。
因此,在做数码管的输出显示的时候会出现拖影的想象,在设计此电路时要注意考虑此情况。
下面是它的引脚图。
A1,A2是数据输入端,一般情况下两者连在一起,作为串行数据的输入端。
Qa----Qh j就是并行数据的输出端了。
CLOCK 和RESET分别为时钟和复位端下面我们再看看它的真值表,有了真值表我们才知道如何正确的去编写程序去驱动它(其它复杂的器件还需要对照时序图编写相应的驱动程序)呵呵,怎么样,这个表很简单吧,相信大家都能够看的懂。
当Reset为低电平时不管时钟为高电平还是低电平也不管输入引脚A1,A2为何值,输出的并行数据均为低电平。
当Reset 为高电平时,只有在时钟的上升沿,A1A2上的值才被移位输出。
看懂了这张表那么剩下的事情就好办多了。
下面我以级联的8块74HC164驱动8位共阴的数码管为例来阐述它的用途。
当然它的用途并不仅仅在于此。
你可以发挥你的聪明才智去应用它到你的设计中。
以上的连接中Reset脚要全部接高电平。
所有的Clock引脚都要连接在一块。
第一块74HC164的AB引脚接在一块作为串行数据的输入端。
第二块74HC164的AB引脚接在第一块74HC164并行数据输出端的H脚上。
数码管显示控制
数码管通常采用共阳极或共阴极接法, 即所有LED灯珠的阳极或阴极连接在 一起,通过控制每个LE内部由多个LED段组成,通过 控制不同段的亮灭来显示不同的数字 或字符。
数码管分类
按位数分类
数码管可以分为一位、两位、三 位等不同位数,位数越多可以显
示的数字或字符越多。
自定义数码管显示
以自定义的数码管为例,介绍如 何使用单片机编程语言实现数码 管的动态显示。
05 数码管显示控制常见问题 及解决方案
数码管显示闪烁问题
总结词
数码管显示闪烁问题通常是由于信号传输不稳定或驱动电流过小引 起的。
详细描述
解决数码管显示闪烁问题的方法包括检查信号传输线是否接触良好, 确保驱动电流足够大,以及调整信号频率或周期以提高稳定性。
详细描述
智能控制技术使得数码管能够与计算机、手机等智能设备实现无缝对接,实现远 程控制和自动化控制。无线控制技术则使得数码管摆脱了线缆的束缚,使得显示 系统的布局更加灵活自由。
数码管显示控制在物联网领域的应用前景
总结词
随着物联网技术的不断发展,数码管显示控制在智能家居、智能交通等领域的应用前景 越来越广阔。
03
解决方案
检查显示控制电路,确保正常工作;优化信号传输路径,减少延迟;调
整显示控制参数,实现正确对齐。
数码管显示亮度不均问题
总结词
数码管显示亮度不均问题通常是由于各段数码管发光强度不一致或驱动电压不均衡引起 的。
详细描述
解决数码管显示亮度不均问题的方法包括检查各段数码管的发光强度是否一致,确保驱 动电压均衡分配,以及调整亮度控制参数以实现均匀发光。
专用集成电路
针对数码管显示控制设计的专用集成电路,具有 较高的集成度和稳定性。
基于51单片机的74HC164驱动六位数码管显示程序与仿真
P2=0xff; //数码"灭"
}
}
main()
{
separateData(123456);
while(1)
{
display();
}
}
DS_data[2]=dat/100%10;
DS_data[3]=d4]=dat/10000%10;
DS_data[5]=dat/100000%10;
}
void write_164(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
sbit MOSI=P1^1;//符号DSA引脚1数据输入符号DSB引脚2数据输入
unsigned char code Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//共阴数码管
基于51单片机的74HC164驱动六位数码管显示程序与仿真
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//74HC164
sbit CLK=P1^0;//符号CP引脚8时钟输入(低电平到高电平边沿触发)
void delay1ms()
{
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++)
毕业设计164基于Alter的EP1C6Q240C8的红外遥器(毕业论文)
基于Altera的EP1C6Q240C8的红外遥控器摘要:基于Altera的EP1C6Q240C8的红外遥控器的扩展部分的制作,能使学生理解EDA 技术中模块化编程方法!使其对EDA技术有更加深入的了解!是培养学生熟习VHDL语言的一个重要部分。
该遥控器的红外发射部分实现与遥控集成芯片PT2248相同的功能。
数字调制方式采用PWM调制,在接收端利用一体化红外接收器对信号进行解调,利用FPGA进行解码,检错及相应的I/O操作。
若把发射和接收编码稍加修改,加上PS/2键盘口和液晶模块,便可实现红外传输双机数据通信系统。
关键词模块化编程;红外发射与接收;一体化红外发射器;脉宽调制1引言EDA技术的发展迫切的要求当代电子类的大学生熟练掌握该技术的理论和了解VHDL语言的编写方法。
红外遥控器的设计,能够使学生通过对程序的编写,了解到模块化的编写方式。
对学生学习FPGA/CPLD设计方法有很大的帮助!2结果与讨论2.1红外遥控器的模块划分2.1.1遥控器的主要组成部分红外遥控系统由发射编码和接收解码两个部分组成,具体说明如下:1、发射编码部分发射编码部分要求使用指定的元器件在万用板上完成红外遥控器的制作,该部分电路原理图参照《PT2248数据手册》,制作参考了《红外遥控器制作说明》,制作时要求元器件在万用板上排列整齐,布局合理,焊接良好,各按键功能正常,均能发送编码。
原理图如下2、接收解码部分接收解码用VHDL语言编写程序,在EDA实验板上实现解码(1)基本要求:(a)将一体化红外接收解调器的输出信号解码(12个单击键、6个连续键,单击键编号为7-18,连续键编码为1-6),在EDA实验板上用七段数码管显示出来;(b)当按下遥控器1—6号连续键时,在EDA实验板上用发光二极管点亮作为连续键按下的指示,要求遥控器上连续键接下时指示灯点亮,直到松开按键时才熄灭,用于区别单击键。
(c)EDA实验板上设置四个按键,其功能等同于遥控器上的1—4号按键,当按下此四个按键时七段数码管分别对应显示“1”、“2”、“3”、“4”。
实验二 数码管控制实验
实验二数码管控制实验一、实验目的1.熟悉TMS320F2808的指令系统;2. 掌握74HC164的原理与使用方法。
3. 熟悉DSP的IO操作使用方法。
4. 了解SPI串行通信原理。
二、实验设备1. 一台装有CCS4.2软件的计算机;2. TMS320F2808实验开发板;3. XDS100硬件仿真器。
三、实验原理本次实验要求两位数码管动态显示数字0~20。
(1)如图3-1所示,数码管为共阴极型,两位数码管的段码与两个74HC164移位寄存器相连,并接入10K的上拉电阻,数据由2808硬件SPI串行输出至74HC164移位寄存器,配合SPI时钟信号,经74HC164并行输出至数码管控制数码管显示。
74HC164是8 位边沿触发式移位寄存器,串行输入数据,然后并行输出。
数据通过两个输入端(A 或B)之一串行输入;任一输入端可以用作高电平使能端,控制另一输入端的数据输入。
两个输入端或者连接在一起,或者把不用的输入端接高电平,一定不要悬空。
时钟(CP) 每次由低变高时,数据右移一位,输出到Q。
复位(CLR) 输入端上的一个低电平将使其它所有输入端都无效,同时非同步地清除寄存器,强制所有的输出为低电平。
图3-1 两位数码管电路由图3-1所示,实验开发板上的74HC164寄存器的时钟信号为SPICLK,数据为SPISIMO,其硬件SPI接口对应的TMS320F2808芯片引脚如图3-2所示。
图3-2 2808硬件SPI接口由于此实验有两位数码管,其显示的串行数据由16位数据构成,其中低八位输入U9输出至数码管U2,高八位移位至U8输出至数码管U1。
例如:两位数码管显示01的代码为0xc0f9;此代码串行输入至74HC164后高八位c0移位至U8,低八位f9在U9。
(2)SPI 通信:SPI属于串行通信方式的一种,它只要4根线就可以与外部设备相连(至少可以2根线,一个CLK,一个DATA),而现在非常多的芯片都是兼容SPI 的,应用SPI的场合越来越多。
74HC164应用实例
74HC164应用实例实例1 74HC164是串行输入,并行输出接口器件,可用在单向的并行输出/并行地址锁存等. 74HC164因为价格便宜,容易使用特别适合使用在在需要用到数码管显示IO口又比较紧张的电子产品中,下面浅谈使用方法:1. 首先先了解他的引脚功能和逻辑图,如下图:图1 引脚名称和用途图2 真值表通过真值表我们可以了解到,A,B两个输入端是互锁的,CLK上升沿时数据移入移位寄存器中,CLEAR为清零用的,接低电平时所有端口都输出低电平,了解了真值表之后开始运用了,先给出如下原理图:图3 原理图图中,采用义隆的EM78P153作为控制芯片,P50作为CLK时钟信号,注意平时数据不传输时,时钟信号是不发送的应一直保持低电平或者高电平,数据需要传输的时候才输出时钟信号^_^ ,继续P51作为移位数据输出端,接到74HC164的B端,A端接高电平,当然也可以AB端短路,然后连接到DATA移位数据端,P52作为数码管的选通信号(也可以叫消隐^_^), 作用是使数据传输过程暂时关闭显示,以免显示出不需要的数据,原因是应为164不带锁存功能,数据传输过程是一位一位的向高位移位输出的,所以要等数据全部移入后才打开始点亮数码管.注意了哦,通过查看164的规格书发现,164输出高电平电流比输出低电平电流要小,亦称灌电流大,扇出电流弱,所以适合选用共阳数码管,如图,本人偷懒没有画出那个数码管的8字该介绍的介绍的差不多了,废话少说,该开始干活了,任务是: 显示0-9 每秒+1 ,到9后又返回0,一直循环显示,根据任务得到如下流程图:1. 显示部分:将需要显示的数值送入A ==> 查表求得显示段码==>将段码逐位移入164==>8位移完后点亮数码管==>延时==>返回第一步执行2. 中断部分:进入中断==>保存现场(以备调查取证,送你入狱^_^)==>重置TCC==>够1秒钟将需要显示的数据+1,并重置,不够就退出;根据以上要求就开始写代码调试了,要注意一点,数据移位时一定要记得高位在前哦,否则显示错误别怪我没有说清楚,我当年实验时就因为这个数据移位方向反了排查了半天,甚至以为是时钟频率不对,又以为时许不对.....搞了半天,NND后来重看DATASHEET才发现,原来是低级错误啊,呜呼哀哉.......,希望你不要重蹈我覆辙,哎哟!! 谁! 谁! 谁扔砖头上来? 啥?你扔的? 我废话太多.........,那俺少来两句,继续上菜, 咦好像没啥可说的了,上源程序吧1. ;中断部分:2.3. ;;;;;;;;;;中断;;;;;;;;4. INTPUT:5. MOV TEMPA, A;6. MOV A,@130;7. MOV TCC,A;255-130=1258. CLR RF;9. ;;;;;此处填写250Us处理程序10. BS WKREG,T500US11. ;;;;;;;;;;;;;;;;;;;;;;;;;12. DJZ R1MS13. JMP INTEXT;14. MOV A,@415. MOV R1MS,A;重置16. BS WKREG,T1MS17. ;;;;;;;此处填写1ms处理程序18.19. ;;;;;;;;;;;;;;;;;;;;;;;;;;20. DJZ R20MS21. JMP INTEXT;22. MOV A,@2023. MOV R20MS,A;重置24. ;;;此处填写1秒处理程序25. BS WKREG,T20MS26. ;;;;;;;;;;;;;;27. DJZ R1S28. JMP INTEXT;29. MOV A,@5030. MOV R1S,A;31. ;;;;;;;;;32. INC NUMBER33. MOV A,NUMBER34. SUB A,@1035. JBS SR,236. JMP INTEXT37. MOV A,@038. MOV NUMBER,A39.40.41. INTEXT:42. MOV A,TEMPA;43. RETI;;;;;;;;;;;;;;;;;;;;;44.45.46.47.48.49. ;显示部分:50.51. ;==============TXDATA==============52. TXDATA:53. BS P5,CC154. MOV A,@855. MOV DATALOP,A;56. TXLOP:57. BC WKREG,T500US58. BS P5,CLK;clk=高59. NOP;60. NOP61. JBS DATA_BUF,762. JMP $+363. BS P5,DATA;64. JMP $+265. BC P5,DATA66. DD1MS: JBS WKREG,T500US67. JMP $-168. BC P5,CLK69. BC WKREG,T500US70. JBS WKREG,T500US71. JMP $-1;72. RLC DATA_BUF73. DJZ DATALOP74. JMP TXLOP75. ;;;;;;;;;;76. BC WKREG,T500US77. BS P5,CLK;clk=高78. BC WKREG,T500US79. JBS WKREG,T500US80. JMP $-1;81. BC P5,CLK82. ;;;;;;;;83. BC P5,CC184.85. RET;;;;;;;86.87. ;数据查表88. ;===============DSPTBL============89. DSPTBL: ADD PC,A90. RETL @0B01000000;091. RETL @0B01111001;192. RETL @0B00100100;293. RETL @0B00110000;394. RETL @0B00011001;495. RETL @0B00010010;596. RETL @0B00000010;697. RETL @0B01111000;798. RETL @0B00000000;899. RETL @0B00010000;9100.101.102. ;循环体部分;103.104. ;;;;;;;;;;主程序;;;;;;;;;;;105. MLOOP:106. MOV A,NUMBER107. CALL DSPTBL108. MOV DATA_BUF,A109. CALL TXDATA110. BC WKREG,T1MS111. JBS WKREG,T1MS112. JMP $-1113. NOP;114.115. JMP MLOOP;;;;;;;;;;;;;;;;;;;;实例2 在实际应用中驱动数码管常用的方式分动态扫描和静态驱动。
HC164应用实例:驱动数码管两例
4HC164应用实例:驱动数码管两例(电路图和源程序)文章编号:文章分类:电路>电子元件点击:...关键词:74HC164文章来源:百合电子工作室收集整理摘要:74HC164应用实例:驱动数码管的两个实例分别提供了汇编源程序和C源程序...实例174HC164是串行输入,并行输出接口器件,可用在单向的并行输出/并行地址锁存等. 74HC164因为价格便宜,容易使用特别适合使用在在需要用到数码管显示IO口又比较紧张的电子产品中,下面浅谈使用方法:1. 首先先了解他的引脚功能和逻辑图,如下图:图1 引脚名称和用途图2 真值表通过真值表我们可以了解到,A,B两个输入端是互锁的,CLK上升沿时数据移入移位寄存器中,CLEAR为清零用的,接低电平时所有端口都输出低电平,了解了真值表之后开始运用了,先给出如下原理图:图3 原理图图中,采用义隆的EM78P153作为控制芯片,P50作为CLK时钟信号,注意平时数据不传输时,时钟信号是不发送的应一直保持低电平或者高电平,数据需要传输的时候才输出时钟信号^_^ ,继续P51作为移位数据输出端,接到74HC164的B端,A端接高电平,当然也可以AB端短路,然后连接到DATA移位数据端,P52作为数码管的选通信号(也可以叫消隐^_^), 作用是使数据传输过程暂时关闭显示,以免显示出不需要的数据,原因是应为164不带锁存功能,数据传输过程是一位一位的向高位移位输出的,所以要等数据全部移入后才打开始点亮数码管.注意了哦,通过查看164的规格书发现,164输出高电平电流比输出低电平电流要小,亦称灌电流大,扇出电流弱,所以适合选用共阳数码管,如图,本人偷懒没有画出那个数码管的8字该介绍的介绍的差不多了,废话少说,该开始干活了,任务是: 显示0-9 每秒+1 ,到9后又返回0,一直循环显示,根据任务得到如下流程图:1. 显示部分:将需要显示的数值送入A ==>查表求得显示段码==>将段码逐位移入164==>8位移完后点亮数码管==>延时==>返回第一步执行2. 中断部分:进入中断==>保存现场(以备调查取证,送你入狱^_^)==>重置TCC==>够1秒钟将需要显示的数据+1,并重置,不够就退出;根据以上要求就开始写代码调试了,要注意一点,数据移位时一定要记得高位在前哦,否则显示错误别怪我没有说清楚,我当年实验时就因为这个数据移位方向反了排查了半天,甚至以为是时钟频率不对,又以为时许不对.....搞了半天,NND后来重看DATASHEET才发现,原来是低级错误啊,呜呼哀哉.......,希望你不要重蹈我覆辙,哎哟!! 谁! 谁! 谁扔砖头上来啥你扔的我废话太多.........,那俺少来两句,继续上菜, 咦好像没啥可说的了,上源程序吧1.;中断部分:2.3.;;;;;;;;;;中断;;;;;;;;4.INTPUT:5.MOV TEMPA, A;6.MOV A,@130;7.MOV TCC,A;255-130=1258.CLR RF;9.;;;;;此处填写250Us处理程序10.BS WKREG,T500US11.;;;;;;;;;;;;;;;;;;;;;;;;;12.DJZ R1MS13.JMP INTEXT;14.MOV A,@415.MOV R1MS,A;重置16.BS WKREG,T1MS17.;;;;;;;此处填写1ms处理程序18.19.;;;;;;;;;;;;;;;;;;;;;;;;;;20.DJZ R20MS21.JMP INTEXT;22.MOV A,@2023.MOV R20MS,A;重置24.;;;此处填写1秒处理程序25.BS WKREG,T20MS26.;;;;;;;;;;;;;;27.DJZ R1S28.JMP INTEXT;29.MOV A,@5030.MOV R1S,A;31.;;;;;;;;;32.INC NUMBER33.MOV A,NUMBER34.SUB A,@1035.JBS SR,236.JMP INTEXT37.MOV A,@038.MOV NUMBER,A39.40.41.INTEXT:42.MOV A,TEMPA;43.RETI;;;;;;;;;;;;;;;;;;;;;44.45.46.47.48.49.;显示部分:50.51.;==============TXDATA==============52.TXDATA:53.BS P5,CC154.MOV A,@855.MOV DATALOP,A;56.TXLOP:57.BC WKREG,T500US58.BS P5,CLK;clk=高59.NOP;60.NOP61.JBS DATA_BUF,762.JMP$+363.BS P5,DATA;64.JMP$+265.BC P5,DATA66.DD1MS: JBS WKREG,T500US67.JMP$-168.BC P5,CLK69.BC WKREG,T500US70.JBS WKREG,T500US71.JMP$-1;72.RLC DATA_BUF73.DJZ DATALOP74.JMP TXLOP75.;;;;;;;;;;76.BC WKREG,T500US77.BS P5,CLK;clk=高78.BC WKREG,T500US79.JBS WKREG,T500US80.JMP$-1;81.BC P5,CLK82.;;;;;;;;83.BC P5,CC184.85.RET;;;;;;;86.87.;数据查表88.;===============DSPTBL============89.DSPTBL: ADD PC,A90.RETL @0B01000000;091.RETL @0B01111001;192.RETL @0B00100100;293.RETL @0B00110000;394.RETL @0B00011001;495.RETL @0B00010010;596.RETL @0B00000010;697.RETL @0B01111000;798.RETL @0B00000000;899.RETL @0B00010000;9100.101.102.;循环体部分;103.104.;;;;;;;;;;主程序;;;;;;;;;;;105.MLOOP:106.MOV A,NUMBER107.CALL DSPTBL108.MOV DATA_BUF,A109.CALL TXDATA110.BC WKREG,T1MS111.JBS WKREG,T1MS112.JMP$-1113.NOP;114.115.JMP MLOOP;;;;;;;;;;;;;;;;;;;;实例2在实际应用中驱动数码管常用的方式分动态扫描和静态驱动。
PIC16f630使用74HC164驱动4位数码管
#DEFINE DAT_A PORTC,5;//数据移位输入端
#DEFINE CLK PORTC,4;;//数据移位时钟
#DEFINE BEEPER PORTC,2;----蜂鸣器输出端
#DEFINE LED_BP PORTC,1;----蜂鸣器报警指示灯
;------------------------------------------------------------
TABLE_TUBE:
ADDWF PCL,1
RETLW 3FH;0
RETLW 06H;1
RETLW 5BH;2
RETLW 4FH;3
RETLW 66H; 4
MOVLW 00H
MOVWF W_ADDR
MOVF TM_TEMPER,0
MOVWF W_DAT
CALL WR_EEP
RETURN
WR01;-------------------------------------写十位
; RC0---------------WEI_2
; RA0----WK1----WEI_3
; RA1----WK2----WEI_4
; RA4----WK3-----WEI_5
; RA3-----WK5----改为数字IO,做输入
;*/
#INCLUDE <P16F630.INC>
RETLW 6DH; 5
RETLW 7DH; 6
RETLW 07H;7
RETLW 7FH; 8
RETLW 6FH; 9
RETLW 00H;----段灭值,消影
74hc164级联实现四位数码管显示电路
2、设计中的优点与不足:
优点:基本实现了74HC164级联实现四位数码管显示电路的设计与仿真。
不足:由于Multisim中无法直接控制输入信号,我们尝试过利用555定时器构成多谐控制输入信号,可是没有成功。最后,我们在输入信号时,通过运用开关的闭合与断开来控制输入信号,在开关闭合时产生高电平,在开关断开时产生低电平。这样控制输入信号使实验增加了难度和麻烦。
实物样品等〕:
(1)提供核心器件的工作原理与应用介绍;
(2)提供用Protel99设计的电路原理图,也可给出印刷板电路图; (3)提供用Multisim、MaxPluss、Proteus等其他软件对电路的仿真结果与分析; (4)提供符合规定要求的课程设计说明书;
(5)提供参考文献不少于三篇,且必须是相关的参考文献;
7
74HC164逻辑图 (图2)
74HC164功能表
(图3)
H = HIGH(高)电平
L = LOW(低)电平
X =无关项
? = 低-至-高时钟跃变
8
74HC164波形图(图4)
2、七段数码管:
按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二
极管的阳极接到一起形成公共阳
74LS164
74LS164在S3F9454单片机控制电路中的应用作者:马宇锋来源:《职业·中旬》2010年第10期三星S3F9454单片机是一款单片8位CMOS型微控制器,它向用户提供高效快速的CPU处理,丰富的外围接口,以及各种类型的可编程ROM。
它的数据/地址总线结构和为编程I/O口提供了一个灵活的编程环境,能够满足不同用户对存储器和I/O口的要求。
但它的引脚只有20个,即并行I/O端口较少。
如何利用这较少的几根口线,连接成稳定可靠的LED数码管显示电路,就是以S3F9454单片机为核心的应用电路所要解决的瓶颈问题。
我们采用74LS164这个串入并出的移位寄存器,很好地解决了S3F9454与LED数码管的显示接口电路及按钮控制电路问题。
一、硬件实现1.单片机完全双向的I/O引脚一个I/O口可以被看作是单片机最小的一个外围功能模块。
通过它可使单片机检测各种信号或控制其他电路和器件。
S3F9454单片机的一个典型的I/O端口既可以设置为数字信号输出,又可以作为数字信号输入,是一个标准的双向端口。
作为输出时,可以提供很强的负载驱动能力,高电平输出时的拉出电流和低电平输出时的灌入电流都可以达到25mA;作为输入时,端口呈现极高的输入阻抗,由端口引入的输入漏电流不超过1μA,对输入的信号来说此端口基本可视为开路或浮空状态。
这种输入/输出的状态选择完全是由用户软件自由设定的,且每一个引脚都可以各自独立设定,互不影响。
2.74LS164工作原理74LS164为TTL单向8位移位寄存器,可实现串行输入,并行输出,如图1所示。
其中A、B(第1、2脚)为串行数据输入端,2个引脚按逻辑与运算规律输入信号,共一个输入信号时可并接。
CP(第8脚)为时钟输入端,可连接到单片机时钟控制端。
每一个时钟信号的上升沿加到CP 端时,移位寄存器移一位,8个时钟脉冲过后,8位二进制数全部移入74LS164中。
MR(第9脚)为复位端,当R=0时,移位寄存器各位复0,只有当R=1时,时钟脉冲才起作用。
串并转换
实验五串并转换实验一、实验目的1、掌握串并行转换的原理及采用74LS164扩展端口的方法。
2、掌握数码管显示的原理及方法。
3、学习用任意两根I/O口线进行数据传输的方法。
二、实验要求利用实验箱的显示电路,在数码管上循环显示0-9这10个数,每个数显示1秒。
完成后修改程序,仅在一个数码管上显示0-F这16个数(其它三个数码管不显示)。
三、实验原理实验设备中数码管为共阴接法,接线确定了各段从左至右的排列顺序为:abcdefgh。
如果要显示数字1,应该是b c段发光,所以b c段对应的位写1,其它不发光的位写0。
因此1的显示码为60H。
其它显示码可按此规律得出。
实验原理图见图二,串并转换芯片74LS164的A、B端为串行数据输入端,将其接到数据线P1.0上,CLK为时钟端接到时钟线P1.1上,Q0~Q7为并行输出端接数码管。
在P1.1产生的时钟脉冲的作用下,数据的显示码从74LS164输入端一位一位的输入,经164转换后,串行数据变为8位并行数据经其输出端Q0~Q7加到数码管上,数码管就能显示相应的数字。
下面是数据60H的传输及显示过程:1、将A中数据的最低位送到串口的数据线P1.0上。
2、在时钟线P1.1上产生一个脉冲。
3、在这个脉冲的作用下,P1.0上的数据被打入164的Q0输出端,原来Q0上的数据移到Q1,Q1的数移到Q2…,完成一位数的传输。
4、第1步到第3步重复8次,这样一个字节的数据就输出完毕,同时74LS164将接收到的串行数据转换成并行数据在数码管上显示出来。
四、实验框图实验框图见图一。
五、实验连线及步骤1、DIN接P1.0,CLK接P1.1,打开实验箱电源,打开串并转换数码管显示模块上的开关。
2、启动KEIL软件界面,根据框图编程。
在初始化框中有两个内容,它们分别是:* 送表指针初值---寄存器MOV R1,#0* 送表首地址---DPTR 图一串并转换程序框图 MOV DPTR,#TAB显示子程序如下,其中R4中的初值为8。
单片机控制74LS164驱动数码管
单片机控制74LS164驱动数码管利用74LS164驱动数码管,我们首先来弄清74LS164的工作方式,然后学习如何在自己板子上连接线路。
我们来讲一讲数码管的基础知识:使用数码管时,要注意区分这两种不同的接法:共阴极和共阳极。
共阴极时,为1则亮;共阳极时,为0则亮。
为了显示数字或字符,必须对数字或字符进行编码。
七段数码管加上一个小数点,共计8段。
这些段分别由字母a,b,c,d,e,f,g,dp来表示。
当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的字样了。
比如共阴极的方式接数码管,显示“1”,则编码为0x3f,即00111111(dp g f e d c b a )。
==================================================================================================静态显示程序如下:/*-----------------------------------功能:数码管静态显示0-F单片机:AT89S52------------------------------------*/#include "reg52.h"#define uint unsigned int#define uchar unsigned charsbit DAT=P0^3;sbit CLK=P0^2;void sendbyte(uchar byte);void delay(uint z);uchar code tab[]={0xed,0x09,0xbc,0x9d,0x59,0xd5,0xf5,0x0d,0xfd,0xdd,0x7d,0xf1,0xe4,0xb9,0xf4,0x74,0x00} ; //0-F, 全灭/*========================主函数=========================*/void main(){unsigned char h;while(1){for(h=0;h<17;h++){delay(500); //延时大约是0.5ssendbyte(h);delay(500);}h=0;}}/*====================================用74LS164来输出一个8位的数据,点亮数码管相应的管脚,以显示数字=====================================*/void sendbyte(uchar byte){uchar num,c;num=tab[byte];for(c=0;c<8;c++){CLK=0;DAT=num&0x01; //每一位的输出CLK=1; //每一次上升沿,输出一位数据num>>=1; //右移位赋值,以供下一位的输出}}/*==============================延时子程序===============================*/void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}。
74HC164驱动数码管
只要用到一片164就够了,作动态扫描,下面程序是两个数码管动态扫描,164并行输出口再接一片功率驱动芯片,如TD62083。
程序如下:/**************************************//* 74LS164数码管动态显示*//**************************************///-------------------------------------库函数声明,管脚定义------------#include <at89x51.h>#define uchar unsigned charsbit simuseri_CLK=P1^1; //用P1^1模拟串口时钟sbit simuseri_DATA=P1^0; //用P1^0模拟串口数据sbit a0=ACC^0;unsigned char code dis_code[11]={0x28,0x7E,0xa2,0x62, //查表显示0, 1、、9 0x74,0x61,0x21,0x7A,0x20,0x60, 0x01};uchar numer,temp;uchar ge,shi;//----------------------------------------------------------------------------// 函数名称:out_simuseri// 输入参数:data_buf// 输出参数:无// 功能说明:8位同步移位寄存器,将data_buf的数据逐位输出到simuseri_DATA//----------------------------------------------------------------------------void out_simuseri(uchar data_buf){uchar i;i=8;ACC=data_buf;do{simuseri_CLK=0;simuseri_DATA=a0;simuseri_CLK=1;ACC=ACC>>1;}while(--i!=0);}/************************************/void delay(uchar ms) //延时程序{uchar i;while(ms--){for (i=0;i<125;i++);}}/***********************************/void main(){uchar m;while(1){for(temp=0;temp<99;temp++){ge=temp/10;shi=temp%10;for(m=0;m<20;m++) //显示频率200ms加1次{P2_0=0; //位段码numer=dis_code[ge];out_simuseri(numer); //个位移位显示delay(5);P2_0=1;P2_1=0;numer=dis_code[shi]; //十位移位out_simuseri(numer);delay(5);P2_1=1;}m=0;}}}/****************************************/#i nclude<reg51.h>#define uint unsigned int#define uchar unsigned charsbit DAT=P1^1; //模拟串口数据发送端sbit CLK=P1^2;//模拟时钟控制端uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};//0-9,-,全灭(共阳字段表)void sendbyte(uchar byte){uchar num,c;num=tab[byte];for(c=0;c<8;c++){CLK=0;DAT=num&0x80; //(0x80即十进制的128, 二进制的10000000 按位发送)CLK=1;num<<=1;}}void delay_50ms(unsigned int t) //50MS演示程序{unsigned int j;for(;t>0;t--)for(j=6245;j>0;j--){;}}main(){unsigned char h;while(1){for(h=0;h<10;h++){delay_50ms(1);sendbyte(h);delay_50ms(10);}h=0;}}下面这段是74ls164 驱动共阴数码管的程序源码#i nclude<reg51.h>#define uint unsigned int#define uchar unsigned charsbit DAT=P1^1;sbit CLK=P1^2;uchar code tab[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xff,0xf6};//0-9,-,全灭void sendbyte(uchar byte){uchar num,c;num=tab[byte];for(c=0;c<8;c++){CLK=0;DAT=num&0x01;CLK=1;num>>=1;}}void delay_50ms(unsigned int t) {unsigned int j;for(;t>0;t--)for(j=6245;j>0;j--){;}}main(){unsigned char h;while(1){for(h=0;h<10;h++){delay_50ms(1);sendbyte(h);delay_50ms(10);}h=0;}}刚开始的时候把74HC164当成了74HC573使了,还看了原理图,半天摸不出个所以然,然后上网查了资料,才知道原来74HC164是串入并出的,此时才知道思考方向出错了。
74LS164驱动数码管动态显示
74LS1641、器件功能作用8 位串入,并出移位寄存器2. 概述74HC164、74HCT164 是高速硅门 CMOS 器件,与低功耗肖特基型 TTL (LSTTL) 器件的引脚兼容。
74HC164、74HCT164 是 8 位边沿触发式移位寄存器,串行输入数据,然后并行输出。
数据通过两个输入端(DSA 或 DSB)之一串行输入;任一输入端可以用作高电平使能端,控制另一输入端的数据输入。
两个输入端或者连接在一起,或者把不用的输入端接高电平,一定不要悬空。
时钟 (CP) 每次由低变高时,数据右移一位,输入到 Q0, Q0 是两个数据输入端(DSA 和 DSB)的逻辑与,它将上升时钟沿之前保持一个建立时间的长度。
主复位 (MR) 输入端上的一个低电平将使其它所有输入端都无效,同时非同步地清除寄存器,强制所有的输出为低电平。
3. 特性•门控串行数据输入•异步中央复位•符合 JEDEC 标准 no. 7A•静电放电 (ESD) 保护:·HBM EIA/JESD22-A114-B 超过 2000 V·MM EIA/JESD22-A115-A 超过 200 V 。
•多种封装形式•额定从 -40 °C 至+85 °C 和 -40 °C 至+125 °C 。
4. 功能图图 1. 逻辑符号图 2. IEC 逻辑符号图 3. 逻辑图图 4. 功能图5. 引脚信息图 5. DIP14、SO14、SSOP14 和 TSSOP14 封装的引脚配置引脚说明符号引脚说明DSA 1 数据输入DSB 2 数据输入Q0~Q3 3~6 输出GND 7 地 (0 V)CP 8 时钟输入(低电平到高电平边沿触发)/M/R 9 中央复位输入(低电平有效)Q4~Q7 10~13 输出VCC 14 正电源罗亩的笔记6. 功能表(真值表)H = HIGH(高)电平h = 先于低-至-高时钟跃变一个建立时间 (set-up time) 的 HIGH(高)电平L = LOW(低)电平l = 先于低-至-高时钟跃变一个建立时间 (set-up time) 的 LOW(低)电平q = 小写字母代表先于低-至-高时钟跃变一个建立时间的参考输入(referenced input) 的状态↑ = 低-至-高时钟跃变7. 电器特性动态特性(TA=25℃)8. 推荐工作条件[1] 对于 DIP14 封装:Ptot 在超过70 °C 时以 12 mW/K 的速度线性降低。
164芯片程序设计指引
164驱动程序及说明一、概述利用164芯片分时驱动,实现以较少的IO口扫描检测按键和实现LED、数码管的显示。
二、164芯片说明74164芯片为8位移位寄存器,串行输入,并行输出,含两个串行数据输入口(与非门输入)和一个串行时钟输入口。
常用型号为74HC164,兼容TTL电平,最高工作时钟频率20MHz,扇出系数10。
三、参考电路164芯片管脚分布图164芯片工作时序图四、程序框图五、程序说明1.外部名称和全局变量申明NAME BTNDISPPUBLIC _BtnDisp ; 子程序名PUBLIC _n_Button, _n_LEDDisp, _n_NumDisp2.IO端口定义PIO_164Clk EQU P0.0 ; 164时钟口,输出PIO_164Data EQU P0.1 ; 164数据口,输出PIO_BtnCom1 EQU P2.2 ; 第1组按键公用端,输入PIO_BtnCom2 EQU P6.3 ; 第2组按键公用端,输入PIO_LEDCom1 EQU P5.2 ; 第1组LED公用端,输出PIO_LEDCom2 EQU P2.0 ; 第2组LED公用端,输出PIO_NumCom1 EQU P5.1 ; 第1位数码管公用端,输出PIO_NumCom2 EQU P5.0 ; 第2位数码管公用端,输出3.常量定义无4.变量定义DSEG SADDR ; 申明数据区_n_Button: DS (16) ; 按钮输入数据,含按键压下、抬起、响应标志。
_n_LEDDisp: DS (2) ; LED显示灯分2组,每组最多8个_n_NumDisp: DS (2) ; 2-8段码数码管显示数据n_ScanChn: DS (1) ; 按键扫描通道号:0~7,每次子程序扫描2组*1个按键,8次全部扫描完。
n_DispChn: DS (1) ; 显示扫描通道号:0~3,每通道(1个数码管或1组LED)显示时间占1/4,刷新周期取决于子程序执行频率5.使用说明作为常规子程序调用,如果直接嵌入主程序文件,无需外部名称和全局变量申明,程序中检测的按键数16,显示驱动8段数码管2个,及最多LED数16个。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数码管显示电路
数码管显示电路中采用的是74HC164和8段数码管。
74HC164是高速硅门CMOS 器件,与低功耗肖特基型TTL (LSTTL)器件的引脚兼容。
74HC164是8位边沿触发式移位寄存器,串行输入数据,然后并行输出。
时钟(CP)每次由低变高时,数据右移一位,输入到Q0,Q0是两个数据输入端(DSA 和DSB)的逻辑与,它将上升时钟沿之前保持一个建立时间的长度。
主复位(MR)输入端上的一个低电平将使其它所有输入端都无效,同时非同步地清除寄存器,强制所有的输出为低电平。
8段数码管又称为8字型数码管,分为8段:A、B、C、D、E、F、G、P。
其中P为小数点。
数码管常用的有10根管脚,每一段有一根管脚,另外两根管脚为一个数位管的公共端COM,两根之间相互连通。
可以显示:时间、日期、温度等。
将要发送的数据以串行的方式发送给74HC164,在由74HC164的并行输出端控制8段数码管,由于74HC164没有输出所存功能,所以当发送显示的数据很快时,数码管显示的就是8888,不能观察具体的数据,所以在软件的编写中当要发送相同的数据时,实际并不发送,只有要发送的数据不同时才真正的发送数据。