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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51MCU+無字庫LCD12864滾屏 proteus仿真與C程序設計

[復制鏈接]
跳轉到指定樓層
樓主


單片機源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include <lcd12864.h>
  4. #include <delay.h>

  5. #define uchar unsigned char
  6. #define uint unsigned int
  7. #define Dataport P1 //LCD數據線

  8. sbit RS=P2^2; // 數據\指令 選擇
  9. sbit RW=P2^1; // 讀\寫 選擇
  10. sbit EN=P2^0; // 讀\寫使能
  11. sbit cs1=P2^4; // 片選1
  12. sbit cs2=P2^3; // 片選2

  13. /********************************/
  14. /*  定義中文字庫                */
  15. /********************************/

  16. unsigned char code Hzk[]={
  17. ///*--  文字:  中  --*/
  18. ///*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
  19. //0x00,0x00,0xFC,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0xFC,0x08,0x00,0x00,
  20. //0x00,0x00,0x07,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x02,0x02,0x07,0x00,0x00,0x00,


  21. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,


  22. };


  23. void CheckState()                //狀態檢查,LCD是否忙?
  24. {
  25.    uchar dat;
  26.    RS=0;
  27.    RW=1;
  28.    do{
  29.       Dataport=0x00;
  30.       EN=1;
  31.           dat=Dataport;
  32.       EN=0;
  33.       dat=0x80 & dat; //僅當第7位為0時才可操作(判別busy信號)
  34.       }while(!(dat==0x00));
  35. }



  36. SendCommandToLCD(uchar command)           //寫命令到LCD中
  37. {
  38.    CheckState();
  39.    RS=0;         //向LCD發送命令
  40.    RW=0;
  41.    Dataport=command;         //command :命令
  42.    EN=1;
  43.    EN=0;
  44. }


  45. void SetLine(uchar page)        //設置頁 0xb8是頁的首地址
  46. {
  47.   page=0xb8|page; //1011 1xxx                 0<=page<=7 設定頁地址--X 0-7,8行為一頁64/8=8,共8頁
  48.   SendCommandToLCD(page);
  49. }


  50. void SetStartLine(uchar startline)            //設定顯示開始行,0xc0是行的首地址
  51. {
  52.   startline=0xc0|startline; //1100 0000
  53.   SendCommandToLCD(startline); //設置從哪行開始:0--63,一般從0 行開始顯示
  54. }


  55. void SetColumn(uchar column)        //設定列地址--Y 0-63 ,0x40是列的首地址
  56. {
  57.   column=column &0x3f; //column最大值為64,越出 0=<column<=63
  58.   column= 0x40|column; //01xx xxxx
  59.   SendCommandToLCD(column);
  60. }


  61. void SetOnOff(uchar onoff)           //開關顯示,0x3f是開顯示,0x3e是關顯示
  62. {
  63.         onoff=0x3e|onoff; //0011 111x,onoff只能為0或者1
  64.         SendCommandToLCD(onoff);
  65. }


  66. void WriteByte(uchar dat)        //寫顯示數據
  67. {
  68.    CheckState();
  69.    RS=1;
  70.    RW=0;
  71.    Dataport=dat;//dat:顯示數據
  72.    EN=1;
  73.    EN=0;
  74.   }




  75. void SelectScreen(uchar screen)          //選擇屏幕screen: 0-全屏,1-左屏,2-右屏
  76. {                                                  
  77.    switch(screen)
  78.    { case 0: cs1=0;//全屏
  79.              _nop_(); _nop_(); _nop_();
  80.              cs2=0;
  81.              _nop_(); _nop_(); _nop_();
  82.              break;
  83.      case 1: cs1=0;//左屏
  84.              _nop_(); _nop_(); _nop_();
  85.              cs2=1;
  86.              _nop_(); _nop_(); _nop_();
  87.              break;
  88.      case 2: cs1=1;//右屏
  89.              _nop_(); _nop_(); _nop_();
  90.              cs2=0;
  91.              _nop_(); _nop_(); _nop_();
  92.              break;
  93.    }
  94. }


  95. void ClearScreen(uchar screen)          //清屏screen: 0-全屏,1-左屏,2-右
  96. {         
  97.      unsigned char i,j;
  98.      SelectScreen(screen);
  99.      
  100.          for(i=0;i<8;i++)         //控制頁數0-7,共8頁
  101.          {
  102.                 SetLine(i);
  103.                         SetColumn(0);
  104.               for(j=0;j<64;j++)           //控制列數0-63,共64列
  105.                                   {
  106.                   WriteByte(0x00); //寫點內容,列地址自動加1
  107.                 }
  108.      }
  109.                                          
  110. }


  111. void lcd_rol()                                        //向上滾屏
  112. {
  113.          uint i;
  114.         for(i = 0; i < 64; i++)
  115.         {
  116.                 cs1=0; // 片選1
  117.                 SendCommandToLCD(0xc0+i);
  118.                 cs1=1;
  119.                
  120.                 cs2=0;// 片選2
  121.                 SendCommandToLCD(0xc0+62-i);
  122.                 cs2=0; // 片選2
  123.                
  124.                 delay_ms(6);
  125.         }
  126. }
  127. void InitLCD(  )             //初始化LCD
  128. {

  129.         CheckState();

  130.         SelectScreen(0);
  131.         SetOnOff(0); //關顯示

  132.         SelectScreen(0);
  133.         SetOnOff(1); //開顯示

  134.         SelectScreen(0);
  135.         ClearScreen(0);//清屏

  136.         SetStartLine(0); //開始行:0

  137. }


  138. //顯示全角漢字
  139. void Display(uchar ss,uchar page,uchar column,uchar number)  //Display(2,0,i*16,i);
  140. {
  141.         uint i;                          //選屏參數,pagr選頁參數,column選列參數,number選第幾漢字輸出
  142.                
  143.         SelectScreen(ss);
  144.         column=column&0x3f;

  145.         SetLine(page);        //寫上半頁
  146.         SetColumn(column); //控制列
  147.         for(i=0;i<16;i++)  //控制16列的數據輸出
  148.         {
  149.         WriteByte(Hzk[i+32*number]); //i+32*number漢字的前16個數據輸出
  150.         
  151.         }

  152.         SetLine(page+1);                 //寫下半頁
  153.         SetColumn(column);           //控制列
  154.     for(i=0;i<16;i++)          //控制16列的數據輸出
  155.         {
  156.         WriteByte(Hzk[i+32*number+16]);        //i+32*number+16漢字的后16個數據輸出
  157.         }

  158. }


  159. //顯示半角漢字和數字和字母
  160. void Displayen(uchar ss,uchar page,uchar column,uchar number)
  161. {
  162.         uint i;           //選屏參數,pagr選頁參數,column選列參數,number選第幾漢字輸出
  163.                
  164.         SelectScreen(ss);
  165.         column=column&0x3f;

  166.         SetLine(page);        //寫上半頁
  167.         SetColumn(column);
  168.            for(i=0;i<8;i++)
  169.         {
  170.         WriteByte(Ezk[i+16*number]);
  171.         }
  172.         
  173.         SetLine(page+1);        //寫下半頁
  174.         SetColumn(column);
  175.            for(i=0;i<8;i++)
  176.         {
  177.         WriteByte(Ezk[i+16*number+8]);
  178.         }
  179. }


  180. void Dis_Play()
  181. {
  182.         uchar i;
  183.         SetStartLine(0);  
  184.    for(i=0;i<4;i++)
  185.    {
  186.                 Display(0,0,i*16,i);
  187.                 Display(1,0,i*16,i+4);
  188.                
  189.                 Display(2,0+2,i*16,i+8);
  190.                 Display(1,0+2,i*16,i+12);

  191.                 Display(2,0+2+2,i*16,i+16);
  192.                 Display(1,0+2+2,i*16,i+20);
  193.                   
  194. //                Display(2,0+2+2+2,i*16,i+24);
  195. //                Display(1,0+2+2+2,i*16,i+28);
  196.     }
  197.         for(i=0;i<8;i++)
  198.    {
  199.            Displayen(2,0+2+2+2,i*8,i);
  200.            Displayen(1,0+2+2+2,i*8,i+8);
  201.    }
  202.         
  203.         while(1)
  204.         {
  205.                 lcd_rol();
  206.                 for(i=0;i<2*5;i++)
  207.                 {
  208.                         delay_ms(500);
  209.                 }
  210.                
  211.         }
  212. }
復制代碼

所有資料51hei提供下載:
LCD12864.rar (101.36 KB, 下載次數: 34)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日日 | eeuss国产一区二区三区四区 | 亚洲一区二区 | 精品香蕉一区二区三区 | 91麻豆精品国产91久久久资源速度 | 亚洲三级国产 | 亚洲另类视频 | 美女福利网站 | 欧美日韩在线一区二区三区 | 中文字幕免费视频 | 国产精品91网站 | 国产精品久久久久久一区二区三区 | 国产色播av在线 | 日日干日日操 | 亚洲精品一区二区三区在线 | 精品国产黄色片 | 国产色在线 | 亚洲成人久久久 | 欧美一级在线视频 | 天天操天天舔 | 精品在线看 | 国内自拍视频在线观看 | 999免费观看视频 | 国产精品九九九 | 亚洲一区二区三区四区在线观看 | 秋霞在线一区二区 | 精品国产乱码久久久久久闺蜜 | 成人免费在线小视频 | 天天草av | 久久999 | 一级一级一级毛片 | 久久99精品久久久久 | 91在线视频播放 | 亚洲欧美日本在线 | 美女爽到呻吟久久久久 | 一区精品国产欧美在线 | 欧美性猛交一区二区三区精品 | 欧美日韩国产高清 | 天天澡天天狠天天天做 | 久久亚洲天堂 | 一区二区三区欧美 |