久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4999|回復: 0
打印 上一主題 下一主題
收起左側

基于LPC1788的12864液晶顯示

[復制鏈接]
跳轉到指定樓層
樓主
完整的實驗文檔下載:
基于LPC1788的液晶顯示.docx (113.49 KB, 下載次數: 17)

實驗二   液晶12864實驗
一、實驗目的
1.熟悉液晶顯示的操作。
2.掌握LPC1788 GPIO口數據輸入、輸出的方法。
3.了解實驗系統板有關12864的硬件機構。
二、實驗內容
1. 閱讀液晶12864文檔,掌握液晶12864顯示的工作原理。
2. 閱讀SN74LVC4245A芯片文檔,掌握SN74LVC4245A芯片的工作原理。
3. 編寫液晶12864顯示程序。
三、實驗設備

硬件部分:PC機(宿主機)、LPC1788實驗板、液晶12864、JLINK仿真器。

軟件部分:PC機WINDOWS系統、MDK KEIL軟件、JLINK仿真調試驅動程序

四、實驗電路
圖 1

圖3
圖1中,當總線收發芯片SN74LVC4245A的DIR引腳復位時,數據由MCU
傳輸給液晶12864;DIR置位時,數據由液晶12864傳輸給MCU。
六、代碼分析


  1. #include "12864.h"

  2. #include "lpc177x_8x.h"



  3. #define LCD_RS_1()     LPC_GPIO2->SET|= (1uL<<13)            /* p2.13 H:Data    L:Instruction  */

  4. #define LCD_RS_0()                  LPC_GPIO2->CLR|= (1uL<<13)                                         

  5. #define LCD_RW_1()              LPC_GPIO1->SET|= (1uL<<26)              /* P1.26    H:Read    L:Write */

  6. #define LCD_RW_0()              LPC_GPIO1->CLR|= (1uL<<26)

  7. #define LCD_E_1()     LPC_GPIO1->SET|= (1uL<<27)      

  8. /*  P1.27    H:Enable  L:Disable */

  9. #define LCD_E_0()                  LPC_GPIO1->CLR|= (1uL<<27)

  10. #define LCD_DIR_1()                LPC_GPIO1->SET|= (1uL<<29)      

  11.                /* P1.29 SN74LV4245A總線收發器方向控制位

  12.                                                         H: 數據由 12864到MCU    L:  數據由 MCU到 12864  */

  13. #define LCD_DIR_0()   LPC_GPIO1->CLR|= (1uL<<29)     



  14. void delay(uint32_t x) //延時 x ms

  15. {

  16.               uint32_t i,j;

  17.               for(i=x;i>0;i--)

  18.                   for(j=110;j>0;j--);

  19. }



  20. void Clr_Screen(void)//清屏函數,注意要經常調用清屏函數,即使在剛剛初始化后;

  21. {

  22.    LCD_Wcmd(0x30);   

  23.    LCD_Wcmd(0x01);

  24. }



  25. void LCD_Init(void)                              //液晶屏初始化,包括CPU的相關端口設置

  26. {                                                                                                                                                                                                                                             

  27. LPC_GPIO1->DIR  |= ((1uL<< 26)|(1uL<< 27)|(1uL<< 29)|(1uL<< 28));            /*     所有管腳配置為數字輸出       */

  28.                  LPC_GPIO2->DIR  |= ((1uL<< 0 )|(1uL<< 1 )|(1uL<< 2 )|(1uL<< 3)|(1uL<< 4 )|(1uL<< 5 )|(1uL<< 6 )|(1uL<< 7 )|(1uL<< 13 ));

  29.                            

  30. LPC_GPIO1->SET  |= ((1uL<< 26)|(1uL<< 27)|(1uL<< 29)|(1uL<< 28));            /*  所有管腳配置為數字輸出   */

  31.                             LPC_GPIO2->SET  |= ((1uL<< 0 )|(1uL<< 1 )|(1uL<< 2 )|(1uL<< 3)|(1uL<< 4 )|(1uL<< 5 )|(1uL<< 6 )|(1uL<< 7 )|(1uL<< 13 ));

  32.                             LCD_DIR_0();                      /*數據由 MCU到 12864     */

  33.                  LCD_Wcmd(0x30);              //8位MPU接口,默認基本指令集,參見12864數據手冊

  34.                  LCD_Wcmd(0x0C);              //開顯示,關光標,不閃爍

  35.                             LCD_Wcmd(0x06); //指定在資料寫入或讀取時,光標的移動方向

  36.                             LCD_Wcmd(0x01);



  37. void check_busy(void)                       //檢測忙狀態

  38. {

  39.                             LPC_GPIO2->SET |= (1uL<< 7);          //DB7狀態位置1

  40.                             delay(1);

  41.                             LCD_DIR_1();                       //數據由 12864  到 MCU

  42.                             LCD_RS_0();

  43.                             LCD_RW_1();                         //讀忙狀態

  44.                             delay(1);

  45.                             LPC_GPIO2->DIR  &= ((0x0<< 0 )&(0x0<< 1 )& (0x0<< 2 )&(0x0<< 3)&(0x0<< 4)& (0x0<< 5)&(0x0<< 6)&(0x0<<7));   //數據口設為輸入         

  46.                             LCD_E_1();

  47.                             while((LPC_GPIO2->PIN&0x00000080)==0x00000080);     //一直等待,直到DB7狀態位為0;

  48.                             LCD_E_0();

  49. LPC_GPIO1->DIR  |= ((1uL<< 26)|(1uL<< 27)|(1uL<< 29)|(1uL<< 28));            /*   所有管腳配置為數字輸出   */

  50.                             LPC_GPIO2->DIR  |= ((1uL<< 0 )|(1uL<< 1 )|(1uL<< 2 )|(1uL<< 3)|(1uL<< 4 )|(1uL<< 5 )|(1uL<< 6 )|(1uL<< 7 )|(1uL<< 13 ));

  51.                             LCD_DIR_0();      

  52. }



  53. void LCD_Wcmd(uint8_t cmd)                 //寫命令

  54. {                           

  55.                             check_busy();

  56.                             delay(1);

  57.                             LCD_DIR_0();

  58.     LCD_RS_0();               

  59.     LCD_RW_0();             //寫命令

  60.                             delay(1);

  61.                            

  62.     LCD_E_1();

  63.                             LPC_GPIO2->MASK=~0x000000FF;

  64.     LPC_GPIO2->PIN=cmd;                 //命令寫到 P2_0~P2_7

  65.                             LPC_GPIO2->MASK=0;

  66.                             delay(50);

  67.     LCD_E_0();

  68.                             delay(50);            //使能的下降沿將信號傳給12864

  69. }



  70. void LCD_Wdata(uint8_t data)   //寫數據,時序參考PDF

  71. {

  72.                             check_busy();

  73.                             LCD_DIR_0();

  74.                  LCD_RS_1();

  75.                             LCD_RW_0();              //寫數據

  76.                            

  77.      LCD_E_1();

  78.                             LPC_GPIO2->MASK=~0x000000FF;

  79.     LPC_GPIO2->PIN=data;                 //數據寫到 P2_0~P2_7

  80.                             LPC_GPIO2->MASK=0;

  81.                             delay(50);

  82.      LCD_E_0();

  83.                             delay(50);            //使能的下降沿將信號傳給12864

  84. }



  85. //注意:中文顯示時空格符或數字ASCII碼必需兩個一起用,標點符號注意中英文

  86. void LCD_Write_Str(uint8_t x, uint8_t y, uint8_t *str) //向某行某列寫字符串

  87. {

  88.     uint8_t addr;

  89.     if(1==x){addr=0x80;}

  90.     if(2==x){addr=0x90;}

  91.     if(3==x){addr=0x88;}

  92.     if(4==x){addr=0x98;}

  93.     addr=addr+y;

  94.                             delay(1);

  95.     LCD_Wcmd(addr);

  96.     while(*str)

  97.     {

  98.                   LCD_Wdata(*str);            

  99.                                           delay(35);            

  100.                                           str++;

  101.     }

  102. }



  103. void Menu(void)                              

  104. {   

  105.               Clr_Screen();

  106.               LCD_Write_Str(1,0,"LPC1788 嵌入式");

  107.               delay(5);

  108.               LCD_Write_Str(2,0,"自動化學院歡迎您");

  109.               delay(5);

  110.               LCD_Write_Str(3,1,"!@#$%^&*");

  111.               delay(5);

  112.               LCD_Write_Str(4,2,"11234567");

  113.               delay(5);

  114. }



  115. int main(void)

  116. {

  117.                             LCD_Init();            

  118.                             Menu();

  119.                 return 0;

  120. }

復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久成人av电影 | 日本亚洲一区 | 久久精品美女 | 亚洲国产精品久久 | 欧美视频偷拍 | 精品视频成人 | 性色av网站 | 日韩福利 | 91视频官网| av在线免费观看网站 | 国产色99 | 一区二区三区在线观看视频 | 亚洲国产欧美日韩 | 天堂av在线影院 | 97caoporn国产免费人人 | 91精品一区二区三区久久久久 | 国产一区二区三区久久久久久久久 | 国产精品无码久久久久 | 色综久久| 麻豆久久久久 | 狠狠夜夜 | 国产一区二区三区久久久久久久久 | a黄在线观看 | 国产精品免费福利 | 亚洲免费观看视频网站 | 日韩一区二区在线视频 | 亚洲免费一区 | 九九免费视频 | 97国产精品 | 中文字幕精品一区 | 亚洲免费婷婷 | 久久久久亚洲精品 | 欧美精品欧美精品系列 | 在线观看黄免费 | 国产欧美精品一区二区 | 日韩精品视频在线播放 | 在线成人av| 一区中文 | 亚洲成人在线免费 | 色999视频 | 婷婷桃色网 |