完整的實驗文檔下載:
基于LPC1788的液晶顯示.docx
(113.49 KB, 下載次數(shù): 17)
2017-2-10 17:07 上傳
點擊文件名下載附件
程序 下載積分: 黑幣 -5
實驗二 液晶12864實驗 一、實驗?zāi)康?/font> 1.熟悉液晶顯示的操作。 2.掌握LPC1788 GPIO口數(shù)據(jù)輸入、輸出的方法。 3.了解實驗系統(tǒng)板有關(guān)12864的硬件機(jī)構(gòu)。 二、實驗內(nèi)容 1. 閱讀液晶12864文檔,掌握液晶12864顯示的工作原理。 2. 閱讀SN74LVC4245A芯片文檔,掌握SN74LVC4245A芯片的工作原理。 3. 編寫液晶12864顯示程序。 三、實驗設(shè)備 硬件部分:PC機(jī)(宿主機(jī))、LPC1788實驗板、液晶12864、JLINK仿真器。 軟件部分:PC機(jī)WINDOWS系統(tǒng)、MDK KEIL軟件、JLINK仿真調(diào)試驅(qū)動程序 四、實驗電路
1.001.jpg (14.93 KB, 下載次數(shù): 121)
下載附件
2017-2-10 21:56 上傳
1.002.jpg (13.32 KB, 下載次數(shù): 128)
下載附件
2017-2-10 21:56 上傳
圖 1
1.003.jpg (30.69 KB, 下載次數(shù): 129)
下載附件
2017-2-10 21:56 上傳
圖3 圖1中,當(dāng)總線收發(fā)芯片SN74LVC4245A的DIR引腳復(fù)位時,數(shù)據(jù)由MCU 傳輸給液晶12864;DIR置位時,數(shù)據(jù)由液晶12864傳輸給MCU。 六、代碼分析
- #include "12864.h"
- #include "lpc177x_8x.h"
-
- #define LCD_RS_1() LPC_GPIO2->SET|= (1uL<<13) /* p2.13 H:Data L:Instruction */
- #define LCD_RS_0() LPC_GPIO2->CLR|= (1uL<<13)
- #define LCD_RW_1() LPC_GPIO1->SET|= (1uL<<26) /* P1.26 H:Read L:Write */
- #define LCD_RW_0() LPC_GPIO1->CLR|= (1uL<<26)
- #define LCD_E_1() LPC_GPIO1->SET|= (1uL<<27)
- /* P1.27 H:Enable L:Disable */
- #define LCD_E_0() LPC_GPIO1->CLR|= (1uL<<27)
- #define LCD_DIR_1() LPC_GPIO1->SET|= (1uL<<29)
- /* P1.29 SN74LV4245A總線收發(fā)器方向控制位
- H: 數(shù)據(jù)由 12864到MCU L: 數(shù)據(jù)由 MCU到 12864 */
- #define LCD_DIR_0() LPC_GPIO1->CLR|= (1uL<<29)
-
- void delay(uint32_t x) //延時 x ms
- {
- uint32_t i,j;
- for(i=x;i>0;i--)
- for(j=110;j>0;j--);
- }
-
- void Clr_Screen(void)//清屏函數(shù),注意要經(jīng)常調(diào)用清屏函數(shù),即使在剛剛初始化后;
- {
- LCD_Wcmd(0x30);
- LCD_Wcmd(0x01);
- }
-
- void LCD_Init(void) //液晶屏初始化,包括CPU的相關(guān)端口設(shè)置
- {
- LPC_GPIO1->DIR |= ((1uL<< 26)|(1uL<< 27)|(1uL<< 29)|(1uL<< 28)); /* 所有管腳配置為數(shù)字輸出 */
- LPC_GPIO2->DIR |= ((1uL<< 0 )|(1uL<< 1 )|(1uL<< 2 )|(1uL<< 3)|(1uL<< 4 )|(1uL<< 5 )|(1uL<< 6 )|(1uL<< 7 )|(1uL<< 13 ));
-
- LPC_GPIO1->SET |= ((1uL<< 26)|(1uL<< 27)|(1uL<< 29)|(1uL<< 28)); /* 所有管腳配置為數(shù)字輸出 */
- LPC_GPIO2->SET |= ((1uL<< 0 )|(1uL<< 1 )|(1uL<< 2 )|(1uL<< 3)|(1uL<< 4 )|(1uL<< 5 )|(1uL<< 6 )|(1uL<< 7 )|(1uL<< 13 ));
- LCD_DIR_0(); /*數(shù)據(jù)由 MCU到 12864 */
- LCD_Wcmd(0x30); //8位MPU接口,默認(rèn)基本指令集,參見12864數(shù)據(jù)手冊
- LCD_Wcmd(0x0C); //開顯示,關(guān)光標(biāo),不閃爍
- LCD_Wcmd(0x06); //指定在資料寫入或讀取時,光標(biāo)的移動方向
- LCD_Wcmd(0x01);
-
- void check_busy(void) //檢測忙狀態(tài)
- {
- LPC_GPIO2->SET |= (1uL<< 7); //DB7狀態(tài)位置1
- delay(1);
- LCD_DIR_1(); //數(shù)據(jù)由 12864 到 MCU
- LCD_RS_0();
- LCD_RW_1(); //讀忙狀態(tài)
- delay(1);
- LPC_GPIO2->DIR &= ((0x0<< 0 )&(0x0<< 1 )& (0x0<< 2 )&(0x0<< 3)&(0x0<< 4)& (0x0<< 5)&(0x0<< 6)&(0x0<<7)); //數(shù)據(jù)口設(shè)為輸入
- LCD_E_1();
- while((LPC_GPIO2->PIN&0x00000080)==0x00000080); //一直等待,直到DB7狀態(tài)位為0;
- LCD_E_0();
- LPC_GPIO1->DIR |= ((1uL<< 26)|(1uL<< 27)|(1uL<< 29)|(1uL<< 28)); /* 所有管腳配置為數(shù)字輸出 */
- LPC_GPIO2->DIR |= ((1uL<< 0 )|(1uL<< 1 )|(1uL<< 2 )|(1uL<< 3)|(1uL<< 4 )|(1uL<< 5 )|(1uL<< 6 )|(1uL<< 7 )|(1uL<< 13 ));
- LCD_DIR_0();
- }
-
- void LCD_Wcmd(uint8_t cmd) //寫命令
- {
- check_busy();
- delay(1);
- LCD_DIR_0();
- LCD_RS_0();
- LCD_RW_0(); //寫命令
- delay(1);
-
- LCD_E_1();
- LPC_GPIO2->MASK=~0x000000FF;
- LPC_GPIO2->PIN=cmd; //命令寫到 P2_0~P2_7
- LPC_GPIO2->MASK=0;
- delay(50);
- LCD_E_0();
- delay(50); //使能的下降沿將信號傳給12864
- }
-
- void LCD_Wdata(uint8_t data) //寫數(shù)據(jù),時序參考PDF
- {
- check_busy();
- LCD_DIR_0();
- LCD_RS_1();
- LCD_RW_0(); //寫數(shù)據(jù)
-
- LCD_E_1();
- LPC_GPIO2->MASK=~0x000000FF;
- LPC_GPIO2->PIN=data; //數(shù)據(jù)寫到 P2_0~P2_7
- LPC_GPIO2->MASK=0;
- delay(50);
- LCD_E_0();
- delay(50); //使能的下降沿將信號傳給12864
- }
-
- //注意:中文顯示時空格符或數(shù)字ASCII碼必需兩個一起用,標(biāo)點符號注意中英文
- void LCD_Write_Str(uint8_t x, uint8_t y, uint8_t *str) //向某行某列寫字符串
- {
- uint8_t addr;
- if(1==x){addr=0x80;}
- if(2==x){addr=0x90;}
- if(3==x){addr=0x88;}
- if(4==x){addr=0x98;}
- addr=addr+y;
- delay(1);
- LCD_Wcmd(addr);
- while(*str)
- {
- LCD_Wdata(*str);
- delay(35);
- str++;
- }
- }
-
- void Menu(void)
- {
- Clr_Screen();
- LCD_Write_Str(1,0,"LPC1788 嵌入式");
- delay(5);
- LCD_Write_Str(2,0,"自動化學(xué)院歡迎您");
- delay(5);
- LCD_Write_Str(3,1,"!@#$%^&*");
- delay(5);
- LCD_Write_Str(4,2,"11234567");
- delay(5);
- }
-
- int main(void)
- {
- LCD_Init();
- Menu();
- return 0;
- }
-
復(fù)制代碼 |