利用另一個輸出埠四個旗標控制4顆7節管中其中一顆送電顯示,七節管碼輸出埠配合輸出被選到的那一顆七節管的七節管碼。那一個瞬間,被選到的七節管會顯示它該顯示的數值,其它三顆則暗滅不顯示。如果掃瞄後慢,4顆七節管會輪流顯示各自的數值,如果掃瞄夠快,人眼所看到的就會是,4顆各自以1/4亮度顯示各自數值的效果。
• 參考以下電路圖以及七節管及40PIN IO接腳圖,完成本實驗硬體接線。電路的工作原理是,每一顆7節管上均有一個電晶體做為開關,當接到40PIN IO控制旗標接腳的PNP電晶體(B極)被輸出旗標拉到LO時,電晶體會導通。這顆電晶體所接到的共陽七節管會依七節管所送來之七節管碼點亮顯示其數字。對於其他三顆接到HI旗標輸出的七節管,則因為電晶體未導通,而不顯示。
掃瞄驅動4顆七節管顯示驅動電路圖
• 七節管顯示函式:配合PORTB3:0位元的高低電位控制,每一次維持一顆電晶體導通,其它均為不通,則一次可點亮一顆七節管,顯示一個位數,假使寫一個函式,這個函式每一次被呼叫時,會輪流點亮不同位數的七節管。若輪流點亮速度夠高,高過人的視覺暫留時間時,我們看到就是四顆均點亮,只是亮度剩下1/4。依據上述原理,我們要寫一個函式,內部有一個永久變數記錄顯示位數,每次函式被呼叫到,即進一個位數,並改變顯示新的位數。由於我們希望這個函式可以被主程式輪詢呼叫,或則固定週期時間中斷呼叫,這個函式採用廣域變數做為傳參。因為有四個位數,因此傳參為4個字元,為了讓七節管除了顯示0到9共10種數字以外,也可以顯示其它七節管可顯示的符號,我們使用ASCII碼來表示要顯示的值。以下為虛擬碼。
CharDisplay[4] /*4個字元矩陣內部為要顯示字的ASCII碼*/
CharSEGTABLE[2][12]
/*七節管碼表,第一行為ASCII,第二行為七節管碼,共12個值由0到9,然後是'E'及'-' */
digit_n=digit_n+1; /*下一次輸出位數進位*/
ifdigit_n > 3 digit_n=0;/*若高於萬位,回到個位數*/
呼叫DIO_fpt()輸出PORTB3:0四個旗標,其中只有digit_n為0其他為1。
For(j=0;j<12;j++)
if(Display[digit_n]==SEGTABLE[1][j])
//找到了要顯示字元的七節管碼
SEG7CODE==SEGTABLE[2][j],
//則取出表中的七節管碼
endfor
呼叫REGPUT()由PORTD輸出SEG7CODE
endif