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