面板是微機(jī)儀器的重要組成部分。面板主要包括顯示器和鍵盤,通過面板對(duì)系統(tǒng)進(jìn)行操作。一般的單片機(jī)控制儀表的面板均含有數(shù)碼管、發(fā)光管和按鍵,本文的儀器面板就是針對(duì)這個(gè)領(lǐng)域而開發(fā)的。
在儀器面板的設(shè)計(jì)中,鍵盤顯示電路的設(shè)計(jì)一般采用三種方式,第一種為并行口動(dòng)態(tài)掃描方式,該方式硬件簡(jiǎn)單、軟件編程方便,與主板的信號(hào)連線多;第二種為串行口靜態(tài)掃描方式,此方式使用串行芯片多,與主板的信號(hào)連線少;第三種為串行口動(dòng)態(tài)掃描方式,此方式具有硬件簡(jiǎn)單、與主板信號(hào)連線少的優(yōu)點(diǎn),一般采用專用的串行口鍵盤顯示芯片設(shè)計(jì)?紤]到專用芯片成本較高,我們用普通芯片設(shè)計(jì)了串行口動(dòng)態(tài)掃描方式的儀器面板。

鍵盤顯示電路如附圖。兩片74LS164擴(kuò)展了2個(gè)并行口。第一片用作段碼輸出,接共陽(yáng)數(shù)碼管的段選位,同時(shí)也接發(fā)光管的陰極;第二片用作位選輸出,通過三極管的驅(qū)動(dòng)接數(shù)碼管的共陽(yáng)極,同時(shí)也驅(qū)動(dòng)發(fā)光管的公共陽(yáng)極,這樣就實(shí)現(xiàn)了數(shù)碼管和發(fā)光管顯示的動(dòng)態(tài)掃描。位選口也參與鍵盤的列掃描,作為按鍵檢測(cè)的行引出。
該面板的信號(hào)線共有3根。其中CLK為時(shí)鐘脈沖信號(hào),DAT為串行數(shù)據(jù)信號(hào),KEY為鍵盤檢測(cè)信號(hào)。另外還需提供5V電源線和地線。
該面板的驅(qū)動(dòng)程序主要實(shí)現(xiàn)將顯示緩沖區(qū)disbuf[4]中的段碼掃描輸出到數(shù)碼管,同時(shí)檢測(cè)鍵盤,將按下按鍵的鍵碼存在key單元中的功能。函數(shù)w164()用于將數(shù)據(jù)由模擬串口發(fā)送到74LS164的并口,而display()則通過調(diào)用w164()實(shí)現(xiàn)動(dòng)態(tài)掃描顯示,同時(shí)檢測(cè)KEY得到按鍵的鍵碼。該程序還提供數(shù)碼管顯示0~F的段碼轉(zhuǎn)換表,供用戶使用。該程序已設(shè)計(jì)成頭文件,在應(yīng)用程序中可以直接調(diào)用,在用戶程序中要對(duì)三個(gè)信號(hào)線進(jìn)行定義,為它們分配I/O資源。
//skeydis.H文件
char lptr.Disbuf[4];
char key;
char code distab[16]= //段選碼表
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0x77,0x7c,0x39,0x5e,0x79,0x71};
void w164(char x) //串并轉(zhuǎn)換
{
char i;
for(i=0;i<8;i++)
{
x=x<<1;DAT=CY;
CLK=0;CLK=1;
}
}
void display() //鍵盤顯示掃描程序
{
char i;
char code disptr[4]= //位選碼表
{0xfe,0xfd,0xfb,0xf7};
lptr=(lptr+1)%4; //移動(dòng)掃描指針
w164(0xff);w164(0xff);//熄滅顯示器
w164(disptr[LPTR]); //送位選碼
w164(disbuf[LPTR]); //送段選碼
if(。耍牛伲耄澹剑蹋校裕遥; //檢測(cè)按鍵
//鍵碼為12,3,4
}