基于TMS320F2812的液晶顯示的設(shè)計(jì)
void checkBF()//檢查BF位,判斷LCD 是否忙
{
unsigned int check
EALLOW;
GpioMuxRegs.GPAMUX.all=0xff00;//設(shè)EVA前8腳為通用I/O口,其他為保留功能
GpioMuxRegs.GPBMUX.all=0xff00;//設(shè)GPIOB0~2為通用I/O口,其他為保留功能
GpioMuxRegs. GPBDIR.all=0x00ff;// 設(shè)GPIOB0~2為輸出引腳
EDIS;
GpioDataRegs. GPBDAT.bit.GPIOB0=0;
GpioDataRegs. GPBDAT.bit.GPIOB1=1;//讀BF的狀態(tài),RS=0,R/W=1
do {
GpioDataRegs. GPBDAT.bit.GPIOB2=1;//E=1
Check=GpioDataRegs. GPADAT.all;
Delay1();//延時(shí)140ns以上
GpioDataRegs. GPBDAT.bit.GPIOB2=0;//E=0
check=0x80check;//當(dāng)?shù)?位,即BF為0時(shí)才可以操作
}while(!check= =0x00);
}
void InitialLCD()//液晶初始化
{
writeINS(0x30);//LCD選擇為8位并行數(shù)據(jù)傳輸,不擴(kuò)充指令
Delay2(5);//延時(shí)大于100us
writeINS(0x0E);//開顯示,開游標(biāo),關(guān)反白
Delay2(5);//延時(shí)大于100us
writeINS(0x01);//清屏顯示
Delay2(500);//延時(shí)大于10ms
writeINS(0x06);//DDRAM的地址計(jì)數(shù)器(AC)加1
Delay2(5);//延時(shí)大于100us
}
void Delay1()//延時(shí)子程序
{
Int i;
for ( i=0;i5;i++ );
}
void Delay2(unsigned int nTime)
{
int ii,jj,kk=0;
for ( ii=0;iinTime;ii++ )
{
for ( jj=0;jj215;jj++ )
{
kk++;
}
}
}
欲在ST7920中某一個(gè)位置顯示中文字符時(shí),應(yīng)先設(shè)定顯示字符位置,即先設(shè)定顯示地址,再寫入中文字符編碼。當(dāng)字符編碼為兩字節(jié)時(shí),應(yīng)先寫入高位字節(jié),再寫入低位字節(jié)。ST7920的字符顯示地址RAM地址從80H到9FH,與4行8列共32個(gè)字符顯示區(qū)域一一對(duì)應(yīng)。另外,顯示ASCII字符過程與顯示中文字符過程相同,不過在顯示連續(xù)字符時(shí),只須設(shè)定一次顯示位置,有模塊自動(dòng)對(duì)地址加1指向下一個(gè)字符位置,否則,顯示的字符中將會(huì)有一個(gè)空ASCII字符位置。本文以從字庫中顯示“液晶”字樣為例,給出顯示“液晶”字符的主程序如下:
main()
{
InitialLCD();//初始化液晶
writeINS(0x80);//設(shè)定顯示地址為首行首列
writeDATA (0xD2);
writeDATA (0xBA);//顯示“液”
writeDATA (0xBE);
writeDATA (0xA6);//顯示“晶”
for(;;);
}
3 結(jié)論
從上面的應(yīng)用介紹可看出,本文所采用的方法不需要增加硬件,電路結(jié)構(gòu)簡單,只占用了TMS320F2812的多達(dá)56個(gè)I/O引腳中的11個(gè)。所以,對(duì)剩余較多不用I/O引腳的DSP系統(tǒng)完全可以采用這種接口控制方法,絕大多數(shù)下是可以滿足要求的。通過該設(shè)計(jì)我們可以說,采用TMS320F2812模擬外部慢速設(shè)備的時(shí)序實(shí)現(xiàn)與其外設(shè)的接口這種方法是一種簡單有效的方法,并為各種系統(tǒng)顯示、慢速外設(shè)的接口設(shè)計(jì)提供了一種可以借鑒的方法。
評(píng)論