74LS164动态扫描数码管与proteus传真及C程序

合集下载

基于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在单片机中的使用

74LS164在单片机中的使用

74LS164在单片机中的使用在单片机系统中,如果并行口的IO资源不够,那么我们可以使用74LS164来扩展并行IO口,节约单片机IO资源。

74LS164是一个串行输入并行输出的移位寄存器,并带有清除端。

74LS164的引脚可以查看数据手册。

proteus仿真图和代码附上。

#include;#define HIGH1#define LOW#define SEG_PORTP0sbit DATA = P0^4;sbit CLK = P0^5;unsigned char Timer0IRQEvent = 0;unsigned char Time1SecEvent = 0;unsigned int TimeCount = 0;unsigned char SegCurPosition = 0;code unsigned char SegCode[10] ={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07, ~0x7F,~0x6F};code unsigned char SegPosition[4] = {0xFE,0xFD,0xFB,0xF7};unsigned char SegBuf[4] = {0};void LS164_DATA(unsigned char x) {if(x){DATA = 1;}else{DATA = 0;}}void LS164_CLK(unsigned char x){if(x){CLK = 1;else{CLK = 0;}}/************************************************ ***********函数名称:LS164Send*输入:byte单个字节*输出:无*功能:74LS164发送单个字节************************************************* **********/void LS164Send(unsigned char byte){unsigned char j;for(j=0;j;= 4)SegCurPosition = 0;}}/************************************************ ***********函数名称:TimerInit*输入:无*输出:无*功能:定时器初始化************************************************* **********/void TimerInit(void){TH0 = (65536 - 5000)/256;TL0 = (65536 - 5000)%256;TMOD = 0x01;}/************************************************ ***********函数名称:Timer0Start*输入:无*输出:无*功能:定时器启动************************************************* **********/void Timer0Start(void){TR0 = 1;ET0 = 1;}/************************************************ ***********函数名称:PortInit*输入:无*输出:无*功能:I/O初始化************************************************* **********/void PortInit(void){P0 = P1 = P2 = P3 = 0xFF;}/************************************************ ***********函数名称:main*输入:无*输出:无*功能:函数主题************************************************* **********/void main(void){PortInit();TimerInit();Timer0Start();SegRefreshDisplayBuf(); EA = 1;while(1){if(Timer0IRQEvent){Timer0IRQEvent = 0;if(Time1SecEvent){Time1SecEvent = 0;if(++TimeCount >;= 9999){TimeCount = 0;}SegRefreshDisplayBuf();}SegDisplay();}}}/************************************************ ***********函数名称:Timer0IRQ*输入:无*输出:无*功能:定时器中断函数************************************************* **********/void Timer0IRQ(void) interrupt 1{static unsigned int cnt = 0;TH0 = (65536 - 5000)/256;TL0 = (65536 - 5000)%256;Timer0IRQEvent = 1;if(++cnt >;= 200){cnt = 0;Time1SecEvent = 1;}}。

数码管的动态扫描与驱动

数码管的动态扫描与驱动

数码管的动态扫描与驱动数码管的基本原理 关于数码管,⼀个单个的数码管可以看做是多个led灯的集合,如下图所⽰其中的8和。

都是LED组成的,通过引脚上电即可点亮不同的LED然后组成不同的数字,这个过程在数码管的设计中叫做段选。

在多个数码管的情况下,需要选择哪个数码管点亮,这个在数码管设计中称作位选,多个数码管可以通过位选和段选完成电⼦时钟设计等功能。

下⾯通过项⽬对于多个数码管进⾏点亮,让其在开发板上显⽰不同的数据。

预计实验现象: 在quartus的in system source and probes editor ⼯具,输⼊需要显⽰在数码管上的数据,则数码管显⽰对应数据。

相关知识点: 数码管动态扫描的实现、in system source and probes editor调试⼯具的使⽤。

设计过程: 1、数码管动态扫描实现。

2、In system sources and probes edit (ISSP)调试⼯具的使⽤ 3、4输⼊查找表,6位输出。

4、分频模块,从系统时钟分频得到1KHz的扫描时钟 5、6选⼀多路选择器,选择为当前数码管的位置。

驱动模块逻辑电路图:下⾯就是照着逻辑电路图来编写程序了。

创建⼯程,添加⽂件module segment(disp_data,rst_n,clk,en ,sel,seg);input clk;//50Minput rst_n;input en;input [23:0]disp_data;output [5:0]sel;//位选(控制哪个数码管亮)output reg [6:0]seg;//段选(控制数码管显⽰什么数据)//分频器的代码,这⾥为了完整,不做多个⽂件来写模块了reg[14:0] diviter_cnt; //25000-1reg clk_1k;reg [5:0]sel_r;reg [3:0]data_temp;//待显⽰数据缓存//⽣成⼀个分频计数器计数always@(posedge clk or negedge rst_n)if (!rst_n)diviter_cnt<=15'd0;else if (!en)diviter_cnt<=15'd0;else if (diviter_cnt==24999)diviter_cnt<=15'd0;elsediviter_cnt<=diviter_cnt+1'b1;//1k扫描时钟⽣成always@(posedge clk or negedge rst_n)if (!rst_n)clk_1k<=1'b0;else if (diviter_cnt==24999)clk_1k<=~clk_1k; //⼤型设计中,这种产⽣分频器的⽅法是不可以的//位选移位寄存器always@(posedge clk_1k or negedge rst_n)if (!rst_n)sel_r<=6'b000_001;else if(sel_r==6'b100_000)sel_r<=6'b000_001;elsesel_r<=sel_r<<1;//设计⼀个6选⼀多路器always@(*)case(sel_r)6'b000_001:data_temp=disp_data[3:0];6'b000_010:data_temp = disp_data[7:4];6'b000_100:data_temp=disp_data[11:8];6'b001_000:data_temp=disp_data[15:12];6'b010_000:data_temp=disp_data[19:16];6'b100_000:data_temp=disp_data[23:20];defaultdata_temp<=4'b0000;endcase//译码器always@(*)case (data_temp)4'h0:seg=7'b1000000;//这⾥按数码管码表来4'h1:seg=7'b1111001;4'h2:seg=7'b0100100;4'h3:seg=7'b0110000;4'h4:seg=7'b0011001;4'h5:seg=7'b0010010;4'h6:seg=7'b0000010;4'h7:seg=7'b1111000;4'h8:seg=7'b0000000;4'h9:seg=7'b0010000;4'ha:seg=7'b0001000;4'hb:seg=7'b0000011;4'hc:seg=7'b1000110;4'hd:seg=7'b0100001;4'he:seg=7'b0000110;4'hf:seg=7'b0001110;endcase//⼆选⼀多路器assign sel=(en)?sel_r:6'b000_000;endmodule编写testbench⽂件来进⾏仿真`timescale 1ns/1ns`define clk_period 20module HXE_tb;reg Clk; //50Mreg Rst_n;reg En; //数码管显⽰使能,1使能,0关闭reg [31:0]disp_data;wire [7:0] sel;//数码管位选(选择当前要显⽰的数码管)wire [6:0] seg;//数码管段选(当前要显⽰的内容)HXE8 HXE8(.Clk(Clk),.Rst_n(Rst_n),.En(En),.disp_data(disp_data),.sel(sel),.seg(seg));initial Clk = 1;always#(`clk_period/2) Clk = ~Clk;initial beginRst_n = 1'b0;En = 1;disp_data = 32'h12345678;#(`clk_period*20);Rst_n = 1;#(`clk_period*20);#20000000;disp_data = 32'h87654321;#20000000;disp_data = 32'h89abcdef;#20000000;$stop;endendmodule点击仿真运⾏,可以看到sel和seg的输出与我们期望的是⼀样的,即位选进⾏移位操作,段选显⽰123456和abcdef。

单片机课程设计——74LS164实现串入并出

单片机课程设计——74LS164实现串入并出

目录1. 题目设计要求..................................................................2.系统的硬件设计..................................................................2.1系统采用的元器件..........................................................2.2器件选择..................................................................2.2.1 AT89C51概述及引脚功能..............................................2.2.2 74164的技术指标及工作原理..........................................3.系统硬件电路图设计..............................................................3.1振荡电路及复位电路设计....................................................3.2电路原理图................................................................ 4.系统的软件设计.................................................................4.1编程语言选择..............................................................4.2发送字符串模块设计........................................................4.4源代码....................................................................4.5编译结果..................................................................5.系统仿真调试 ...................................................................5.1仿真调试的过程............................................................5.2仿真调试的结果............................................................6.总结 ........................................................................... 7参考文献........................................................................1.题目设计要求用8051单片机的串行口外接串入并出的芯片74164扩展并行输出口,控制一组发光二极管,使发光二极管从下至上延时轮流显示。

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显示出来。

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

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

4HC164应用实例:驱动数码管两例(电路图和源程序)文章编号:8文章分类:电路>电子元件点击:... 关键词: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 @0B;091. RETL @0B;192. RETL @0B;293. RETL @0B;394. RETL @0B;495. RETL @0B;596. RETL @0B;697. RETL @0B;798. RETL @0B;899. RETL @0B;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在实际应用中驱动数码管常用的方式分动态扫描和静态驱动。

protues课件数码管动态扫描电路的仿真实验

protues课件数码管动态扫描电路的仿真实验

段码线占用一个8位I/O口,而位选控制使用一个I/O口
的4位口线。
13
图6-4 4位8段LED动态显示的原理电路

工作原理:动态显示就是通过段码线向显示器(所有
的)输出所要显示字符的段码。每一时刻,只有一位位 选线有效,其他各位都无效。逐位地每隔一定时间轮流
点亮各位显示器(扫描方式),由于LED数码管的余辉
型、“米”字型和“点阵”型LED显示器,如图10-2所
示。厂家也可根据用户的需要定做特殊字型的数码管。
图6-2
其他各种字型的LED显示器
8
6.1.2 LED数码管显示器的两种显示方式

LED数码管有静态显示和动态显示两种显示方式。
9
1.LED静态显示方式

静态显示指无论多少位LED数码管,都同时处于显示状态。
电路连接:数码管工作于静态显示方式时,各位的共阴极
(或共阳极)连接在一起并接地(或接+5V);每位的段码 线(a~dp)分别与一个8位的I/O口锁存器输出相连。

如果送往各个LED数码管所显示字符的段码一经确定,则
相应I/O口锁存器锁存的段码输出将维持不变,直到送入另 一个字符的段码为止。

优点:静态显示无闪烁,亮度较高,软件控制比较容易。
数码管显示单个数字
如图6-6所示为共阳极数码管。
7段数码管有段码和位码两个不同控制端。8
个数码管的段码a,b,c,d,e,f,g,dp并联在一起, 通过上拉电阻接到了51单片机的P0口,而每 一位数码管的位码则通过三极管分别接到51 单片机的P2口,其中P2口接三极管的基极, 发射极接到数码管的位码选择端。 电路符合数码管动态显示的原理。
11

74ls164程序

74ls164程序

89c2051总共才有20个引脚所以在实现复杂功能的单片机应用中节约针脚的使用显得尤为重要我最近在做单片机项目时已开始客户要求的功能少所以采用89c2051的p1口直接驱动两个led数码管(外加两个扫描控制脚p3_3 p3_4)这样光显示部分就占用了9个脚开始的几个控制系统还可以满足需要可是后来客户要一次加三个功能1.水平开关输入2.缺水开关输入 3.状态报警输出因为之前做的程序20个脚正好全部用上所以这次再加功能再不更换单片机芯片的情况下就只能把显示电路改为其他方式考虑到成本问题采用常用的74ls164驱动led比较实用(74LS164 是TTL 八位串行入/并行输出移位寄存器)经过两天的研究现在终于完成了该项目的程序编写工作再此次编写过程中我发现网上讲的大多数都是74ls164 汇编程序的例子c语言的几乎没有所以在此奉上74ls164的c语言的源代码其中驱动共阴数码管和驱动共阳数码管时程序是不同的这一点其他地方还有书上并未明确说明所以在这要重点提一下。

c51源码和Proteus仿真程序下载请点击下面链接(压缩包包括共阴、共阳源文件及仿真文件)#include "reg52.h"#define uint unsigned int#define uchar unsigned charsbit DAT=P1^1;sbit CLK=P1^2;uchar code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0xe7f,0xff,0x00};//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;}。

74LS164动态扫描数码管与proteus传真及C程序

74LS164动态扫描数码管与proteus传真及C程序

74ls164 为8 位移位寄存器,其主要电特性的典型值如下:当清除端(CLEAR)为低电平时,输出端(QA-QH)均为低电平。

串行数据输入端(A,B)可控制数据。

当A、B任意一个为低电平,则禁止新数据输入,在时钟端(CLOCK)脉冲上升沿作用下Q0 为低电平。

当A、B 有一个为高电平,则另一个就允许输入数据,并在CLOCK 上升沿作用下决定Q0 的状态。

引脚功能:CLOCK :时钟输入端CLEAR:同步清除输入端(低电平有效)A,B :串行数据输入端QA-QH:输出端极限值电源电压7V输入电压…… 5.5V工作环境温度74164….. -55~125℃74164…… -0~70℃储存温度….. -65℃~150真值表:时序图:建议操作条件:应用实例:C程序:#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit DAT=P2^3;//A,B端接一块后接入DATsbit CLK=P2^2;sbit WA1=P2^4;sbit WA2=P2^5;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f}; //共阴数码管无小数点void delayms(uint time){uchar i,k;for(k=time;k>0;k--)for(i=110;i>0;i--);}void sendchar(ch)uchar i;for(i=0;i<8;i++){CLK=0;DAT=ch&0x01;CLK=1;ch>>=1;}}void display(uint temp) {uint shi,ge;shi=temp/10;ge=temp%10;sendchar(table[shi]);WA1=0;W A2=1;delayms(1);WA1=1;sendchar(table[ge]);WA1=1;W A2=0;delayms(1);WA2=1; }void main(){while(1){display(12);}}。

74HC164级联实现四位数码管显示电路

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等设计仿真软件。

I0口驱动74LS164数码管静态显示程序

I0口驱动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数码模块就可以编程应用了。

四位数码管动态扫描

四位数码管动态扫描

数码管学习数码管控制要点:扫描时间不能太短,太短数码管会只显示8,太长就不能看到几个数码管同时亮的感觉,不同的需要会选不同的扫描时间。

举个实例:在proteus里仿真如下,连接电路图。

注意:在proteus里可以不连51的最小系统,但是必须双击单片机在Edit Component设置晶振为12M或其它的。

使用P1口注意其内部没有集成上拉电阻,必须外接10K电阻。

51程序:/*四位数码管动态显示*/#include<reg52.h>#define uint unsigned int#define uchar unsigned charuint num;uchar code table[]={ //共阴数码管0~90x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};void delayms(uint z){ //延时毫秒函数uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void display(uint date){ //四位数码管显示函数uint a,b,c,d;a=date/1000;P0=0x0E;P2=table[a];delayms(10);b=date%1000/100;P0=0x0d;P2=table[b];delayms(10);c=date%100/10;P0=0x0b;P2=table[c];delayms(10);d=date%10;P0=0x07;P2=table[d];delayms(10);}void main(){ //主函数while(1){if(num==10000)num=0;display(num++);}}。

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进行初始化。

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

74ls164 为8 位移位寄存器,其主要电特性的典型值如下:
当清除端(CLEAR)为低电平时,输出端(QA-QH)均为低电平。

串行数据输入端(A,B)可控制数据。

当A、B任意一个为低电平,则禁止新数据输入,在时钟端(CLOCK)脉冲上升沿作用下Q0 为低电平。

当A、B 有一个为高电平,则另一个就允许输入数据,并在CLOCK 上升沿作用下决定Q0 的状态。

引脚功能:
CLOCK :时钟输入端
CLEAR:同步清除输入端(低电平有效)
A,B :串行数据输入端
QA-QH:输出端
极限值
电源电压7V
输入电压…… 5.5V
工作环境温度74164….. -55~125℃74164…… -0~70℃储存温度….. -65℃~150
真值表:
时序图:
建议操作条件:
应用实例:
C程序:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DAT=P2^3;//A,B端接一块后接入DAT
sbit CLK=P2^2;
sbit WA1=P2^4;
sbit WA2=P2^5;
uchar code table[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f}; //共阴数码管无小数点void delayms(uint time)
{
uchar i,k;
for(k=time;k>0;k--)
for(i=110;i>0;i--);
}
void sendchar(ch)
uchar i;
for(i=0;i<8;i++)
{
CLK=0;
DAT=ch&0x01;
CLK=1;
ch>>=1;
}
}
void display(uint temp) {
uint shi,ge;
shi=temp/10;
ge=temp%10;
sendchar(table[shi]);
WA1=0;W A2=1;
delayms(1);WA1=1;
sendchar(table[ge]);
WA1=1;W A2=0;
delayms(1);WA2=1; }
void main()
{
while(1)
{
display(12);
}
}。

相关文档
最新文档