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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

ATMEGA16單片機YJ12864液晶圖形及文字顯示源代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:835047 發表于 2020-10-27 10:53 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
12864液晶  圖形及文字顯示源代碼

單片機源程序如下:
  1. #include <iom16v.h>                        //包含型號頭文件
  2. #include <macros.h>                        //包含"位"操作頭文件
  3. #include <stdio.h>                        //標準輸入輸出頭文件
  4. #include <AVR_PQ1A.h>                //包含自定義常量頭文件

  5. #pragma data:code //以下是字模工具取出的圖片數組
  6. const uchar GDRAM[1024]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  7. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  8. ^^^^^^^^^^省略
  9. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
  10. #pragma data:data

  11. /*******************************************
  12. 函數名稱: LCD12864_portini
  13. 功    能: 初始化12864液晶用到的IO口
  14. 參    數: 無
  15. 返回值  : 無
  16. /********************************************/
  17. void LCD12864_portini(void)
  18. {
  19.         LCDb_CTRL_DDR |= BIT(LCDb_RS)|BIT(LCDb_RW)|BIT(LCDb_E)|BIT(LCDb_RST);//配置控制管腳為輸出
  20.         LCDb_DATA_DDR |= 0xFF;  //配置數據管腳為輸出
  21.         LCDb_SET_RST;                //不使能復位端
  22. }
  23. /*******************************************
  24. 函數名稱: LCD12864_readbyte
  25. 功    能: 從12864液晶讀出一個字節數據或者指令
  26. 參    數: DatCmd--為iDat時是數據,為iCmd時是指令
  27. 返回值  : dByte--讀回的數據或者指令
  28. /********************************************/
  29. uchar LCD12864_readbyte(uchar DatCmd)
  30. {
  31.          uchar dByte;
  32.         if (DatCmd == iCmd)                 //指令操作
  33.                 LCDb_CLR_RS;
  34.         else
  35.                 LCDb_SET_RS;
  36.                
  37.         LCDb_SET_RW;                              //讀操作
  38.         LCDb_SET_E;
  39.         LCDb_DATA_DDR=0x00;         //數據總線定義為輸入
  40.         dByte=LCDb_DI;                         //讀數據或者指令
  41.         Delayms(1);                                 //時序調整
  42.         LCDb_CLR_E;        
  43.         LCDb_DATA_DDR|=0xff;         //數據總線還原為輸出
  44.         return dByte;
  45. }
  46. /*******************************************
  47. 函數名稱: LCD12864_sendbyte
  48. 功    能: 向12864液晶寫入一個字節數據或者指令
  49. 參    數: DatCmd--為iDat時是數據,為iCmd時是指令
  50.                     dByte--為寫入12864的數據或者指令
  51. 返回值  : 無
  52. /********************************************/
  53. void LCD12864_sendbyte(uchar DatCmd, uchar dByte)
  54. {
  55.         if (DatCmd == iCmd)                //指令操作
  56.                 LCDb_CLR_RS;
  57.         else
  58.                 LCDb_SET_RS;
  59.                
  60.         LCDb_CLR_RW;                        //寫操作
  61.         LCDb_SET_E;
  62.         LCDb_DO = dByte;                //寫入數據
  63.         Delayus(100);
  64.         LCDb_CLR_E;        
  65. }
  66. /*******************************************
  67. 函數名稱: LCD12864_sendstr
  68. 功    能: 向12864液晶寫入一個字符串
  69. 參    數: ptString--字符串指針
  70. 返回值  : 無
  71. /********************************************/
  72. void LCD12864_sendstr(uchar *ptString)
  73. {
  74.         while((*ptString)!='\0')                 //字符串未結束一直寫
  75.         {
  76.                 LCD12864_sendbyte(iDat, *ptString++);
  77.         }
  78. }
  79. /*******************************************
  80. 函數名稱: LCD12864_clear
  81. 功    能: 12864液晶清屏
  82. 參    數: 無
  83. 返回值  : 無
  84. /********************************************/
  85. void LCD12864_clear(void)
  86. {
  87.         LCD12864_sendbyte(iCmd,LCDb_CLS);
  88.         Delayms(2);// 清屏指令寫入后,2ms 的延時是很必要的!!!
  89. }
  90. /*******************************************
  91. 函數名稱: LCD12864_readBF
  92. 功    能: 12864液晶清屏
  93. 參    數: 無
  94. 返回值  : busy--為1時忙,為0時可以接收指令
  95. /********************************************/
  96. uchar LCD12864_readBF(void)
  97. {         
  98.         uchar busy;
  99.         busy=LCD12864_readbyte(iCmd);                //讀回BF標志和地址
  100.         if(busy&0x80)                                                //如果忙,返回忙狀態
  101.                 busy=1;
  102.         else                                                                   //不忙,可以寫入
  103.                 busy=0;
  104.         return busy;
  105. }
  106. /*******************************************
  107. 函數名稱: LCD12864_gotoXY
  108. 功    能: 移動到指定位置
  109. 參    數: Row--指定的行
  110.                     Col--指定的列
  111. 返回值  : 無
  112. /********************************************/
  113. void LCD12864_gotoXY(uchar Row, uchar Col)
  114. {        
  115.         switch (Row)                  //選擇行
  116.         {
  117.                 case 2:
  118.                         LCD12864_sendbyte(iCmd, LCDb_L2 + Col); break;        //寫入第2行的指定列
  119.                 case 3:
  120.                         LCD12864_sendbyte(iCmd, LCDb_L3 + Col); break;        //寫入第3行的指定列
  121.                 case 4:
  122.                         LCD12864_sendbyte(iCmd, LCDb_L4 + Col); break;        //寫入第4行的指定列        
  123.                 default:
  124.                         LCD12864_sendbyte(iCmd, LCDb_L1 + Col); break;        //寫入第1行的指定列        
  125.         }
  126. }
  127. /*******************************************
  128. 函數名稱: LCD12864_initial
  129. 功    能: 12864液晶初始化
  130. 參    數: 無
  131. 返回值  : 無
  132. /********************************************/
  133. void LCD12864_initial(void)
  134. {
  135.         Delayms(100);                                // 等待內部復位
  136.         LCD12864_portini();                        //端口初始化
  137.         
  138.         LCD12864_sendbyte(iCmd, LCDb_FUNCTION);        //功能、模式設定
  139.         while(LCD12864_readBF());
  140.         LCD12864_sendbyte(iCmd, LCDb_ON);                //打開顯示
  141.         while(LCD12864_readBF());
  142.         LCD12864_clear();                                                //清屏
  143.         while(LCD12864_readBF());
  144.         LCD12864_sendbyte(iCmd, LCDb_ENTRY);        // 輸入模式設定               
  145. }
  146. /*******************************************
  147. 函數名稱: LCD12864_opGDRAM
  148. 功    能: 向GDRAM寫入數據,并顯示(完成繪圖功能)
  149. 參    數: ptGDRAM--GDRAM數據指針
  150. 返回值  : 無
  151. /********************************************/
  152. void LCD12864_opGDRAM(const uchar *ptGDRAM)
  153. {
  154.         uchar i,j;
  155.         uint x=0;
  156.         while(LCD12864_readBF());          //讀忙標志
  157.         LCD12864_sendbyte(iCmd,LCDb_EXTCMD1);                //擴充指令集,并關閉繪圖顯示        
  158.         //寫入并顯示上半屏幕
  159.         for(i=0;i<32;i++)                                            //行地址計數
  160.      {                                
  161.            for(j=0;j<8;j++)                                      //列地址計數
  162.            {                                                
  163.                                     LCD12864_sendbyte(iCmd,0x80|i);//輸入行地址
  164.                                  Delayus(10);
  165.                                     LCD12864_sendbyte(iCmd,0x80|j);//輸入列地址
  166.                                  Delayus(10);
  167.                  LCD12864_sendbyte(iDat,ptGDRAM[x++]); //輸入高位字節數據
  168.                                  Delayus(10);               
  169.                                  LCD12864_sendbyte(iDat,ptGDRAM[x++]); //輸入低位字節數據
  170.                                  Delayus(10);
  171.            }
  172.      }
  173.          //寫入并顯示下半屏幕
  174.          for(i=0;i<32;i++)            
  175.      {                                
  176.            for(j=8;j<16;j++)      
  177.            {            
  178.                                     LCD12864_sendbyte(iCmd,0x80|i);//輸入行地址
  179.                                  Delayus(10);
  180.                                     LCD12864_sendbyte(iCmd,0x80|j);//輸入列地址
  181.                                  Delayus(10);
  182.                  LCD12864_sendbyte(iDat,ptGDRAM[x++]); //輸入高位字節數據      
  183.                                  Delayus(10);
  184.                                  LCD12864_sendbyte(iDat,ptGDRAM[x++]); //輸入低位字節數據
  185.                                  Delayus(10);
  186.            }
  187.      }
  188.          Delayus(10);
  189.          LCD12864_sendbyte(iCmd,LCDb_EXTCMD2);                           //打開繪圖顯示
  190.          LCD12864_sendbyte(iCmd,LCDb_BASCMD);                           //還原回基本指令集模式
  191. }

  192. /*******************************************
  193. 函數名稱: main
  194. 功    能: 12864液晶驅動主程序
  195. 參    數: 無
  196. 返回值  : 無
  197. /********************************************/
  198. void main(void)
  199. {
  200. uchar i;
  201. Board_init( );                                                                     //初始化開發板
  202. LCD12864_initial();                                                   //初始化12864液晶
  203.   
  204. while(1)
  205. {
  206.   LCD12864_clear();
  207.   while(LCD12864_readBF());
  208.   LCD12864_gotoXY(1,0);                                                     //第1行,第1列顯示
  209.   LCD12864_sendstr("AVR_PQ1A  開發板");         
  210.   LCD12864_gotoXY(2,2);                                                      //第2行,第3列顯示
  211.   LCD12864_sendstr("皮球制作");        
  212.   LCD12864_gotoXY(3,0);                                                  //第3行,第1列顯示
  213.   LCD12864_sendstr("電話:13212800564");        
  214.   LCD12864_gotoXY(4,1);                                                  //第4行,第2列顯示
  215.   LCD12864_sendstr("xxxxxxxx ");        
  216.   Delayms(40000);                                                            //延時等待
  217.   
  218.   LCD12864_clear();                                                          //清屏幕
  219.   LCD12864_opGDRAM(GDRAM);                                          //完成繪圖,繪圖后返回基本指令集模式
  220.   Delayms(40000);
  221. }
  222. }
復制代碼

所有程序51hei提供下載:
4_12864.rar (35.84 KB, 下載次數: 26)


實驗例程介紹.pdf

193.64 KB, 下載次數: 15, 下載積分: 黑幣 -5

AVR_PQ1A BOARD.pdf

86.56 KB, 下載次數: 12, 下載積分: 黑幣 -5

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

使用道具 舉報

沙發
ID:1 發表于 2020-10-27 15:31 | 只看該作者
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩国产三区 | 成人国产精品入口免费视频 | 欧美一区二区另类 | 久久99视频这里只有精品 | 成人中文字幕在线 | 成人av电影在线观看 | 一级片毛片 | 久久国产成人 | 日韩一二三区视频 | 欧美黑人一区二区三区 | 日韩视频在线免费观看 | 99亚洲精品| 国产精品久久国产精品 | 欧美激情在线精品一区二区三区 | 色综合久久久久 | 日韩高清一区 | 国产亚洲精品精品国产亚洲综合 | 黄色毛片大全 | 久热久 | 欧美日韩一本 | 中文字幕av在线 | 亚洲福利免费 | 久久久久国产一区二区三区 | 日本精品一区二区三区在线观看视频 | 亚洲第一天堂 | 欧美三区| 国产精品激情 | 亚洲精品国产精品国自产在线 | 国产成都精品91一区二区三 | 成人h免费观看视频 | 欧美理论片在线 | 精品一区电影 | 精品久久久网站 | 精品国产欧美一区二区三区不卡 | www.日本国产| 久草视频在线播放 | 中文字幕在线视频观看 | 拍拍无遮挡人做人爱视频免费观看 | 91免费电影 | www.887色视频免费 | av一区二区三区在线观看 |