基于AT89C2051串口的LED數(shù)碼管顯示電路
顯示子程序首先初始化串口,使串口工作在方式0,再讀取顯示緩沖區(qū)內(nèi)的數(shù)據(jù)(顯示緩沖區(qū)主要是用來(lái)存放即將要顯示的數(shù)據(jù)),然后通過(guò)查表的方式找到對(duì)應(yīng)的字形碼,最后把字形碼寫(xiě)入串口寄存器SBUF通過(guò)串口方式0發(fā)送出去。當(dāng)8個(gè)時(shí)鐘脈沖后,字形碼都移至74Ls164的Q0-Q7,數(shù)碼管就顯示相應(yīng)按鍵的編碼。
顯示子程序是怎么將顯示緩沖區(qū)中的數(shù)據(jù)變成相應(yīng)的字形碼呢?具體的方法是將每個(gè)數(shù)字的字形碼以16進(jìn)制數(shù)從小到大的次序依次存放在存儲(chǔ)器中的固定區(qū)域中,構(gòu)成顯示代碼表。當(dāng)要顯示某字符時(shí),把表格的起始地址送入數(shù)據(jù)指針寄存器DPTR中作為基址,將顯示緩沖區(qū)內(nèi)的數(shù)據(jù)作為偏移量送入變址寄存器A,執(zhí)行查表指令“MOVCA,@A+DPTR”,則累加器A中得到的結(jié)果即表格中取出的對(duì)應(yīng)數(shù)字的字形碼。
注意:MOVC指令是將程序存儲(chǔ)器內(nèi)相應(yīng)地址的值賦給累加器A。MOVC指令只有兩種,一種是:MOVCA,@A+DPTR,將程序存儲(chǔ)器中地址為A+ DPTR內(nèi)的數(shù)據(jù)賦給A,例如:累加器A內(nèi)的數(shù)據(jù)為01H,而DPTR內(nèi)的數(shù)據(jù)為2000H,程序存儲(chǔ)器中地址2001H內(nèi)的數(shù)據(jù)為50H,那么執(zhí)行 MOVCA,@A+DPTR指令后,累加器A內(nèi)的數(shù)據(jù)變?yōu)?0H。另一種是MOVCA,@A+PC。將程序存儲(chǔ)器中地址為A+PC內(nèi)的數(shù)據(jù)賦給A。兩種指令的功能基本是一樣。只是第一種中的地址是存放在DPTR中,而第二種是直接使用PC指針的地址。
對(duì)于電路中的74LS164共陰極數(shù)碼管數(shù)據(jù)位和字形的對(duì)應(yīng)關(guān)系如下表。
由于單片機(jī)在以方式0串行發(fā)送數(shù)據(jù)的時(shí)候數(shù)據(jù)從RXD引腳從低位到高位依次輸出,而最先輸出的數(shù)據(jù)經(jīng)過(guò)74LS164串轉(zhuǎn)并后到達(dá)Q7,也就是說(shuō)單片機(jī)內(nèi)的DO通過(guò)串口發(fā)送并經(jīng)過(guò)74LS164后到達(dá)74LS164的Q7腳即數(shù)碼管的A腳,因此在單片機(jī)內(nèi)字型碼與74LS164所對(duì)應(yīng)的字型碼正好相反,所以在單片機(jī)內(nèi)O-8所對(duì)應(yīng)的字型碼分別是:
3FH,06H,5BH,4FH,66H,6DH,7DH,07H.7FH。
DIY機(jī)械鍵盤(pán)相關(guān)社區(qū):機(jī)械鍵盤(pán)DIY
評(píng)論