4 軟件實現
軟件開發環境為ARM SDT V2.5。程序分為兩部分:首先為ARM初始化,使用匯編語言書寫。然后才是用C語言書寫的顯示主程序。
下面分別將兩部分結合原代碼略加說明。
匯編語言部分:
IOPMOD EQU 0x3FF5000 ;定義IO口模式寄存器
IOPDATA EQU 0x3FF5008 ;定義IO口數據寄存器
IMPORT Main
AREA Init,CODE,READONLY
ENTRY
LDR R0, =0x3FF0000
LDR R1, =0xE7FFFF80 ;配置SYSCFG,片內4Kcache,4KSRAM
STR R1, [R0]
LDR SP, =0x3FE1000 ;SP指向4KSRAM的尾地址,堆棧向下生成
LDR R0, =0X3FF5000
LDR R1, =0X000002A8 ;設置IO3,IO5,IO7,IO9為輸出模式
STR R1,[R0]
BL Main
B 。
END
C語言部分:因篇幅有限,這里就不完整的給出源程序了,只列出幾個子函數。
#include “typDef.h”
#define IOPMOD (*(volatile unsigned *)0x03FF5000)
#define IOPDATA (*(volatile unsigned *)0x03FF5008)
/*定義子函數如下*/
void clr_lcd_rst(void){ IOPDATA &=0XFDFF;} 清零復位引腳
void set_lcd_rst(void){ IOPDATA |=0X0200;} 置位復位引腳
void clr_lcd_sclk(void){IOPDATA &=0XFFF7;} 時鐘端置低
void set_lcd_sclk(void){IOPDATA |=0X0008;} 時鐘端置高
void clr_lcd_sid(void){IOPDATA &=0XFF7F;} 串行輸出數據0
void set_lcd_sid(void){IOPDATA |=0X0080;} 串行輸出數據1
void clr_lcd_cs(void){IOPDATA &=0XFFDF;} 清零使能端
void set_lcd_cs(void){IOPDATA |=0X0020;} 置位使能端
void print_led_p0(void){IOPDATA |=0X0001;} 使led0亮
void print_led_p1(void){IOPDATA |=0X0002;} 使led1亮
void off_led_p0(void){IOPDATA &=0XFFFE;} 使led0滅
/*液晶初始化部分*/
void Init_lcd(void)
{set_lcd_rst();
delay(4);
write_lcd(0,0x01); 清除顯示
delay(4);
write_lcd(0,0x0c); 顯示狀態設置
delay(4);
write_lcd(0,0x30); 設置為8位控制接口
delay(4);
}
圖2:串行寫操作時序圖
程序嚴格按照串行的寫操作時序(如圖2所示)。此外應該注意當模塊在接受指令前,微處理器必須先確認模塊內部處于非忙碌狀態,即讀取BF標志時BF需為0,方可接受新的指令;如果在送出一個指令前并不檢查BF標志,那么在前一個指令和這個指令中間必須延遲一段較長的時間,即是等待前一個指令確實執行完成,指令執行的時間請參考指令表中的個別指令說明。
5結束語:
本文介紹的方法可以實現漢字字符,英文字母,圖形顯示。除了上述的靜態顯示方式外,還可以通過編程來實現字符的動態顯示及一些特效(如字符的移動,漸變,閃爍)顯示。達到了與內置LCD控制器相同的功能。
評論
查看更多