51單片機(jī)74HC164串口控制數(shù)碼管顯示
注意脈沖寬度:
本51單片機(jī)用的是12MHZ晶振,每條指令最小執(zhí)行時(shí)間1uS》》1ns ,可以根據(jù)時(shí)序圖隨便使用.
原理圖:
程序代碼:
完整的keil工程文件下載地址:http://www.51hei.com/f/k164.rar
ORG 00H ;程序起始地址00H
START:本文引用地址:http://m.butianyuan.cn/article/201612/324309.htm
MOV 50H,#9 ;立即數(shù)9放入50H單元 第一個(gè)數(shù)碼管顯示9
MOV 51H,#4 ;立即數(shù)4放入51H單元 第二個(gè)數(shù)碼管顯示4
MOV R0,#50H ;R0=50
MOV R1,#60H ;R1=60
MOV R2,#2
DP0:
MOV DPTR,#TABLE ;將碼表首地址給DPTR指針
MOV A,@R0 ;將50H單元中的9給A
MOVC A,@A+DPTR ;查表得到(9+碼表首地址)合成的地址中的數(shù)給累加器A
MOV @R1,A ;把立即數(shù)9的段碼,放入 60H單元中
INC R1 ;R1=61H
INC R0 ;R0=51H
DJNZ R2,DP0 ;如果R2不等于0,則跳轉(zhuǎn)到DP0
//---------------從上面計(jì)算可得到: (60H)=10H,(61H)=19H
MOV R0,#60H ;R0=60重新建立映射關(guān)系
MOV R1,#2 ;數(shù)碼管有2個(gè)段碼
DP1:
MOV R2,#8 ;一個(gè)71HC164移位寄存器需要移動(dòng)8次,以產(chǎn)生并口輸出數(shù)據(jù)給數(shù)碼管
MOV A,@R0 ;(60H)中的數(shù)9的段碼,賦給累加器A
DP2:
RLC A ;帶進(jìn)位標(biāo)志的左移操作
MOV P2.0,C ;串行輸出一位段碼數(shù)據(jù)
CLR P2.1 ;
SETB P2.1 ;來個(gè)上升沿以產(chǎn)生移位時(shí)鐘, 每次來這個(gè)脈沖,移位寄存器上的數(shù)往后面移動(dòng)一位,原來A=1,
;來個(gè)脈沖后B=1,在來個(gè)脈沖后,C=1,以此類推。。。。。
DJNZ R2,DP2 ;判斷8位段碼是否輸出完整
INC R0 ;下一個(gè)需要輸出的段碼地址加1
DJNZ R1,DP1 ;判斷2個(gè)段碼是否輸出完畢
JMP $ ;程序停在此處
TABLE: ;數(shù)碼管碼表
DB 40H,79H,24H,30H,19H ;0,1,2,3,4
DB 12H,02H,78H,00H,10H ;5,6,7,8,9
END
評(píng)論