74HC164应用实例:驱动数码管两例(电路图和源程序)

合集下载

74HC164应用实例:驱动数码管两例(电路图和源程序)

74HC164应用实例:驱动数码管两例(电路图和源程序)

74HC164应用实例:驱动数码管两例(电路图和源程序)————————————————————————————————作者:————————————————————————————————日期:4HC164应用实例:驱动数码管两例(电路图和源程序) 文章编号:100816210758 文章分类: 电路 > 电子元件 点击:... 关键词: 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在实际应用中驱动数码管常用的方式分动态扫描和静态驱动。

基于51单片机的74HC164驱动六位数码管显示程序与仿真

基于51单片机的74HC164驱动六位数码管显示程序与仿真
delay1ms();
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++)

单片机串口连接两个74LS164驱动两个LED数码管

单片机串口连接两个74LS164驱动两个LED数码管

单片机应用设计课题:串口连接两个74LS164驱动2个LED数码管显示班级学号: 14110501xx 姓名: xx1设计要求1.1 设计内容设晶体为12MHz,将拨码开关数据串行输入到74LS164,并行输出到2个LED 数码管进行相应的数码显示。

设计包括:系统设计分析、系统原理图设计、程序流程图设计、源程序设计、系统调试与仿真及调试结果分析、对本课程学习的感想与收获、对老师的意见与建议、期望成绩等。

1.2 学习目的该作业具有较强的实用性,许多同学已经认识到自己完全有能力设计一个实用的单片机应用系统,对单片机设计由感兴趣已经变为爱好了,为后面的实际应用系统设计奠定了较好的基础。

2 系统设计分析2.1 单片机最小系统+串口+74LS164+LED数码管单片机的最小系统是单片机能够工作的最小硬件组合,对于8051系列单片机,其电路的最小系统大致相同,主要包括电源、晶体振荡电路、复位电路等。

2.1.1 串口数据通信方式包括并行通信和串行通信两种。

并行通信就是多条数据线上同时传送,其优点:速度快,只适于近距离通信。

串行通信就是数据以为以为的顺序传送,其优点:线路简单,成本低,适合远距离通信。

串行通信方式包括:异步串行通信和同步串行通信。

异步方式,数据传送不连续,时间间隔任意。

同步方式,发送与接收同步。

数据传送方式:单工、半双工、全双工、多工。

常见的串行通讯有:RS-232、RS-485、CAN总线等。

串行口控制寄存器包括:串行口控制寄存器SCON(控制工作方式)、电源控制寄存器PCON(控制波特率)。

SM0、SM1选择工作方式,SM2用于多机通信,REN允许接收控制位,TB8/RB8发送/接收数据D8位,TI/RI为发送/接收中断标志位。

2.1.2 74LS164串行口工作于方式0,发送数据时,是把串行端口设置成“串入并出的”输出口。

将它设置为“串入并出”输出口时,需外接1片“串入并出”同步移位芯片74LS164或CD4094,本次设计,用74LS164。

74HC164驱动数码管

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驱动数码管动态显示

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 的速度线性降低。

单片机串口连接两个74LS164驱动两个LED数码管

单片机串口连接两个74LS164驱动两个LED数码管

单片机应用设计课题:串口连接两个74LS164驱动2个LED数码管显示班级学号: xx姓名: xx1设计要求设计内容设晶体为12MHz,将拨码开关数据串行输入到74LS164,并行输出到2个LED 数码管进行相应的数码显示。

设计包括:系统设计分析、系统原理图设计、程序流程图设计、源程序设计、系统调试与仿真及调试结果分析、对本课程学习的感想与收获、对老师的意见与建议、期望成绩等。

学习目的该作业具有较强的实用性,许多同学已经认识到自己完全有能力设计一个实用的单片机应用系统,对单片机设计由感兴趣已经变为爱好了,为后面的实际应用系统设计奠定了较好的基础。

2 系统设计分析单片机最小系统+串口+74LS164+LED数码管单片机的最小系统是单片机能够工作的最小硬件组合,对于8051系列单片机,其电路的最小系统大致相同,主要包括电源、晶体振荡电路、复位电路等。

串口数据通信方式包括并行通信和串行通信两种。

并行通信就是多条数据线上同时传送,其优点:速度快,只适于近距离通信。

串行通信就是数据以为以为的顺序传送,其优点:线路简单,成本低,适合远距离通信。

串行通信方式包括:异步串行通信和同步串行通信。

异步方式,数据传送不连续,时间间隔任意。

同步方式,发送与接收同步。

数据传送方式:单工、半双工、全双工、多工。

常见的串行通讯有:RS-232、RS-485、CAN总线等。

串行口控制寄存器包括:串行口控制寄存器SCON(控制工作方式)、电源控制寄存器PCON(控制波特率)。

SM0、SM1选择工作方式,SM2用于多机通信,REN允许接收控制位,TB8/RB8发送/接收数据D8位,TI/RI为发送/接收中断标志位。

74LS164串行口工作于方式0,发送数据时,是把串行端口设置成“串入并出的”输出口。

将它设置为“串入并出”输出口时,需外接1片“串入并出”同步移位芯片74LS164或CD4094,本次设计,用74LS164。

74LS164是8位边沿触发式移位寄存器,具有DIP、SO14等多种封装形式。

74HC164D中文资料 参数及应用

74HC164D中文资料 参数及应用

74HC164D中文资料参数SN54HC164,/SN74HC164是8位移位寄存器,当其中一个(或二个)选通串行输入端的低电平禁止进入新数据,并把第一个触发器在下一个时钟脉冲来后复位到低电平时,门控串行输入端(A 和B)可完全控制输入数据。

一个高电平输入后就使另一个输入端赋能,这个输入就决定了第一个触发器的状态。

虽然不管时钟处于高电平或低电平时,串行输入端的数据都可以被改变,但只有满足建立条件的信息才能被输入。

时钟控制发生在时钟输入由低电平到高电平的跃变上。

为了减小传输线效应,所有输入端均采用二极管钳位。

功能表:Inputs输入Outputs输出CLRCLK A B QA QB ...QHL X X X L L LH L X X QAQBQH0H↑H H H QAnQGnH↑L X L QAnQGnH↑X L L QAnQGnH=高电平(稳定态)L=低电平(稳定态)×=不定↑=从低电平转换到高电平QA0…QH0=在稳定态输入条件建立前QA…QH 的相应电平QAn…QHn=在最近的时钟输入条件(↑)建立前QA…QH 的相应电平,表示移位一位图1 逻辑图(正逻辑)图2 引脚图Absolute Maximum Ratings绝对最大额定值Supply voltage range, 电源电压范围VCC–0.5 V to 7V Input clamp current, 输入钳位电流IIK (VI < 0 or VI > VCC) (seeNote 1)±20 mA Output clamp current,输出钳位电流IOK (VO < 0 or VO > VCC) (seeNote 1)±20 mA Continuous output current,连续输出电流IO (VO = 0 to VCC)±25 mA Continuous current through 连续通过电流VCC or GND±50 mA封装热阻thermal impedance, θJA (see Note 2):D 封装86℃/W N 封装80℃/W NS 封装76℃/W PW 封装113℃/WStorage temperature range, Tstg储存温度范围–65℃ to 150℃DC SPECIFICATIONS直流电气规格表:符号Parameter 参数SN54HC164SN74HC164最小典型最大最小典型最大VCCSupply Voltage 电源电压256256图3 参数测量信息图4 typical clear, shift, and clear sequence典型清除、移位和清除时序应用电路:图5 LCD驱动电路图6 LED驱动电路74HC164中文资料参数时间:2016-06-15 来源:资料室作者:编号:颖展电子SN54HC164,/SN74HC164是8位移位寄存器,当其中一个(或二个)选通串行输入端的低电平禁止进入新数据,并把第一个触发器在下一个时钟脉冲来后复位到低电平时,门控串行输入端(A 和B)可完全控制输入数据。

实验二 数码管控制实验

实验二 数码管控制实验

实验二数码管控制实验一、实验目的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的场合越来越多。

74ls164

74ls164

74ls164驱动数码管电路74ls164应用电路作者:本站来源:本站原创发布时间:2008-4-28 21:59:00 [收藏] [评论]74ls164应用电路本文采用了74LS164 这个串入并出的移位寄存器,很好地解决了2051 与L ED 的显示接口电路。

1 硬件电路2051 余下的并行I/ O 口线不足8 根,数据的并行输出已不可能,但可以考虑串行输出方法,图1 给出串行口扩展的4 位L ED 显示接口电路。

该电路只使用2051 的3 个端口,配接4 片串入并出移位寄存器74LS164 与1 片三端可调稳压器LM317T3 结束语本串行口扩展的LED 显示接口电路已被笔者成功地应用到以AT89C2051 单片机为核心的智能仪表中,如单片机湿度测量仪、单片机温度测量仪等。

现场运行表明,LED 显示清晰稳定不闪烁,特别是在现场环境如光照强弱不同的情况下, 可以在线调整LED 发光的亮度,获得视觉与功耗的最佳效果。

图1 串行口扩展的4 位LED显示电路.74LS164是一个串行输入并行输出的移位寄存器,可用于扩展并行输出口。

74LS165是8位并行输入串行输出移位寄存器,可以扩展一个或多个8位并行I/O口74LS164静态显示接口最近做一个很简单的应用单片机与74LS164结合的串如并出的应用用8051串行口外接74LS164扩展8位并行输出口,如图所示,8位并行口的各位都接一个发光二极管,要求发光管呈流水灯状态。

串行口方式0的数据传送可采用中断方式,也可采用查询方式,无论哪种方式,都要借助于TI或RI标志。

串行发送时,可以靠TI置位(发完一帧数据后)引起中断申请,在中断服务程序中发送下一帧数据,或者通过查询TI的状态,只要TI为0就继续查询,TI 为1就结束查询,发送下一帧数据。

在串行接收时,则由RI引起中断或对RI 查询来确定何时接收下一帧数据。

无论采用什么方式,在开始通讯之前,都要先对控制寄存器SCON进行初始化。

单片机串口连接两个74LS164驱动两个LED数码管学习资料

单片机串口连接两个74LS164驱动两个LED数码管学习资料

单片机串口连接两个74L S164驱动两个L E D数码管单片机应用设计课题:串口连接两个74LS164驱动2个LED数码管显示班级学号: 14110501xx 姓名: xx1设计要求1.1 设计内容设晶体为12MHz,将拨码开关数据串行输入到74LS164,并行输出到2个LED数码管进行相应的数码显示。

设计包括:系统设计分析、系统原理图设计、程序流程图设计、源程序设计、系统调试与仿真及调试结果分析、对本课程学习的感想与收获、对老师的意见与建议、期望成绩等。

1.2 学习目的该作业具有较强的实用性,许多同学已经认识到自己完全有能力设计一个实用的单片机应用系统,对单片机设计由感兴趣已经变为爱好了,为后面的实际应用系统设计奠定了较好的基础。

2 系统设计分析2.1 单片机最小系统+串口+74LS164+LED数码管单片机的最小系统是单片机能够工作的最小硬件组合,对于8051系列单片机,其电路的最小系统大致相同,主要包括电源、晶体振荡电路、复位电路等。

2.1.1 串口数据通信方式包括并行通信和串行通信两种。

并行通信就是多条数据线上同时传送,其优点:速度快,只适于近距离通信。

串行通信就是数据以为以为的顺序传送,其优点:线路简单,成本低,适合远距离通信。

串行通信方式包括:异步串行通信和同步串行通信。

异步方式,数据传送不连续,时间间隔任意。

同步方式,发送与接收同步。

数据传送方式:单工、半双工、全双工、多工。

常见的串行通讯有:RS-232、RS-485、CAN总线等。

串行口控制寄存器包括:串行口控制寄存器SCON(控制工作方式)、电源控制寄存器PCON(控制波特率)。

SM0、SM1选择工作方式,SM2用于多机通信,REN允许接收控制位,TB8/RB8发送/接收数据D8位,TI/RI为发送/接收中断标志位。

2.1.2 74LS164串行口工作于方式0,发送数据时,是把串行端口设置成“串入并出的”输出口。

将它设置为“串入并出”输出口时,需外接1片“串入并出”同步移位芯片74LS164或CD4094,本次设计,用74LS164。

74HC164应用实例

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应用实例:驱动数码管两例

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在实际应用中驱动数码管常用的方式分动态扫描和静态驱动。

74LS164驱动数码管动态显示

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 的速度线性降低。

74LS164串联驱动的多位LED数码模块在线确认段位的方法

74LS164串联驱动的多位LED数码模块在线确认段位的方法

多位LDE数码管段位在线确认及段码数组的编写方法当我们拿到一块成品的多位LED数码管显示电路板,或将买到的多位LED数码管安装到电路板上后,首先需要做的工作就是为LED编制段码表,因为,只有编好段码表后才能对其进行编程控制,也就是我们在数码管驱动应用程序中见到段码数组,本文将就前文提到的两位数码管、经由串行输入/并行输出芯片74LS164控制显示的电路,进行段位编码,与有兴趣的朋友共享,或许有朋友会说,现在LED数码管的应用,多是由单片机的一个输出端口的8位I/O端控制8个段,用另一个输出端控制数码管位,很少用到164了,其实不然,商品板多为164或595控制,即使自己设计时,考虑到单片机控制端口的多少,是否够用等因素,这种串口控制的芯片也是不错的选择,况且,即使是单片机端口直接控制也是要根据实际接线顺序进行编码的,此时只要更改一下程序中的输出语句即可;闲言少叙,书归正传;以AT89S51单片机为例,首先,连接好线路,164的数据输入端DAT连接单片机的RXD端,164的外部时钟端CLK连接单片机的TXD端,两个共阳极与+5V电源端连接;至于164的8个输出端经限流电阻与数码管连接的电路图在本空间相册中能够找到,仿制一下很容易的,不同之处在于,这种共数据端多公共极的模块,不论多少位数码就用一片164就可以了,在此就不多说了。

编程如下:#include<at89x51.h>main(){while(1){SBUF=0x80 ;while(!TI);TI=0;}}接下来画一张11行10列的草图,而后编译并下载上面这段程序,在电路连接正确时,必有一段被点亮(或未被点亮),此时在表格左侧第一行的第二个位置开始填入被点亮段的代号,(代号的定义见上篇文章附图)而后,将程序中的0x80依次更换为0x40;0x20;0x10;0x08;0x04;0x02;0x01并逐次编译下载,结果填入表内,最终得到全部段码代号的排列顺序,据此根据74LS164输出共阳极控制“0亮”、“1灭”的原则,得出各数字字符编码,见以下附图:到此,这个两位LED数码模块就可以编程应用了。

164芯片程序设计指引

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个。

PIC16f630使用74HC164驱动4位数码管

PIC16f630使用74HC164驱动4位数码管
#DEFINE WEI2 PORTC,0;---数码管第5位位选端
#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;----段灭值,消影

74LS164和74LS165工作原理及其单片机中的应用(基于Proteus仿真)

74LS164和74LS165工作原理及其单片机中的应用(基于Proteus仿真)

74LS164和74LS165工作原理及其在单片机中的应用基于Proteus仿真前言:本文详细介绍了74LS164和74LS165工作原理,并分别举例它们在单片机中的应用,所举例子包含proteus仿真电路图,源程序,程序注释详细清楚。

1、74LS164在单片机中应用举例本例在单片机串行口外接一片8位串入并出移位寄存器74LS164芯片,构成单片机输出接口电路,控制8只LED滚动显示。

(1)74LS164芯片如右图所示,它是8位串入并出移位寄存器,串行输入数据,然后并行输出。

各引脚功能如下:A、B(1、2引脚):数据输入端,数据通过这两个输入端之一串行输入;任一输入端可以用作高电平使能端,控制另一输入端的数据输入。

当其中任意一个为低电平,则禁止新数据输入;当其中有一个为高电平,则另一个就允许输入数据。

因此两个输入端或者连接在一起,或者把不用的输入端接高电平,一定不要悬空。

Q0~Q7(3~6,10~13引脚):数据输出端CP(8号引脚):时钟输入端。

CP每次由低变高时,数据右移一位,输入到Q0,Q0 是两个数据输入端的逻辑与,它将上升时钟沿之前保持一个建立时间的长度。

MR:复位清除端,当MR为低电平时,其它所有输入端都无效,同时所有输出端均为低电平。

GND(7号引脚,在proteus中已隐藏):接地端VCC(14号引脚,在proteus中已隐藏):电源端,接+5V电源74LS164 内部逻辑图(2)如下图所示,本例单片机串行口工作于方式0,即移位寄存器输入/输出模式。

串行数据通过RXD输出,TXD则用于输出移位时钟脉冲。

数据输入端1接高电平,数据输入端2接单片机RXD引脚。

时钟输入端接TXD引脚,复位端悬空。

数据输出端通过限流电阻接8只LED灯。

C程序如下:#include <reg51.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned charvoid delay(uint x){uchar i;while(x--)for(i=0;i<120;i++);}void main(){uchar c=0x80;SCON=0x00; //串行口工作在方式0while(1){c=_crol_(c,1);SBUF=c;while(TI==0); //等待发送结束TI=0; //发送结束,TI置0delay(400);}}Proteus仿真运行结果如下:2、74LS165在单片机中的应用举例本例在单片机串行口外接一片8位并入串出移位寄存器74LS165,连接移位寄存器并行输入端的是8位拨码开关,其开关动作对应的8位二进制序列将通过移位寄存器串行输入到单片机串口,并通过单片机P0端口的8只LED显示出来。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实例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在实际应用中驱动数码管常用的方式分动态扫描和静态驱动。

动态扫描方式需要x+y 个IO(x*y个数码管的情况,一般x=8,y=位数)这种方法很浪费MPU的IO端口对于2051等20脚的芯片就很难实现。

静态显示驱动法,即是指每一个LED灯分别对应一个独立的IO驱动口,这种方法适用较少LED的驱动,不适合数码管驱动。

还有一种利用74HC164来驱动的方法。

74HC164是比较典型的移位寄存器,该移位寄存器有一个数据输入端口、一个时钟信号端口和八个输出端口。

这种方法只需要2个MPU 的IO端口,而且在锁存器件这2个端口还可以干别的事情。

74HC164驱动共阴、共阳数码管都很方便。

驱动要点:1、上升沿写入串行数据:CLK=0;DAT=num&0x01;CLK=1;2、写入数据的数码管编码(指代码中的tab[])串行数据是FIFO先进先出,也就是先写高位,移位放入。

电路如图:3、程序源代码:1.//共阴数码管74HC164串行驱动2.3.#include<AT892051.H>4.5.#define uint unsigned int6.7.#define uchar unsigned char8.9.sbit DAT=P3^7; //模拟串口数据发送端10.11.sbit CLK=P3^4;//模拟时钟控制端12.13.14.15.uchar code tab[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xff,0xf6};//0-9,-,全灭16.17.18.19.void sendbyte(uchar byte)20.21.{ /22.23. uchar num,c;24.25. num=tab[byte];26.27.for(c=0;c<8;c++)28.29. {30.31. CLK=0;32.33. DAT=num&0x01;34.35. CLK=1;36.37. num>>=1;38.39.40.41.42.43. }44.45.46.47.}48.49.50.51.52.53.void delay_50ms(unsigned int t)54.55.{56.57.unsigned int j;58.59.for(;t>0;t--)60.61.for(j=6245;j>0;j--)62.63.{;}64.65.}66.67.68.69.main()70.71.{72.73.74.75.76.77.unsigned char h;78.79.while(1){80.81.for(h=0;h<10;h++){82.83. delay_50ms(1);84.85. sendbyte(h);86.87.88.89.90.91. delay_50ms(4);92.93. }94.95. h=0;96.97. }98.99.100.101.}。

相关文档
最新文档