74hc164驱动控制8个数码管程序

数码管

8人已加入

描述

74HC164设备概述

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

74HC16474HC164、74HCT164 是高速硅门 CMOS 器件,与低功耗肖特基型 TTL (LSTTL) 器件的引脚兼容。74HC164、74HCT164 是 8 位边沿触发式移位寄存器,串行输入数据,然后并行输出。数据通过两个输入端(DSA 或 DSB)之一串行输入;任一输入端可以用作高电平使能端,控制另一输入端的数据输入。两个输入端或者连接在一起,或者把不用的输入端接高电平,一定不要悬空。

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

主复位 (MR) 输入端上的一个低电平将使其它所有输入端都无效,同时非同步地清除寄存器,强制所有的输出为低电平。

数码管

数码管

数码管,也称作辉光管,是一种可以显示数字和其他信息的电子设备。玻璃管中包括一个金属丝网制成的阳极和多个阴极。大部分数码管阴极的形状为数字。管中充以低压气体,通常大部分为氖加上一些汞和/或氩。给某一个阴极充电,数码管就会发出颜色光,视乎管内的气体而定,一般都是橙色或绿色。

数码管也称LED数码管,不同行业人士对数码管的称呼不一样,其实都是同样的产品。

按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。

八只74HC164控制八只数码管程序

数码管

ORG0000H

JMPMAIN

ORG0013H

AJMPBreak_2

MAIN: ;主程序

MOVSP,#60H;设定堆栈指针

MOVTCON,04H

MOVIE,84H

MOVSCON,#00H;设定串口为0方式,同步移位寄存器,波特率Fosc/12,0:单机对单机,接收控制禁止

START:;

JNBP3.2,DISPLAY_09

CALLDISPLAY_0;调用显示子程序

CALLDELAY;调用延时子程序

DISPLAY_0:;显示子程序

MOVR7,#2

MOVR6,#2

MOVR5,#2

L0:

MOVA,#0;先发送十位数的LED数码管段选码

MOVDPTR,#TABLE;十位数的LED数码管段选码表地址送数据寄存器指针DPTR

MOVCA,@A+DPTR;选择十位数计数器COUNT2,第二个LED数码管段选码送A

MOVSBUF,A;发送选择十位数计数器COUNT2,第二个LED数码管段选码

L0_1:

JBCTI,L0_2;发送控制位TI=1,发送完毕跳转到DATA1,并将TI清0

JMPL0_1;发送控制位TI=0,未发送完毕跳转到LOOPD0,继续检测TI位

L0_2:

DJNZR7,L0

MOVR7,#2

MOVA,#0;先发送十位数的LED数码管段选码

MOVDPTR,#TABLE_1;十位数的LED数码管段选码表地址送数据寄存器指针DPTR

MOVCA,@A+DPTR;选择十位数计数器COUNT2,第二个LED数码管段选码送A

MOVSBUF,A;发送选择十位数计数器COUNT2,第二个LED数码管段选码

L0_3:

JBCTI,L0_4;发送控制位TI=1,发送完毕跳转到DATA1,并将TI清0

JMPL0_3;发送控制位TI=0,未发送完毕跳转到LOOPD0,继续检测TI位

L0_4:DJNZR6,L0

L0_5:

MOVA,#0;先发送十位数的LED数码管段选码

MOVDPTR,#TABLE;十位数的LED数码管段选码表地址送数据寄存器指针DPTR

MOVCA,@A+DPTR;选择十位数计数器COUNT2,第二个LED数码管段选码送A

MOVSBUF,A;发送选择十位数计数器COUNT2,第二个LED数码管段选码

L0_6:

JBCTI,L0_7;发送控制位TI=1,发送完毕跳转到DATA1,并将TI清0

JMPL0_6;发送控制位TI=0,未发送完毕跳转到LOOPD0,继续检测TI位

L0_7:

DJNZR5,L0_5

RET

DISPLAY_09:

MOVCOUNT1,#0;个位数计数器COUNT1置0

MOVCOUNT2,#0;十位数计数器COUNT2置2

MOVCOUNT3,#0;百位数计数器COUNT3置8

MOVCOUNT4,#0;百位数计数器COUNT3置8

MOVCOUNT5,#0;百位数计数器COUNT3置8

MOVCOUNT6,#0;百位数计数器COUNT3置8

MOVCOUNT7,#0;百位数计数器COUNT3置8

MOVCOUNT8,#0;百位数计数器COUNT3置8

START_09:

CALLDISPLAY;调用显示子程序

CALLDELAY;调用延时子程序

W1:

INCCOUNT1;个位数计数器COUNT1加1

MOVA,COUNT1

CJNEA,#10,START_09;检测个位数是否变化10次,如果不够10次,跳转到程序开始显示处START

W10:

INCCOUNT2;十位数计数器COUNT2加1

MOVCOUNT1,#0;个位数计数器COUNT1置0

MOVA,COUNT2;

CJNEA,#6,START_09;检测个位数是否变化10次,如果不够10次,跳转到程序开始处

W100:

INCCOUNT3;百位数计数器COUNT3加1

MOVCOUNT2,#0;十位数计数器COUNT2置0

MOVCOUNT1,#0;个位数计数器COUNT1置0

MOVA,COUNT3;

CJNEA,#1,START_09;检测个位数是否变化10次,如果不够10次,跳转到程序开始处

W1000:

INCCOUNT4;千位数计数器COUNT4加1

MOVCOUNT3,#0;百位数计数器COUNT3置0

MOVCOUNT2,#0;十位数计数器COUNT2置0

MOVCOUNT1,#0;个位数计数器COUNT1置0

MOVA,COUNT4;

CJNEA,#10,START_09;检测个位数是否变化10次,如果不够10次,跳转到程序开始处

W10000:

INCCOUNT5;万位数计数器COUNT5加1

MOVCOUNT4,#0;千位数计数器COUNT4置0

MOVCOUNT3,#0;百位数计数器COUNT3置0

MOVCOUNT2,#0;十位数计数器COUNT2置0

MOVCOUNT1,#0;个位数计数器COUNT1置0

MOVA,COUNT5;

CJNEA,#6,START_09;检测个位数是否变化10次,如果不够10次,跳转到程序开始处

W100000:

INCCOUNT6;十万位数计数器COUNT6加1

MOVCOUNT5,#0;千位数计数器COUNT5置0

MOVCOUNT4,#0;千位数计数器COUNT4置0

MOVCOUNT3,#0;百位数计数器COUNT3置0

MOVCOUNT2,#0;十位数计数器COUNT2置0

MOVCOUNT1,#0;个位数计数器COUNT1置0

MOVA,COUNT6;

CJNEA,#1,START_09;检测个位数是否变化10次,如果不够10次,跳转到程序开始处

W1000000:

INCCOUNT7;百万位数计数器COUNT7加1

MOVCOUNT6,#0;千位数计数器COUNT6置0

MOVCOUNT4,#0;千位数计数器COUNT4置0

MOVCOUNT3,#0;百位数计数器COUNT3置0

MOVCOUNT2,#0;十位数计数器COUNT2置0

MOVCOUNT1,#0;个位数计数器COUNT1置0

MOVA,COUNT7;

CJNEA,#10,START_09;检测个位数是否变化10次,如果不够10次,跳转到程序开始处

W10000000:

INCCOUNT8;万万位数计数器COUNT7加1

MOVCOUNT7,#0;万位数计数器COUNT7加1

MOVCOUNT6,#0;千位数计数器COUNT6置0

MOVCOUNT4,#0;千位数计数器COUNT4置0

MOVCOUNT3,#0;百位数计数器COUNT3置0

MOVCOUNT2,#0;十位数计数器COUNT2置0

MOVCOUNT1,#0;个位数计数器COUNT1置0

MOVA,COUNT8;

CJNEA,#10,L1;检测个位数是否变化10次,如果不够10次,跳转到程序开始处AJMPW0

L1:AJMPSTART

W0:

MOVCOUNT1,#0;个位数计数器COUNT1置0

MOVCOUNT2,#0;十位数计数器COUNT2置0

MOVCOUNT3,#0;百位数计数器COUNT3置0

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分