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