clock_segment
XBYTE[0xBFFF]
這個語句可以看出,程序的作者用的是總線方式來控制數據流。壹般的51單片機的P0口和P2口***同作為地址總線,而P0口又作為數據總線,想想這樣的板子上壹般都接了鎖存器。上面這句話的意思是在後面的程序中如果遇到clock_segment就當成是XBYTE[0xBFFF],後面的註釋說明這個是數碼管段碼的地址。那麽舉個例子:
數碼管(***陰)的段碼表是:
unsigned
char
code
SMG_DM[10]={
0x3F,/*0*/
0x06,/*1*/
0x5B,/*2*/
0x4F,/*3*/
0x66,/*4*/
0x6D,/*5*/
0x7D,/*6*/
0x07,/*7*/
0x7F,/*8*/
0x6F,/*9*/
};
則如果程序中寫到clock_segment
=
SMG_DM[3];
意思就是XBYTE[0xBFFF]=
SMG_DM[3];
//
往數碼管送數字3的段碼
再說壹點就是在總線方式中單片機的P3.6和P3.7會作為讀寫控制而自動改變電平,目的是配合總線。這種方式可以給單片機擴展很多外設,而且總線自動控制讀寫會提高代碼效率。
下面的屬於動態顯示,但是因為沒有進行消隱操作,會導致顯示亂碼。
具體的消隱操作是,如果妳先送段碼,則在送段碼前將所有的位碼關閉,如果是***陰數碼管,則控制位的引腳全部置1,***陽的則置0即可。如果先送位碼,則要在送之前將所有的段碼關閉,***陰的話則全部置高,***陽的全部置低。消隱時間越短越好,在關閉段碼顯示或位碼顯示後立即送位碼或段碼,不要進行任何的延時,延時是在送數完成之後進行。
在妳的程序中是先送的位碼,則在送位碼之前要進行壹句:clock_segment
=
0xff;
//
如果用的是***陰數碼管。如果用的是***陽數碼管就是:clock_segment
=
0x00;