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

合集下载

74HC164N单片机驱动程序

74HC164N单片机驱动程序

74HC164N单片机驱动程序
74HC164N+单片机驱动程序
74HC系列IC广泛应用在数字电路上,主要在单片机电路比较多。

其中,74HC164N是8位移位锁存器,一般用
来驱动数码管,因为有时候单片机的I/O口数量有限,
有时会出现单片机I/O不够用的情况,这个时候就需要
外接IC来扩展。

74HC164只需两根I/O口就可以控制8
位输出,特别适应数码管、点阵屏、液晶等的驱动。


两根线一根是CLK、一根是DATA,只要结合时序,两根
线就可以输出512种状态。

下面是C程序;
void sendcode(uchar SC)
{
uchar i;
for(i=0;i;>;=1;
}
}
这个是74HC164N的驱动程序,注意,要将CLR接高电平,,A 和B接数据脚。

如果要发送位码,只需调用这个
子程序就行了,例如,发送0x03,只要写sencode(0x03),就OK 了,实际使用是非常简单的。

基于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 能否动态驱动多位数码管void display() //数码显示{SCON=0; //初始化串行口方式SBUF=dispcode[ge];while(!TI);TI=0;led4=0;delay(2);led4=1;SBUF=dispcode[shi];while(!TI);TI=0;led3=0;delay(2);led3=1;SBUF=dispcode[bai];while(!TI);TI=0;led2=0;delay(2);SBUF=dispcode[qian];while(!TI);TI=0;led1=0;delay(2);led1=1;SBUF=dispcode[wan];while(!TI);TI=0;led0=0;delay(2);led0=1;}74ls164数码管驱动(第二个程序)#define clock PORTD.1#define date PORTD.0#define clock_en DDRD.1#define date_en DDRD.0unsigned char lab[2][10]={ 0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09,0x02,0x9E,0x24,0x0C,0x98,0x48,0x40,0x1E,0x00,0x08};void send(unsigned char w){unsigned char i;for(i=0;i<8;i++){clock=0;date=w&1;}return ;}void xianshi(long w,unsigned char weishu){unsigned char i,j;bit flag=0;clock_en=1;date_en=1;if(w<0) { flag=1; w=-w; }for(i=0;i<8;i++) //8次循环{if(w!=0){if(i!=weishu) {j=lab[0][w%10];}else {j=lab[1][w%10];}}if(w==0){ if(i==0) j=0x03 ; //当数值直接是0if(i<=weishu){if(i<weishu) j=0x03;if(i==weishu) j=0x02;}else{if(flag) j=0xdf; //show 负号else {if(i!=0) j=0xff;} //oxff就不显示flag=0;}}send(j);w=w/10; //每显示一位,除10}return ;}51单片机接74ls164驱动数码管的C程序#include <regx52.h>sbit sclk=P2^0;sbit sda=P2^1;sbit slck=P2^2;int tab[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; void delay(){int i,j;for(i=0;i<255;i++)for(j=0;j<80;j++);}void bit_dat(bit i){ sclk=0;sda=i;sclk=1;}void dat(char i){slck=0;bit_dat((bit)(tab[i]&0x80));bit_dat((bit)(tab[i]&0x40));bit_dat((bit)(tab[i]&0x20));bit_dat((bit)(tab[i]&0x10));bit_dat((bit)(tab[i]&0x08));bit_dat((bit)(tab[i]&0x04));bit_dat((bit)(tab[i]&0x02));bit_dat((bit)(tab[i]&0x01));slck=1;}main(){ int i;while(1){for(i=0;i<10;i++){dat(i);delay();}i=0;}程序如下:/**************************************//* 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、、90x74,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)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;}}/****************************************/******************************************************************************* 第二个程序74HC164是个移位寄存器,以下程序是我用过的,绝对没问题:其中ShowData为164数据脚,ShowClck为164时钟脚;void Show_164(unsigned char _ShowValue){unsigned char Count0;for(Count0=0;Count0<=7;Count0++){if((_ShowValue&0x80)==0x80)ShowData=1;elseShowData=0;_ShowValue<<=1;ShowClck=0;_nop_();_nop_();ShowClck=1;}}基于51单片机的简易数字频率计要求使用定时/计数器1作定时用,定时1s;定时/计数器0作计数器用,被计数的外部脉冲从P3.4(T0)接入。

74HC164 串入、并出8 位移位寄存器

74HC164 串入、并出8 位移位寄存器

8 位串入、并出移位寄存器1. 概述74HC164、74HCT164 是高速硅门 CMOS 器件,与低功耗肖特基型 TTL (LSTTL) 器件的引脚兼容。

74HC164、74HCT164 是 8 位边沿触发式移位寄存器,串行输入数据,然后并行输出。

数据通过两个输入端(DSA 或 DSB)之一串行输入;任一输入端可以用作高电平使能端,控制另一输入端的数据输入。

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

时钟 (CP) 每次由低变高时,数据右移一位,输入到 Q0, Q0 是两个数据输入端(D SA 和 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输出GND7 地(0 V)CP 8时钟输入(低电平到高电平边沿触发)/M/R 9中央复位输入(低电平有效)Q4~Q710~13输出VCC14正电源罗74HC164中文资料(功能,真值表,引脚图及电气参数介绍)SN54HC164,/SN74HC164是8位移位寄存器,当其中一个(或二个)选通串行输入端的低电平禁止进入新数据,并把第一个触发器在下一个时钟脉冲来后复位到低电平时,门控串行输入端(A 和B)可完全控制输入数据。

74ls164与单片机的串并转换(串转并-串进并出)

74ls164与单片机的串并转换(串转并-串进并出)

74ls164与单片机的串并转换(串转并\串进并出)
74LS164串转并实验本实验是用74LS164把输入的串行数转换成并行数输出,74LS164为串行输入并行输出移位寄存器,其引脚图及功能如下:
A、B:串行输入端;
QA~QH:并行输出端;
CLR:清零端,低电平有效;
CLK:时钟脉冲输入端,上升沿有效。

实验采用单片机串行工作方式0和P1端口两种方式串行输出数据。

串行口工作方式0时,数据为8位,从RXD端输出,TXD端输出移位信号,其波特率固定为Fosc/12。

在CPU 将数据写入SBUF寄存器后,立即启动发送。

待8位数据输完后,硬件将状态寄存器的TI位置1,TI必须由软件清零。

串行口工作方式0数据/时钟是自动移位输出,用P1端口输出数据时,要编程位移数据,每输出一个数据位,再输出一个移位脉冲。

内容及步骤:
本实验需要用到单片机最小系统(F1区)、十六位逻辑电平显示(I4区)和74LS164(G3区)。

1、选用89C51单片机最小应用系统模块,用八位数据线连接74LS164的并行输出JD5G 与十六位逻辑电平显示模块JD2I,将74LS164的串行输入端A/B(1和2脚)接到RXD 上,CLK接到TXD上,CLR接INT0。

2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。

3、打开KeiluVision2仿真软件,首先建立本实验的项目文件,接着添加TH23_74164.ASM 源程序,进行编译,直到编译无误。

4、全速运行程序,观察发光二极管亮灭情况,先右移动两次,再左移动两次,然后闪烁两次。

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

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

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

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

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

文章编号: 100816210758 文章分类: 电路 > 电子元件

点击: ... 关键词: 74HC164

文章来源: 百合电子工作室收集整理

摘要: 74HC164应用实例:驱动数码管的两个实例分别提供了汇编源程序和C源程序...

实例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=125 8. CLR RF; 9. ;;;;;此处填写250Us处理程序 10. BS WKREG,T500US 11. ;;;;;;;;;;;;;;;;;;;;;;;;; 12. DJZ R1MS 13. JMP INTEXT; 14. MOV A,@4 15. MOV R1MS,A;重置 16. BS WKREG,T1MS 17. ;;;;;;;此处填写1ms处理程序 18. 19. ;;;;;;;;;;;;;;;;;;;;;;;;;; 20. DJZ R20MS 21. JMP INTEXT; 22. MOV A,@20 23. MOV R20MS,A;重置 24. ;;;此处填写1秒处理程序 25. BS WKREG,T20MS 26. ;;;;;;;;;;;;;; 27. DJZ R1S 28. JMP INTEXT; 29. MOV A,@50 30. MOV R1S,A; 31. ;;;;;;;;; 32. INC NUMBER 33. MOV A,NUMBER 34. SUB A,@10 35. JBS SR,2 36. JMP INTEXT 37. MOV A,@0 38. MOV NUMBER,A 39. 40. 41. INTEXT: 42. MOV A,TEMPA; 43. RETI;;;;;;;;;;;;;;;;;;;;; 44. 45. 46. 47. 48. 49. ;显示部分: 50. 51. ;==============TXDATA============== 52. TXDATA: 53. BS P5,CC1 54. MOV A,@8 55. MOV DATALOP,A; 56. TXLOP: 57. BC WKREG,T500US 58. BS P5,CLK;clk=高 59. NOP; 60. NOP 61. JBS DATA_BUF,7 62. JMP $+3 63. BS P5,DATA; 64. JMP $+2 65. BC P5,DATA 66. DD1MS: JBS WKREG,T500US 67. JMP $-1 68. BC P5,CLK 69. BC WKREG,T500US 70. JBS WKREG,T500US 71. JMP $-1; 72. RLC DATA_BUF 73. DJZ DATALOP 74. JMP TXLOP 75. ;;;;;;;;;; 76. BC WKREG,T500US 77. BS P5,CLK;clk=高 78. BC WKREG,T500US 79. JBS WKREG,T500US 80. JMP $-1; 81. BC P5,CLK 82. ;;;;;;;; 83. BC P5,CC1 84. 85. RET;;;;;;; 86. 87. ;数据查表 88. ;===============DSPTBL============ 89. DSPTBL: ADD PC,A 90. RETL @0B01000000;0 91. RETL @0B01111001;1 92. RETL @0B00100100;2 93. RETL @0B00110000;3 94. RETL @0B00011001;4 95. RETL @0B00010010;5 96. RETL @0B00000010;6 97. RETL @0B01111000;7 98. RETL @0B00000000;8 99. RETL @0B00010000;9 100. 101. 102. ;循环体部分; 103. 104. ;;;;;;;;;;主程序;;;;;;;;;;; 105. MLOOP: 106. MOV A,NUMBER 107. CALL DSPTBL 108. MOV DATA_BUF,A 109. CALL TXDATA 110. BC WKREG,T1MS 111. JBS WKREG,T1MS 112. JMP $-1 113. 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 4. 5. #define uint unsigned int 6. 7. #define uchar unsigned char 8. 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.

相关文档
最新文档