74HC164的驱动和应用
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脚上。
74HC164的驱动和应用
74HC164的驱动和应用74HC164的几点说明:1.74HC164是串行输入,并行输出的;2.它的并行输出其实是有延时的,只是延时时间小,可以认为是并行输出;74hc164封装和真值表:真值表中文解释说明:H-高电平 L -低电平 X -任意电平↑-低到高电平跳变(上升沿有效)QA0,QB0,QH0 -规定的稳态条件建立前的电平QAn,QGn -时钟最近的↑前的电平看真值表的第三条和第五条:就可以知道,在保持clear为 H, clock为↑状态下,AB都为H时,移位寄存器移入H,而当移位寄存器移入L时,必须令B为L,而A不受约束。
所以可以把AB断相连再接入单片机数据端口。
还有一种是A脚直接接高电平,B脚连入单片机数据端(P2_7)时序图:1. 首先区分输入输出信号。
这里CLEAR、A、B、CLOCK是输入信号,Qa~Qh是输出信号;2. 拿尺子开始扫描……2.1. 首先可以看到CLEAR的下降沿后输出全部置低电平。
结合后面的一个CLEAR 下降沿,可以得出结论:当CLEAR输入下降沿时,无论A、B、CLOCK状态为何,输出全部拉低;2.2. 尺子向右移动……找到Qa的第一个上升沿,可以看到这个上升沿是与CLOCK的上升沿对齐的,可以得出结论:输出在逻辑上与上升沿同步。
此时将会注意到在此之前已经有3个上升沿但输出始终为低电平,尺子移动分别比较这3个上升沿,其A、B输入分别为10、01,于是可以得出结论:Q a = A · B。
2.3. 尺子继续向右移动……可以分别看出在随后的CLOCK上升沿处,Qa全部按照A与B进行输出,从而验证以上结论。
此外Qb~Qh的波形为Qa波形依次移位得到。
74HC164中文资料及引脚功能图
74HC164引脚图与中文资料8 位串入、并出移位寄存器1. 概述74HC164、74HCT164 是高速硅门CMOS 器件,与低功耗肖特基型TTL (LSTTL) 器件的引脚兼容。
74HC164、74HCT164 是8 位边沿触发式移位寄存器,串行输入数据,然后并行输出。
数据通过两个输入端(DSA 或DSB)之一串行输入;任一输入端可以用作高电平使能端,控制另一输入端的数据输入。
两个输入端或者连接在一起,或者把不用的输入端接高电平,一定不要悬空。
时钟(CP) 每次由低变高时,数据右移一位,输入到Q0,Q0 是两个数据输入端(DSA 和DSB)的逻辑与,它将上升时钟沿之前保持一个建立时间的长度。
主复位(MR) 输入端上的一个低电平将使其它所有输入端都无效,同时非同步地清除寄存器,强制所有的输出为低电平。
2. 特性•门控串行数据输入•异步中央复位•符合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 。
3. 功能图图 1. 逻辑符号图 2. IEC 逻辑符号图 3. 逻辑图图 4. 功能图4. 引脚信息图 5. DIP14、SO14、SSOP14 和TSSOP14 封装的引脚配置引脚说明符号引脚说明DSA 1 数据输入DSB 1 数据输入Q0~Q3 3~6 输出GND 7 地(0 V)CP 8 时钟输入(低电平到高电平边沿触发)/M/R 9 中央复位输入(低电平有效)Q4~Q7 10~13 输出VCC 14 正电源。
LED驱动芯片74HC164
K 0.46 0.56 K1 0.46 0.51
Unit:mm
0.178~0.278
3.90±0.20 6.00±0.20
0.65±0.10
1.55±0.20
1.27TYP 0.406~0.496 0.175±0.10
1.38±0.20
0°~7° Unit:mm
Rev 2.2 2007-12-05 7/7
0.5 1.35 1.8 VCC VCC 1000 500 400 85
单位 V V
V V V ns ℃
电参数
特性
测试条件
VOH VI = VIH 或 VIL
IOH =20μA
IOH =-4mA
IOH =-5.2mA
VOL VI = VIH 或 VIL
IOL =20μA
IOL =4mA
IOL =5.2mA
2V
6
10
5
fMAX
4.5V
31
54
25
MHz
6V
36
62
28
2V
140
205
255
tPHL
CLR Any Q 4.5V
28
41
51
6V
24
35
46
ns
2V
115
175
220
tpd
CLK Any Q 4.5V
23
35
44
6V
20
30
38
2V
38
75
95
tt
4.5V
8
15
19
ns
6V
6
13
16
TM74HC164
SHENZHEN TITAN M ICRO ELECTRONICS CO., LTD.
TM74HC164与SN74HC164测试参数对比:
特性
电源电流
输入高电 平电压
输入低电 平电压
输出高电 平电压
输出低电 平电压
输入漏电 流
时钟上升 沿到数据 有效时间 数据到时 钟建立时
间 工作频率
驱动电流
符号
IDD VIH
—
—
100
58
65
TM74HC164 SN74HC164 单位
25℃
2
2
μA
4.2
4.2
V
1.35
1.35
V
5.99
5.99
V
0.05
0.05
V
0.01
0.01
μA
2
8
ns
5
5
ns
80
36
MHz
60
50
mA
地址:深圳市高新技术产业园中区深圳软件园 4 栋 522 室
Add:522,5/F,Bldg. No.4,Keji Central Road 2, Software Park,High-Tech Industrial Park,Shenzhen
地址:深圳市高新技术产业园中区深圳软件园 4 栋 522 室
Add:522,5/F,Bldg. No.4,Keji Central Road 2, Software Park,High-Tech Industrial Park,Shenzhen
电话:86-755-86185092
传真: 86-755-86185093
和异步清零端。串行数据输入端(A、B)可非常方便的控制输入数据,当A、B 任意 一个为低电平,则禁止新数据输入,并在时钟端(CLK)脉冲上升沿,复位第一个触 发器,使Q0输出为低电平;当A、B 有一个为高电平,则允许另一个输入数据,在CLK 上升沿时下,决定第一个触发器Q0的状态;
74HC164级联实现四位数码管显示电路
中北大学课程设计说明书学生姓名:XXXXXX 学号:1005xxxxx学院:信息与通信工程学院专业:电子信息科学与技术题目:74HC164级联实现四位数码管显示电路设计指导教师:程耀瑜职称: 教授李文强职称:讲师2013 年 1 月 17 日中北大学课程设计任务书2012/2013 学年第一学期学院:信息与通信工程学院专业:电子信息科学与技术学生姓名:xxxxxxx 学号:100xxxxxxx 课程设计题目:74HC164级联实现四位数码管显示电路设计起迄日期:1月4日~1月15日课程设计地点:中北大学指导教师:程耀瑜,李文强系主任:程耀瑜下达任务书日期: 2010 年 1 月 3 日课程设计任务书目录一、设计目的 (6)二、设计任务 (6)三、设计条件 (6)四、设计内容和要求 (6)1、74CH164的逻辑功能、逻辑图、引脚说明、波形图 (7)2、七段显示数码管 (9)3、74164QUARTUS 2仿真 (10)4、分步设计 (10)5、电路设计图 (11)6、仿真波形图 (12)六、设计总结 (15)1、设计总结 (15)2、设计中的优点与不足 (15)3、心得体会 (15)六、计参考资料 (16)一、设计目的本课程设计主要针对模拟电子技术和数字电子技术课程要求,培养学生在查阅资料的基础上,进行实用电路设计、计算、仿真、调试等多个环节的综合能力,同时培养学生用课程中所学的理论独立地解决实际问题的能力。
另外还培养学生用专业的、简洁的文字,清晰的图表来表达自己设计思想的能力。
二、设计任务设计一个74HC164级联实现四位数码管显示电路,通过在74HC164上输入时钟信号(CP)和控制信号(D),在数码管上显现出来相应的信号。
三、设计条件本设计是基于在学习过数字电子技术基础和模拟电子技术基础且在完成电子技术实验后设计的,通过在电脑上利用各种软件设计而成,包括Quartus II 5.0,Multisim2001等设计仿真软件。
矩阵键盘状态机之74HC164驱动数码管依次显示键值要点
用视图Web模式看uchar code smg_duan[]= //数码管(共阴)编码0-F,全灭; 按键对应的数字不是上图,而是-------------------------这里下面的{//用IO口P0,所以把A B C D E F G DP分别接到P0^0 P0^1 P0^2 P0^3 P0^4 P0^5 P0^6 PO^7 所以编码如下---------- --------------|-1--|-2--|-3--|-----------------------------------|-4--|-5--|-6--|-----------------------0X3f,0X06,0X5B,0X4f,0X66,0X6D,0X7D,0x07,0x7f,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x7 1,0X00---------------|-7--|-8--|-9--|-----------------//可以把0x71或任意一个改为0x00,这样就可以按下0x71这个案件时清楚显示了---------------|-C--|-0--|-E--|---------------------/* 0xfC,0x0C,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,0xEE,0x3E,0x9C,0x7A,0x9E,0x8E,0x00 //多写了0x00,代表段选全部熄灭*/};0X3f,0X06,0X5B,0X4f,0X66,0X6D,0X7D,0x07,0x7f,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x7 1,0X00//可以把0x71或任意一个改为0x00,这样就可以按下0x71这个案件时清楚显示了完整程序如下:/*==========================================================* 开发人员:laowang* 当前版本:V1.0* 创建时间:11/26/2013* 修改时间:04/21/2017* 功能说明:对4*3矩阵键盘扫描,用4位共阴数码管进行显示,刚开始时不亮,依次按下按键时数码管依次显示0-F,扫描方法为状态机方法+定时器中断* 修改人员:梁超云*==========================================================*/#include<reg52.h>#include"Define.h"#include"display.h"#include"matrixkeyscan.h"#include "74HC164.h"void Timer0_init(); //定时器初始化函数uint flag1=0;uint flag=0; //按键扫描标志,每中断一次,扫描一次bit power_on=1;//主函数void main(){uchar key_state=0;uchar readkey;readkey=0xff;Timer0_init();Display_init(); //使之不亮while(1){if(flag==1){flag=0;flag1++;if(flag1>=4){flag1=0;}readkey=Keyscan();if (power_on==0){power_on=1;num2++;if(num2>=4){num2=0;}DisplayBUFF(readkey);}Display();}}}void Timer0() interrupt 1{// TH0=0xD8; //10Ms产生一次中断// TL0=0xF0;// TH0=0xB1; //20Ms产生一次中断// TL0=0xE0;// TH0=0xec; //5Ms产生一次中断// TL0=0x78;TH0=0x63; //40Ms产生一次中断TL0=0xc0;flag++;}void Timer0_init(){// TH0=0xD8; //12MHz--10Ms产生一次中断// TL0=0xF0;// TH0=0xB1; //20Ms产生一次中断// TL0=0xE0;// TH0=0xec; //5Ms产生一次中断// TL0=0x78;TH0=0x63; //40Ms产生一次中断TL0=0xc0;EA=1;ET0=1;TR0=1;}/*==================硬件电路===============================*说明:数码管为共阴数码管,驱动方式为74hc164扫描方式为动态扫描*==========================================================*/ //梁超云改为P0.0-P0.7直接数码管的A-H,P2接数码管位选#include<reg52.h>#include"Define.h" //把常用的宏定义写成了头文件,包含进来#include"display.h"#include "74HC164.h"#include"matrixkeyscan.h"uchar segbuff[4];uchar num2=0;//sbit wela=P3^5; //位选//sbit dula=P3^4; //段选uchar code smg_duan[]= //数码管(共阴)编码0-F,全灭;{//用IO口P0,所以把A B C D E F G GP分别接到P0^0 P0^1 P0^2 P0^3 P0^4 P0^5 P0^6 PO^7 所以编码如下0X3f,0X06,0X5B,0X4f,0X66,0X6D,0X7D,0x07,0x7f,0x6F,0x77,0x7C,0x39,0x5E,/*0x79*/0 x00,0x71,0X00//用IO口P0,所以把A B C D E F G GP分别接到P0^7 P0^6 P0^5 P0^4 P0^3 P0^2 P0^1 PO^0 所以编码如下//可以把0x79或任意一个改为0x00,这样就可以按下0x79这个案件时清楚显示了//0xfC,0x0C,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,0xEE,0x3E,0x9C,0x7A,/*0x9E*/ 0X00,0x8E,0x00 //多写了0x00,代表段选全部熄灭};//uchar code smg_wei[]={0xfe,0xfd,0xfB,0xf7};//数据向左移动。
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是串入并出的,此时才知道思考方向出错了。
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)可完全控制输入数据。
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在实际应用中驱动数码管常用的方式分动态扫描和静态驱动。
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、七段数码管:
按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二
极管的阳极接到一起形成公共阳
关于74HC164的应用
电子技术Electronic Technology电子技术与软件工程Electronic Technology & Software Engineering 关于74HC164的应用孙镛程(辽宁科技大学电子与信息工程学院辽宁省鞍山市114051)摘要:本文使用74H C164芯片的输入和输出功能,与单片机进行串行通信,并行输出直接驱动显示设备.通过数据缓存器、锁存器 来扩展单片机I/O 口,减少单片机的需求。
该系统的成本还具有较大的优势,被广泛用于按鍵和显示驱动电路.关键词:74H C164;数码管显示;L E D;按徤扫描1引言在当前的电子产品市场中,74HC164 (以下简称“164”)起 着重要的作用。
2 74H C164的系统结构和工作原理2. 1系统结构该芯片是一个串行输入、并行输出的接口芯片,(74HC164is a serial input and parallel output interface chip)数据通过端口 A和端口B进行与运算形成,端口A与端口 B的与运算是在脉冲上升沿 来临之前完成的。
寄存器的复位信号在低电平时起作用,当寄存器 的复位端口输入一个低电平信号时,寄存器复位为零同时输出低电 平信号。
74HC164芯片的两个输入端口 A、B,任意一个端口接高 电平时可以控制另一个端口,输入端不能悬空处理。
如图I和表I 所示。
表1:74H C164引脚功能表符号引脚说明DSA1数据辅入DSB2数据辎入Q0-Q33^6输出GND7地(0V)CP8时钟输入(低电平到高电平边沿缺发)/M/R9中央复位输入(低电平有效)Q4、Q710-13输出VCC14正电源表2:功能图表其中,表2中:1純达入綸出H代表高电平。
辘人式h代表在低到高时钟跃变一个建立时间的高电平。
L代表低电平。
I M/R CP复位DSAI代表由低到高时钟跃变一个建立时间周期的低电平。
q表示由低到高时钟CLK跃变成一个建立时间的参考输入的(清L除)移位HLT为低到高的时钟的跳跃变化。
74HC164中文资料
-
15
34
ns
-
12
29
ns
-
39
140
ns
-
14
28
ns
-
11
24
ns
-
19
75
ns
-
7
15
ns
-
6
13
ns
80
-
16
-
14
-
-
ns
-
ns
-
ns
60
-
12
-
10
-
-
ns
-
ns
-
ns
60
-
12
-
10
-
-
ns
-
ns
-
ns
60
-
12
-
10
-
-
ns
-
ns
-
ns
6
-
-
ns
6
-
-
ns
6
-
-
ns
第 5 页 共 10 页 版本:2012-01-B1
IO=-4mA;VCC=4.5V
IO=-5.2mA;VCC=6.0V
VI=VIH 或 VIL
IO=20μA;VCC=2.0V
VOL
IO=20μA;VCC=4.5V IO=20μA;VCC=6.0V
IO=4mA;VCC=4.5V
IO=5.2mA;VCC=6.0V
ICC
VCC=6.0V;IO=0A;VI==VCC 或GND
Ci
规范值
最小
典型 最大
1.5
-
74HC164 数据手册说明书
74HC1648位串入并出移位寄存器产品说明书说明书发行履历:版本发行时间新制/修订内容2010-01-A 2010-01 更换新模板2012-01-B1 2012-01 增加说明书编号及发行履历1、概 述思扬74HC164是高速CMOS电路,管脚与低功耗肖特基TTL(LSTTL)系列兼容。
74HC164是8位的串入并出、边沿触发的移位寄存器,串入数据由DSA、DSB输入,在每个时钟CP的上升沿数据向右移一位,数据由DSA和DSB相与而成,且在上升沿到来之前已满足了建立时间。
低电平有效的复位信号将直接把寄存器清零而输出为低。
其主要特点如下:●较宽的工作电压:2~6V●相与的串行输入,直接的清零信号●输出能驱动10个LSTTL负载●封装型式:DIP14 / SOP142、功能框图及引脚说明2.3、引脚说明及结构原理图2.4、功能说明h :时钟上升沿前建立起来的高电平电压 L :低电平l :时钟上升沿前建立起来的低电平电压q :对应于时钟上升沿时,前面一个寄存器的状态 ↑:时钟上升沿3、电特性3.1、 极限参数 除非另有规定,T amb =25℃参 数 名 称 符 号条 件最小值最大值单 位电源电压 V CC -0.5 +7 V 输入钳位电流 I IK V I <-0.5V 或V I >V CC +0.5V ±20 mA 输出钳位电流 I OK V O <-0.5V 或V O >V CC +0.5V ±20 mA 输出电流 I O V O = -0.5V ~V CC +0.5V±25 mA VCC 或GND 电流I CC ,I GND±50mA贮存温度 T STG -65 +150 ℃ DIP 封装 245 焊接温度T L10秒SOP 封装250℃3.2、推荐使用条件参数 符号条件最小典型最大单位电源电压 V CC 2.0 5.0 6.0 V 输入电压 V I 0 - V CC V 输出电压 V O 0 - V CC VV CC = 2.0V - - 1000 nsV CC = 4.5V - 6.0 500 ns 输入上升、下降时间tr,tfV CC = 6.0V - - 400 ns工作温度T amb -40 - +85 ℃3.3、电气特性除非另有规定,T amb =25℃规 范 值 参 数 名 称 符 号测 试 条 件最小典型最大单 位直流参数V CC = 2.0V 1.5 - - VV CC = 4.5V 3.15 - - V 高电平输入电压V IHV CC = 6.0V 4.2 - - V V CC = 2.0V - - 0.5 VV CC = 4.5V - - 1.35 V 低电平输入电压V ILV CC = 6.0V -- 1.8 V V I =V IH 或V ILI O =-20μA ;V CC =2.0V1.92.0 - V I O =-20μA ;V CC =4.5V 4.4 4.5 - V I O =-20μA ;V CC =6.0V 5.9 6.0 - V I O =-4mA ;V CC =4.5V3.984.32 - V 高电平输出电压V OHI O =-5.2mA ;V CC =6.0V5.48 5.81 - V V I =V IH 或V ILI O =20μA ;V CC =2.0V- 0 0.1 V I O =20μA ;V CC =4.5V - 0 0.1 V I O =20μA ;V CC =6.0V - 0 0.1 V I O =4mA ;V CC =4.5V - 0.19 0.26 V 低电平输出电压V OLI O =5.2mA ;V CC =6.0V- 0.21 0.26 V 静态电流 I CCV CC =6.0V ;I O =0A ;V I ==V C C或GND-3.9 8μA 输入电容 Ci - 3.5 - pFV M=50%; V I=GND~VCC图1.时钟(CP)到输出端(Qn)的传输延时、时钟脉宽、输出传输时间和最大时钟频率V M=50%; V I=GND~VCC图2.主复位(MR)脉宽,主复位到输出端(Qn)的传输延时、主复位结束到时钟(CP)的响应时间V M=50%; V I=GND~VCC图3. Dn输入前的数据建立时间和保持时间图4.测试开关时间的负载电路注:RT:终端电阻须与信号发生器的输出阻抗匹配CL:负载电容须包括夹具有探针电容4、封装尺寸与外形图4. 1、DIP14外形图与封装尺寸4. 2、SOP14外形图与封装尺寸无锡思扬微电子科技有限公司74HC164数据手册地址:无锡市长江路21-1号创源大厦601室 第11页5、声明及注意事项:5.1、产品中有毒有害物质或元素的名称及含量有毒有害物质或元素部件名称铅(Pb)汞(Hg)镉(Cd)六阶铬(Cr(Ⅵ))多溴联苯(PBBs)多溴联苯醚(PBDEs)引线框○○○○○○塑封树脂○○○○○○芯片○○○○○○内引线○○○○○○装片胶○○○○○○说明○:表示该有毒有害物质或元素的含量在SJ/T11363-2006标准的检出限以下。
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的驱动和应
74HC164的几点说明:
1.74HC164是串行输入,并行输出的;
2.它的并行输出其实是有延时的,只是延时时间小,可以认为是并行输出;
74hc164封装和真值表:
真值表中文解释说明:
H-高电平 L -低电平 X -任意电平↑-低到高电平跳变(上升沿有效)
QA0,QB0,QH0 -规定的稳态条件建立前的电平
QAn,QGn -时钟最近的↑前的电平
看真值表的第三条和第五条:就可以知道,在保持clear为 H clock
为↑状态下,AB都为H时,移位寄存器移入H,而当移位寄存器移入
L时,必须令B为L,而A不受约束。
所以可以把AB断相连再接入单
片机数据端口。
还有一种是A脚直接接高电平,B脚连入单片机数据
端(P2_7)
电路仿真图:
R为clear端, C1/->为clock端,&为A端(1脚)和B端(二角),3~13脚分表为QA~QH,
源程序:
/***74hc164是上升沿有效***/
#include<regx51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar ch;
sbit DAT=P2^7;//A,B端接一块后接入DAT
sbit CLK=P2^6;
char code
seg[16]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0
xff};
/*0~9和全灭状态*/
/*数经过移位寄存器后低位数为高位数,高位数为低位数
如:0000 0011移位以后为1100 0000*/
/*延时一毫秒函数*/
void delay(uint ms)
{
uchar i;
for(;ms!=0;ms--)
for(i=0;i<250;i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
/***把代码发送到移位寄存器***/
void sendchar(ch)
{
uchar i;
for(i=0;i<8;i++)//8位数据传输完毕后才给数码管显示
{
DAT=ch&0x01;//P2_7=0000000x
/*DAT一直保持该状态,等时钟脉冲触发传递数值*/
CLK=0;//下面两句制造一个上升沿
CLK=1;
/*一个seg[]刚好八位,164是串行输入的,分成八位输入*/
ch>>=1;
/*DAT=ch&0x01和ch>>=1的功能是一次取出八位二进制ch的每一
位赋值给74hc164*/
}
}
void main(void)
{
uint m=0;
while(1)
{
sendchar(seg[m]);
if(++m==11) m=0;
delay(200);
}
}。