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