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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2335|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

1602字符液晶工作于8位模式直接驅(qū)動(dòng)顯示Proteus仿真+單片機(jī)程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
1602字符液晶工作于8位模式直接驅(qū)動(dòng)顯示,有仿真文件,附件找

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  1. //-----------------------------------------------------------------
  2. //  名稱: 1602字符液晶工作于8位模式直接驅(qū)動(dòng)顯示
  3. //-----------------------------------------------------------------
  4. //  說(shuō)明: 本例液晶實(shí)現(xiàn)了四項(xiàng)演示功能,分別為水平滾動(dòng),帶光標(biāo)顯示隨機(jī)
  5. //        算術(shù)式,全碼表字符顯示,CGRAM自定義字符顯示.
  6. //         
  7. //-----------------------------------------------------------------
  8. #include <reg51.h>
  9. #include <string.h>
  10. #include <stdlib.h>
  11. #include <stdio.h>
  12. #define INT8U  unsigned char
  13. #define INT16U unsigned int
  14. sbit SW1 = P3^0;                //水平水平滾動(dòng)顯示
  15. sbit SW2 = P3^1;                //帶光標(biāo)顯示隨機(jī)算術(shù)式
  16. sbit SW3 = P3^2;                //全碼表字符顯示
  17. sbit SW4 = P3^3;                //CGRAM自定義字符顯示
  18. INT8U code msg[] =                //待滾動(dòng)顯示的字符串(字符串最前面加了16個(gè)空格)
  19. "                you are going to spend even more time working on the schematic ?";
  20. //-----------------------------------------------------------------
  21. extern delay_ms(INT16U x);
  22. extern void Initialize_LCD();
  23. extern void Write_LCD_Data(INT8U dat);
  24. extern void Write_LCD_Command(INT8U cmd);
  25. extern void Busy_Wait();
  26. extern void LCD_ShowString(INT8U,INT8U,INT8U *);
  27. //-----------------------------------------------------------------
  28. //自定義CGRAM字符及圖標(biāo)點(diǎn)陣數(shù)據(jù)(共兩組,每組字符不超過(guò)8個(gè))
  29. INT8U code CGRAM_Dat1[][8] = //7個(gè)圖標(biāo)符號(hào)(高度由1~7橫遞增的矩形)
  30. {        {0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00},        //1橫
  31.         {0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x00},        //2橫
  32.         {0x00,0x00,0x00,0x00,0x1F,0x1F,0x1F,0x00},        //3橫
  33.         {0x00,0x00,0x00,0x1F,0x1F,0x1F,0x1F,0x00},        //4橫
  34.         {0x00,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x00},        //5橫
  35.         {0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x00},        //6橫
  36.         {0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x00}         //7橫
  37. };
  38. INT8U code CGRAM_Dat2[][8] = //5個(gè)漢字字符
  39. {        {0x08,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x00},        //年
  40.         {0x0F,0x09,0x0F,0x09,0x0F,0x09,0x13,0x00},        //月
  41.         {0x0F,0x09,0x09,0x0F,0x09,0x09,0x0F,0x00},        //日
  42.         {0x1F,0x0A,0x1F,0x0A,0x0A,0x0A,0x12,0x00},        //開(kāi)
  43.         {0x0A,0x1F,0x04,0x1F,0x04,0x0A,0x11,0x00}         //關(guān)
  44. };
  45. //-----------------------------------------------------------------
  46. // 將自定義字符點(diǎn)陣寫(xiě)入CGRAM
  47. //-----------------------------------------------------------------
  48. void Write_CGRAM(INT8U g[][8], INT8U n)
  49. {
  50.         INT8U i,j;                          
  51.     Write_LCD_Command(0x40);                   //設(shè)置CGRAM地址為0x40
  52.     for (i = 0; i < n; i++)                           //n個(gè)自定義字符
  53.     for (j = 0; j < 8; j++)                           //每個(gè)字符8字節(jié)點(diǎn)陣數(shù)據(jù)
  54.     Write_LCD_Data(g[i][j]);                   //寫(xiě)入CGRAM
  55. }

  56. //-----------------------------------------------------------------
  57. // SW1: 水平滾動(dòng)顯示字符串
  58. //-----------------------------------------------------------------
  59. void H_Scroll_Display()
  60. {
  61.         INT16U i;
  62.     Write_LCD_Command (0x0C);                              //開(kāi)顯示,關(guān)光標(biāo)
  63.     LCD_ShowString(0,0,"LCD1602 DEMO - 1") ;          //第0行顯示標(biāo)題
  64.     LOOP1:
  65.     for (i = 0; i <= strlen(msg); i++)              //滾動(dòng)輸出所有字符
  66.     {   LCD_ShowString(1,0,msg + i);                //msg+i實(shí)現(xiàn)取字符指針遞增
  67.         delay_ms(50);if (SW1) return;                                //未置于SW1位置時(shí)立即返回
  68.     }   
  69.         delay_ms(1000); goto LOOP1;                                        //顯示完所有字符后暫停1s然后繼續(xù)
  70. }

  71. //-----------------------------------------------------------------
  72. // SW2: 帶光標(biāo)顯示隨機(jī)算術(shù)式
  73. //-----------------------------------------------------------------
  74. void Cursor_Display()
  75. {        
  76.     INT8U i; int a,b; char disp_buff[17];
  77.     Write_LCD_Command (0x0C);                                                         //開(kāi)顯示,關(guān)光標(biāo)
  78.     LCD_ShowString(0,0,"LCD1602 DEMO - 2");              //第0行顯示標(biāo)題
  79.     LCD_ShowString(1,0,"              ");                //清空第1行(輸出16個(gè)空格)
  80.     Write_LCD_Command(0x0F);                                                         //開(kāi)顯示,開(kāi)光標(biāo),光標(biāo)閃爍
  81.     srand(TH0);                                                                                     //用THO作為隨機(jī)種子
  82.     while (1)
  83.     {   if (SW2) return;                                                                  //未置于SW2位置時(shí)立即返回
  84.         a = rand() % 100;                                                                 //產(chǎn)生不超過(guò)100的隨機(jī)數(shù)a,b;
  85.         b = rand() % 100;                                                                 
  86.                 sprintf(disp_buff,                                                                 // 生成算術(shù)式及運(yùn)算結(jié)果字符串
  87.             "%2d + %2d = %2d",a,b,a+b);
  88.         Write_LCD_Command(0xC0);                                                 //顯示位置定位于第1行開(kāi)始位置
  89.         for (i = 0; i < 16; i++)                                                 //循環(huán)逐個(gè)輸出算術(shù)式字符
  90.         {   if (disp_buff[i])  Write_LCD_Data(disp_buff[i]);
  91.             else                           Write_LCD_Data(' ');
  92.             delay_ms(100);
  93.         }
  94.                 delay_ms(200);                                                                         //顯示完一個(gè)算術(shù)式后暫停200ms
  95.         LCD_ShowString(1,0,"                         ");             //清空該行(輸出16個(gè)空格)
  96.         }
  97. }

  98. //-----------------------------------------------------------------
  99. // SW3: 全碼表字符顯示
  100. //-----------------------------------------------------------------
  101. void Show_All_Inter_Chars()
  102. {
  103.         INT8U i,j = 0;                                                         
  104.         Write_LCD_Command(0x0C);                                   //開(kāi)顯示,關(guān)光標(biāo)         
  105.         LCD_ShowString(0,0,"LCD1602 DEMO - 3");    //第 0行顯示標(biāo)題
  106.         LCD_ShowString(1,0,"                ");       //第1 行清空(輸出16個(gè)空格)
  107.         LOOP3:                                                                  
  108.         Write_LCD_Command(0xC0);                                        //顯示位置定位于第1行開(kāi)始位置
  109.     //從全碼表顯示,范圍為0x20~0xFF,超過(guò)0xFF后溢出為0x00,循環(huán)結(jié)束
  110.         for (i = 0x20; i != 0x00; i++)         
  111.         {   if (i >= 0x80 && i <= 0x9F) continue; //跳過(guò)空白區(qū)字符
  112.             if ((++j) % 16 == 0)                                                //判斷是否顯示滿一行
  113.             {   delay_ms(500);                                                //滿一行時(shí)延時(shí)500ms        
  114.                 LCD_ShowString(1,0,"                "); //清空該行        
  115.                 Write_LCD_Command(0xC0);                        //顯示位置定位于第1行開(kāi)始位置        
  116.                 j=0;                                                                        //顯示字符計(jì)數(shù)變量清零
  117.         }
  118.                 Write_LCD_Data(i);                                        //在當(dāng)前位置顯示編碼為i的字符
  119.                 delay_ms(20);                                                        //顯示一個(gè)字符后短延時(shí)40ms        
  120.                 if (SW3) return;                                                 //未置于SW3位置時(shí)立即返回
  121.         }
  122.         delay_ms(500);                                                //一趟演示后延時(shí)500ms
  123.         goto LOOP3;                                                                //繼續(xù)全碼表字符顯示
  124. }

  125. //-----------------------------------------------------------------
  126. // SW4: CGRAM自定義字符顯示
  127. //-----------------------------------------------------------------
  128. void Display_CGRAM_Chars()
  129. {
  130.         INT8U i,j = 0;                                          
  131.         Write_LCD_Command(0x0C);                            //開(kāi)顯示,關(guān)光標(biāo)  
  132.         LCD_ShowString(0,0,"LCD1602 DEMO - 4");            //第0行顯示標(biāo)題
  133.         LOOP4:                                                                                //第1組自定義CGRAM字符演示
  134.         LCD_ShowString(1,0,"                ");         //第1行清空(輸出16個(gè)空格)
  135.         Write_CGRAM(CGRAM_Dat1,7);                                    //第1組自定義字符點(diǎn)陣寫(xiě)入CGRAM
  136.         Write_LCD_Command(0xC0 | 1);                                //顯示位置定位于第1行1列位置
  137.         for (i = 6; i != 0xFF; i--)                                        //7線~1線式方塊逐個(gè)顯示         
  138.         {   Write_LCD_Data(i);                                                    //在當(dāng)前位置顯示編碼為i的字符
  139.                 delay_ms(50); if (SW4) return;              //未置于SW4位置時(shí)立即返回
  140.         }        
  141.         for(i = 0; i <= 6; i++)                                                //1線~7線式方塊逐個(gè)顯示         
  142.         {   Write_LCD_Data(i);                                                //在當(dāng)前位置顯示編碼為i的字符  
  143.             delay_ms(50); if (SW4) return;             //未置于 SW4位置時(shí)立即返回
  144.         }   
  145.         delay_ms (500);                                                        //第1組自定義字符演示后延時(shí)1s
  146.         //第2組自定義CGRAM字符演示
  147.         LCD_ShowString(1,0, "                ");   //第1行清空(輸出16個(gè)空格)
  148.         Write_CGRAM(CGRAM_Dat2,5);                   //第2組自定義字符點(diǎn)陣寫(xiě)入CGRAM  
  149.         Write_LCD_Command(0xC0 | 4);                   //顯示位置定位于第1行4列位置         
  150.         for (i = 0; i <= 4; i++)                                   //5個(gè)自定義漢字字符顯示        
  151.         {    Write_LCD_Data(i);                                           //在當(dāng)前位置顯示編碼為i的字符  
  152.                  Write_LCD_Data(' ');                                   //每顯示一個(gè)自定義字符后加一一 空格
  153.                  delay_ms(100);if (SW4) return;                   //未置于SW4位置時(shí)立即返回
  154.         }         
  155.         delay_ms(1000);                                           //第2組自定義字符演示后延時(shí)1s
  156.         goto LOOP4;                                                           //繼續(xù)
  157. }

  158. //-----------------------------------------------------------------
  159. // 主程序
  160. //-----------------------------------------------------------------
  161. void main()
  162. {
  163.         P3 = 0xFF;                                                //P3端口置為0xFF
  164.         Initialize_LCD();                                //初始化LCD
  165.         TR0  = 1;                                                //啟動(dòng)定時(shí)器,提供隨機(jī)種子
  166.         while(1)                                                //主循環(huán)控制實(shí)現(xiàn)各類演示
  167.         {        if (SW1 == 0) H_Scroll_Display();
  168.                 if (SW2 == 0) Cursor_Display();
  169.                 if (SW3 == 0) Show_All_Inter_Chars();
  170.                 if (SW4 == 0) Display_CGRAM_Chars();
  171.         }
  172. }
復(fù)制代碼

所有資料51hei提供下載:
1602字符液晶工作于8位模式直接驅(qū)動(dòng)顯示.zip (60.12 KB, 下載次數(shù): 8)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 97免费在线观看视频 | 成人小视频在线观看 | 不卡一区二区三区四区 | 国产一区二区三区四区五区加勒比 | 久久久久国产一区二区三区 | 久久久久久美女 | 成人黄视频在线观看 | 国产精品99久久久久久久vr | 色综合视频 | 久久成人免费视频 | 久在线视频播放免费视频 | 青青久草 | 日韩中文字幕2019 | 九一精品 | a级在线| 成人精品视频在线 | 亚洲手机视频在线 | 日韩成人国产 | 一区视频 | 国产网站在线免费观看 | 亚洲一级毛片 | 亚洲第一视频网站 | 美女高潮网站 | 日韩精品视频在线播放 | 国产一级毛片精品完整视频版 | 韩日视频在线观看 | 久久精品欧美一区二区三区不卡 | 免费午夜电影 | 国产线视频精品免费观看视频 | 日韩高清黄色 | 日韩国产在线 | 日韩精品一区二区三区中文字幕 | 国产一区二区日韩 | 欧美中文字幕在线观看 | 婷婷综合网 | 欧美日韩免费一区二区三区 | 国产精品久久一区二区三区 | 老司机午夜性大片 | 精品国产一区二区三区久久狼黑人 | 欧美在线视频一区二区 | 国产一级片一区二区三区 |