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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12108|回復: 14
收起左側

AMPIRE12864液晶在任意位置顯示任意字符或漢字的單片機源碼與仿真

  [復制鏈接]
ID:73833 發表于 2015-3-11 21:36 | 顯示全部樓層 |閱讀模式
    最近配合proteus仿真,搞了一個小試驗程序,功能是,通過 改變主程序里的d,x,y三個變量組合可以在ampire12864液晶上的任意可顯示的地方顯示任意字符或漢字。通過這個小東西可以很好的理解這類液晶的顯示原理,可以很直觀的操作其行和列,頁和列 左右屏控制。感覺挺好玩,貢上來。請大神斧正。程序使用的是字符庫,如要顯示漢字,請自行修改參數。

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

單片機源程序如下:

  1. /***********************************lcd.c****************************************/

  2. #include <reg52.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int         
  5. #define DB P2
  6. uchar d,x,y;             
  7.         sbit Reset = P0^0;   //復位
  8.         sbit RS = P0^3;    //指令數據選擇
  9.         sbit E = P0^1;    //指令數據控制
  10.         sbit CS1 = P0^5;   //左屏幕選擇,低電平有效
  11.         sbit CS2 = P0^4;   //右屏幕選擇
  12.         sbit RW = P0^2;    //讀寫控制
  13.     uchar  *ZF;        //數據指針,ZF為首地址          
  14. const uchar code ZF_tab[] =
  15. {
  16.         0xF8,0xFC,0x04,0xC4,0x24,0xFC,0xF8,0x00,  // -0-
  17.         0x07,0x0F,0x09,0x08,0x08,0x0F,0x07,0x00,

  18.         0x00,0x10,0x18,0xFC,0xFC,0x00,0x00,0x00,  // -1-
  19.         0x00,0x08,0x08,0x0F,0x0F,0x08,0x08,0x00,

  20.         …………
  21. …………限于本文篇幅 余下代碼請從51黑下載附件…………

  22.         0x00,0x04,0x04,0xBC,0xF8,0x40,0x40,0x00,  // -}-
  23.         0x00,0x08,0x08,0x0F,0x07,0x00,0x00,0x00,
  24.        
  25. };

  26. void delay(uint time)        //延時
  27.          {
  28.            while(time --);
  29.          }

  30. void writedata(uchar dat)        //寫數據
  31. {
  32. delay(5);
  33. E = 1;        RS = 1;        RW = 0;
  34. P2 = dat;
  35. E = 0;
  36. }
  37. void writecmd(uchar cmd)          //寫地址/命令
  38. {
  39. delay(5);
  40. E = 1;        RW = 0;        RS = 0;
  41. P2 = cmd;
  42. E = 0;
  43. }
  44. void SetOnOff(uchar onoff) //1-開顯示 0-關
  45. {
  46. if(onoff == 1)        writecmd(0x3f);   
  47. if(onoff == 0) writecmd(0x3e);
  48. }
  49. void setPM(uchar PM) //選擇屏幕( 0-左屏,1-右屏,2-全屏  )
  50. {
  51. switch(PM)
  52. {
  53.    case 0 :         CS1 = 0;         CS2 = 1;   break;
  54.    case 1 :         CS1 = 1;    CS2 = 0;   break;
  55.    default :    CS1 = 0;    CS2 = 0;
  56. }
  57. }
  58. void set_x( x)  //x -> 0 : 7 頁
  59. {
  60. x = x&0x07|0xb8;          
  61. writecmd(x);
  62. }
  63.                
  64. void set_y( y) //y -> 0 :63 列
  65. {
  66. y = y & 0x3f|0x40;          
  67. writecmd(y);
  68. }

  69. void chearPM(uchar PM)  //清屏(0-清左屏,1-清右屏,2-清全屏 )
  70. {
  71. uchar i,j;
  72.   setPM(PM);
  73.          for(i = 0;i < 8;i++)         
  74.            {
  75.                   set_x(i);                   //從第0到第7頁
  76.                   set_y(0);                                //從第0列開始
  77.                   for(j = 0;j < 64; j++)        //在PM=2的情況下左右半屏同時全寫0.
  78.                   writedata(0x00);         
  79.            }   
  80. }       
  81. void InitLcd()                  //LCD初始化
  82. {
  83. Reset = 0;        delay(2);Reset = 1;        delay(2);//軟件復位                    
  84. //SetOnOff(0);  //關屏幕
  85. chearPM(2);        //清屏
  86. }
  87. void showZF( x, y, uchar *ZF)          //顯示一個字符
  88. {
  89. uchar i;
  90. set_x(x); set_y(y);                            //設置頁地址,設置咧地址       
  91. for(i = 0;i < 8;i ++) writedata(*(ZF++));        // 寫字符的上半部分
  92. set_x(x + 1);set_y(y);         
  93. for(i = 0;i < 8;i ++)        writedata(*(ZF++));         // 寫字符的下半部分
  94.   
  95. }
  96. /*******************************************************************************/
  97. /********************************main.c***********************************************/

  98.          void effect (d, x, y)
  99.         {                                   
  100.                  uchar i,h,s;
  101.                  if(y<57 )
  102.                          {
  103.                           setPM(0);          //開左屏
  104.                           s=(64-y)/8;         //計算可以完整顯示幾個字符,               
  105.                           ZF =(ZF_tab+(d-1)*16);         //計算從第幾個字符開始。
  106.                                          for(i =0;i <s; i++)   //循環取字符。
  107.                                   {
  108.                                         showZF(x,y ,ZF);
  109.                                                  y += 8;  //y加8跳過一個字符的寬度,
  110.                                      ZF +=16;          //        ZF加16跳過一個字符的高度                                                                                                                                     
  111.                                    }
  112.                           }
  113.                                           
  114.                           if(y>63 )          
  115.                            {
  116.                                     setPM(1);         //開右屏                                          
  117.                              h=y-64;          //計算離開右屏第1列的列值h,h范圍0-63               
  118.                                  s=(128-y)/8;         //         計算右屏可以完整顯示幾個字符,
  119.                                  ZF =( ZF_tab+(d-1)*16);                                         
  120.                                          for(i =0;i <s; i++)
  121.                                   {
  122.                                         showZF(x,h ,ZF); h += 8;ZF +=16;       
  123.                                        }
  124.                                 }       
  125.           }
  126. void main()
  127. {                         
  128. InitLcd();
  129. while(1)
  130.   {        uchar i;        
  131.         d=28;  //  d:從字庫中第幾個字開始顯示  正常再字庫的字節數內取值1到若干個,1是第一個,2是第2個
  132.         x=6;   //x;在第幾行顯示,由于屏幕分8頁,字符高度占兩頁。正常取0-6.x=6就已經是第7頁了,
  133.                 //余下第8頁是為了第6、7頁能顯示完整字符。        
  134.         y=32;        // y:從哪一列開始顯示 正常取0-120.余下的8列,是為了顯示完整字符。大于120終止取字循環。  
  135.     effect(d,x,y);                                                                                                       
  136.         setPM(2);                
  137.                 for(i=0;i<3;i++)         //閃爍幾下        也可不用該程序段
  138.                 {  
  139.                     SetOnOff(1); delay(30000) ;                            
  140.                          SetOnOff(0); delay(30000);                                 
  141.                         SetOnOff(1);
  142.                 }
  143.         //while(1) ;       
  144.    }                            
  145. }
復制代碼

所有資料51hei提供下載:
在ampire12864液晶的任意可顯示的地方顯示任意字符或漢字C程序 proteus仿真.rar (78.07 KB, 下載次數: 287)

評分

參與人數 3黑幣 +61 收起 理由
日了狗了 + 5 很給力!
admin + 50 共享資料的積分獎勵!
xiaos + 6 很給力!

查看全部評分

回復

使用道具 舉報

ID:1 發表于 2015-3-11 22:31 來自手機 | 顯示全部樓層
好資料,謝謝分享,等上班后把分給您加上
回復

使用道具 舉報

ID:73833 發表于 2015-3-14 12:09 | 顯示全部樓層
本帖最后由 dingmingzhou 于 2015-7-15 06:02 編輯

哥稱之為愛情
回復

使用道具 舉報

ID:74370 發表于 2015-3-15 21:54 | 顯示全部樓層
燃眉之急好資料,謝謝分享
回復

使用道具 舉報

ID:72050 發表于 2015-5-7 20:38 來自手機 | 顯示全部樓層
我看看,正在學習中
回復

使用道具 舉報

ID:73949 發表于 2015-5-7 22:33 | 顯示全部樓層
學習學習,謝謝分享!
回復

使用道具 舉報

ID:21178 發表于 2015-9-10 14:02 | 顯示全部樓層
好資料,正在研究
回復

使用道具 舉報

ID:102155 發表于 2016-1-6 21:56 | 顯示全部樓層
看看,正好手頭上有類似項目
回復

使用道具 舉報

ID:81035 發表于 2016-1-11 18:51 | 顯示全部樓層
很好的資料,謝謝分享!
回復

使用道具 舉報

ID:122173 發表于 2016-5-20 14:29 | 顯示全部樓層
很好的資料,謝謝分享!
回復

使用道具 舉報

ID:46028 發表于 2016-5-27 13:27 | 顯示全部樓層
多謝分享,參考一下
回復

使用道具 舉報

ID:167267 發表于 2017-4-15 23:14 | 顯示全部樓層
正在找這個資料。。。。
回復

使用道具 舉報

ID:137676 發表于 2017-4-17 00:00 | 顯示全部樓層
真是雪中送炭啊,找了很久的資料啊!謝謝分享
回復

使用道具 舉報

ID:165122 發表于 2018-3-19 11:10 | 顯示全部樓層
學習學習!
回復

使用道具 舉報

ID:339428 發表于 2018-5-27 23:07 | 顯示全部樓層
很給力
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品a久久久久 | www午夜视频| 免费观看黄色一级片 | 亚洲黄色av | 日韩在线| 精品一区二区三区四区外站 | 国产玖玖 | 国产欧美一区二区精品久导航 | 国产四虎 | 99久久精品一区二区成人 | 国产精品一区二区av | 亚洲超碰在线观看 | 在线观看黄免费 | 中文字幕亚洲一区二区三区 | 日韩在线免费电影 | 中文在线www | 欧美色人 | 日本精品一区二区三区视频 | 亚洲精品视频在线 | 日韩视频观看 | www国产成人免费观看视频,深夜成人网 | 特a毛片| 天天视频一区二区三区 | 色婷婷影院 | 五月婷亚洲 | 日本亚洲一区二区 | 免费一级黄色 | 亚洲精品一区av在线播放 | www狠狠干 | 亚洲一区 中文字幕 | 欧美2区| 理论片免费在线观看 | h视频在线播放 | 日本二区| 一级国产精品一级国产精品片 | 国产91久久久久久久免费 | 高清国产午夜精品久久久久久 | 国产在线一区二区 | 欧美日韩综合视频 | 久久久久久黄 | 久久久久亚洲国产|