 |
註:這是一款不帶字庫的液晶。 【運行效果】 
|
 |
【程序文件列表】 
|
 |
【MyC.nc】 module MyC { uses interface Boot; } implementation { #define _BV(n) (1 << (n)) #define RST_0 P2OUT &= ~_BV(0) #define RST_1 P2OUT |= _BV(0) #define CE_0 P2OUT &= ~_BV(1) #define CE_1 P2OUT |= _BV(1) #define DC_0 P2OUT &= ~_BV(3) #define DC_1 P2OUT |= _BV(3) #define DIN_0 P2OUT &= ~_BV(6) #define DIN_1 P2OUT |= _BV(6) #define BL_1 P6OUT |= _BV(6) // 接ADC6接線柱即可 #define SCLK_0 P6OUT &= ~_BV(7) // 接ADC7接線柱即可 #define SCLK_1 P6OUT |= _BV(7) const unsigned char chA[] = {0x00, 0x7c, 0x12, 0x11, 0x12, 0x7c}; // 字符'A' void LCDWrite(unsigned char dat) { unsigned char i; CE_0; for (i = 0; i < 8; i++) { if (dat & 0x80) DIN_1; else DIN_0; SCLK_0; dat <<= 1; SCLK_1; } CE_1; } // 寫入命令 void LCDWriteCmd(unsigned char cmd) { DC_0; LCDWrite(cmd); } // 寫入數據 void LCDWriteData(unsigned char dat) { DC_1; LCDWrite(dat); } // 設置顯示位置 void LCDSetPos(unsigned char x, unsigned char y) { LCDWriteCmd(0x40 | y); LCDWriteCmd(0x80 | x); } // 清屏 void LCDClear(void) { unsigned char i, j; LCDSetPos(0, 0); for (i = 0; i < 6; i++) { for (j = 0; j < 84; j++) LCDWriteData(0x00); } } // 初始化LCD void LCDInit(void) { // 復位 RST_0; _NOP(); _NOP(); _NOP(); _NOP(); RST_1; LCDWriteCmd(0x21); // 使用擴展命令設置LCD模式 LCDWriteCmd(0xc8); // 設置顯示亮度 LCDWriteCmd(0x06); // 溫度校正 LCDWriteCmd(0x13); // 1:48 LCDWriteCmd(0x20); // 使用基本命令, 且水平尋址 LCDClear(); /* 設定顯示模式 */ LCDWriteCmd(0x0c); // 正常顯示 //LCDWriteCmd(0x0d); // 反色顯示 //LCDWriteCmd(0x08); // 顯示空白 //LCDWriteCmd(0x09); // 顯示全黑 CE_0; BL_1; // 開背光 } // 顯示字符A void LCDWriteChar(unsigned char *ch) { unsigned char i; for (i = 0; i < 6; i++) LCDWriteData(ch[i]); } void delay(void) { unsigned int i; for (i = 0; i < 40000u; i++); } event void Boot.booted(void) { LCDInit(); LCDSetPos(8, 0); LCDWriteChar(chA); // 顯示字符A // 逐漸填滿剩下的區域 while (1) { LCDWriteData(0xff); delay(); } } }
|
 |
【MyAppC.nc】 configuration MyAppC { } implementation { components MyC, MainC; MyC -> MainC.Boot; } 【Makefile】 COMPONENT = MyAppC include $(MAKERULES)
|
 |
【命令】 編譯:make telosb 燒寫:make telosb reinstall 編譯並燒寫:make telosb install
|
 |
|
 |
也可以直接用杜邦線連接,並通過USB接口接到電腦上,可邊下載邊運行程序。 不過,液晶屏上的內容可能會因為USB電壓問題而不能正常顯示,例如下圖中奇數行的像素就完全無法顯示:   
|
 |
編譯時有一個關於const的警告,在LCDWriteChar函數的參數裏加上const關鍵詞即可消除: // 顯示字符A void LCDWriteChar(const unsigned char *ch) 不過這個問題不大,因為在函數裏面沒有對ch進行操作。
|
 |
把液晶的電源線接到電源模塊的5V引腳上,並把顯示亮度改為0xa7,也可以提高顯示質量: LCDWriteCmd(0xa7); // 設置顯示亮度 
|