找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

LCD12864液晶顯示PPT課件與單片機源碼下載

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:296634 發(fā)表于 2018-9-17 21:34 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
LCD12864液晶顯示以51單片機為核心設(shè)計一個LCD12864液晶顯示器。具有簡單的文字和圖案花樣顯示功能。

系統(tǒng)主要由51單片機進行控制各個電路的配合,從而完成簡單的花樣顯示文字和圖案的功能。
電路主要包括:
單片機最小系統(tǒng)電路,ST7920控制電路,LCD12864液晶顯示等電路。

點陣圖形液晶
字庫:帶中文字庫、不帶中文字庫
數(shù)據(jù)接口:串口、并口
LCD12864:指128列,64行點陣的液晶屏,可以顯示32個漢字(16*16的點陣),4行,每行8個漢字)

PPT課件內(nèi)容預(yù)覽:


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


數(shù)字0亮 ,數(shù)字1滅
cs1 打開顯示
RW:讀/寫
RS數(shù)據(jù)/指令
E:使能,下降沿數(shù)據(jù)寫入控制器內(nèi)寄存器
cs1=0.,左半屏;cs2=0,右半屏

e(sclk時鐘引腳);RS(cs,打開顯示);rw(sid數(shù)據(jù)引腳),括號中為串行含義

單片機源程序如下:
  1. /*
  2. 液晶12864字符顯示,DDRAM編碼書寫,
  3. 就是先寫頁地址,頁地址共8頁,例如第2頁
  4. write_comm(0xba); //,頁地址格式1011 1???
  5. 然后列地址,列地址共64列,例如第5頁
  6.   write_comm(0x40); //DDRAM的列地址01??????
  7. */
  8.   #include "reg51.h"
  9.   sbit cs1_zuo=P3^3;
  10.   sbit cs2_you=P3^4;
  11.   sbit enable_12864=P3^5;         //允許
  12.   sbit  read_write=P3^6;          //數(shù)據(jù)引腳
  13.   sbit command_date=P3^7;//

  14.   void delayms(int t)
  15.   {int i,j;
  16.   for(i=0;i<t;i++)
  17.    for(j=0;j<120;j++);
  18.   
  19.   }
  20.   void chech_busy()
  21.   {           //unsigned char timeout=200;
  22.         unsigned char busy;
  23.              enable_12864=0;
  24.           read_write=1;          // 讀寫引腳  1/0
  25.           command_date=0;  //命令/數(shù)據(jù)引腳 1/0
  26.           P2=0xff;//讀入前先置1
  27.                    enable_12864=1;
  28.                    while(0x80&busy);  //最高位為1就忙,不能接收,等待
  29.            enable_12864=0;
  30.   }
  31.   
  32.   unsigned char read_date()//實際讀狀態(tài)寄存器
  33.   {unsigned char dat;
  34.    chech_busy();//每次讀寫之前進行忙檢測
  35.         enable_12864=0;
  36.         command_date=1;       
  37.         read_write=1;
  38.         P2=0xff;//準備讀入       
  39.         enable_12864=1;   //enable_12864的高電平讀數(shù)據(jù)
  40.         dat=P2;
  41.         delayms(2);//延時
  42.         enable_12864=0;
  43.     return dat;
  44.   }
  45. void write_date(unsigned char dat)
  46.   {          chech_busy();//每次讀寫之前進行忙檢測
  47.         command_date=1;        //寫數(shù)據(jù)RS引腳高電平
  48.          read_write=0;
  49.         P2=dat;
  50.          delayms(2);        //延時50us
  51.         enable_12864=1;  //e的下降沿寫入
  52.         delayms(2);        //延時50us
  53.         enable_12864=0;
  54.   
  55.   }
  56.   //
  57.   void write_comm(unsigned char comm)
  58.   {        chech_busy();//每次讀寫之前進行忙檢測
  59.      command_date=0;  //寫命令RS引腳低電平
  60.         read_write=0;
  61.            P2=comm;
  62.                   delayms(2);
  63.                 enable_12864=1;  //e的下降沿寫入
  64.                 delayms(2);
  65.                 enable_12864=0;
  66.   }
  67.   /*******初始化**************/
  68.   void init_lcd()
  69.   {         delayms(100);
  70.              write_comm(0x30);//8位數(shù)據(jù),基本指令集
  71.            write_comm(0x0c);//顯示打開,光標關(guān)、反白關(guān)
  72.            write_comm(0x01);//清屏,DDRAM填滿0x20,且地址計數(shù)器清0
  73.          
  74.            delayms(100);
  75.   }


  76. void main()

  77. {unsigned char code  tuan[]=
  78.           //陽碼(0點亮)逐列,逆向
  79.         {
  80. //        0xFF,0xF7,0xFD,0xF7,0xFD,0xF7,0x0D,0xF7, //馬
  81. //        0x7D,0xF7,0x7D,0xF7,0x7D,0xF7,0x7D,0xF7,
  82. //        0x7D,0xF7,0x7D,0xF7,0x01,0xB7,0x7F,0x7F,
  83. //        0x7F,0xBF,0x7F,0xC0,0xFF,0xFF,0xFF,0xFF
  84. 0xDF,0xDD,0xCF,0x98,0x53,0xDD,0x9C,0xED,0xDF,0xED,0xE7,0x6D,0xF7,0xBF,0xF7,0xCF,
  85. 0x07,0xF0,0x76,0xFF,0x71,0xBF,0x77,0x7F,0x77,0xBF,0x77,0xC0,0xF7,0xFF,0xFF,0xFF,/*"紡",0*/

  86. 0xDF,0xDD,0xCF,0x98,0x53,0xDD,0x9C,0xED,0xDF,0xED,0xE7,0x6D,0xFF,0xBF,0x03,0xDC,
  87. 0xFB,0xE6,0xFB,0xFE,0xFB,0xFE,0xFB,0xF6,0xFB,0xEE,0x03,0xDC,0xFF,0x3F,0xFF,0xFF,/*"織",1*/

  88. 0xFD,0xF7,0xFD,0xE7,0x01,0xF0,0x6D,0xF7,0x6D,0xFB,0x01,0x00,0xFD,0xFB,0xFD,0x7F,
  89. 0x03,0x9C,0xFB,0xE6,0xFB,0xFE,0xFB,0xFE,0xFB,0xF6,0x03,0xCC,0xFF,0x3F,0xFF,0xFF,/*"職",2*/

  90. 0xFF,0xBF,0xEF,0xBF,0x9F,0xBF,0x7F,0xBC,0xFF,0xBF,0x00,0x80,0xFF,0xBF,0xFF,0xBF,
  91. 0xFF,0xBF,0x00,0x80,0xFF,0xBD,0xFF,0xBE,0x3F,0xBF,0xCF,0xBF,0xFF,0xBF,0xFF,0xFF,
  92. 0xFF,0xFF,0x8F,0xCF,0xF7,0xD7,0xF7,0xDB,0xF7,0xDD,0x77,0xDE,0x8F,0xCF,0xFF,0xFF,/*"2",0*/

  93. 0xFF,0xFF,0x1F,0xF0,0xEF,0xEF,0xF7,0xDF,0xF7,0xDF,0xEF,0xEF,0x1F,0xF0,0xFF,0xFF,/*"0",1*/

  94. 0xFF,0xFF,0xEF,0xDF,0xEF,0xDF,0x07,0xC0,0xFF,0xDF,0xFF,0xDF,0xFF,0xFF,0xFF,0xFF,/*"1",2*/

  95. 0xFF,0xFF,0x8F,0xE3,0x77,0xDD,0xF7,0xDE,0xF7,0xDE,0x77,0xDD,0x8F,0xE3,0xFF,0xFF/*"8",3*/
  96.     };


  97. int i,j,t,x=0x80,y=0x80; //x,y為點陣的坐標0x80
  98. delayms(20);
  99.   init_lcd();
  100. //硬件上左屏開了顯示了
  101.   write_comm(0x01);//清屏
  102.   delayms(40);
  103.    cs1_zuo=0; //寫左屏
  104.    cs2_you=1;
  105.    write_comm(0xb8+0); //頁地址0頁1011 1???
  106.    write_comm(0x40); //DDRAM的列地址40~7f,64列
  107.   
  108.             for(i=0;i<64;i++)
  109.                    write_date(tuan[2*i]);
  110.       
  111.         write_comm(0xb8+1);//頁地址1頁1011 1???
  112.     write_comm(0x40);//DDRAM的列地址40~7f,64列
  113.                            //列地址設(shè)定后,列地址自動加1
  114.                            //頁地址重設(shè)起作用,設(shè)定后保持
  115.      for(i=0;i<64;i++)
  116.           write_date(tuan[2*i+1]);
  117.       cs1_zuo=1; //寫右屏
  118.    cs2_you=0;
  119.          write_comm(0xb8+2); //頁地址3頁1011 1???
  120.    write_comm(0x40+32); //DDRAM的列地址40~7f,64列
  121.   
  122.             for(i=64;i<96;i++)
  123.                    write_date(tuan[2*i]);

  124.          write_comm(0xb8+3); //頁地址4頁1011 1???
  125.    write_comm(0x40+32); //DDRAM的列地址40~7f,64列
  126.   
  127.             for(i=64;i<96;i++)
  128.                    write_date(tuan[2*i+1]);
  129.    while(1);
  130. }
復(fù)制代碼

所有資料51hei提供下載:
參考資料.zip (8.98 MB, 下載次數(shù): 42)

評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表