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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

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

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


單片機源程序如下:

  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 很給力!

查看全部評分

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

使用道具 舉報

沙發
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 | 只看該作者
燃眉之急好資料,謝謝分享
回復

使用道具 舉報

5#
ID:72050 發表于 2015-5-7 20:38 來自手機 | 只看該作者
我看看,正在學習中
回復

使用道具 舉報

6#
ID:73949 發表于 2015-5-7 22:33 | 只看該作者
學習學習,謝謝分享!
回復

使用道具 舉報

7#
ID:21178 發表于 2015-9-10 14:02 | 只看該作者
好資料,正在研究
回復

使用道具 舉報

8#
ID:102155 發表于 2016-1-6 21:56 | 只看該作者
看看,正好手頭上有類似項目
回復

使用道具 舉報

9#
ID:81035 發表于 2016-1-11 18:51 | 只看該作者
很好的資料,謝謝分享!
回復

使用道具 舉報

10#
ID:122173 發表于 2016-5-20 14:29 | 只看該作者
很好的資料,謝謝分享!
回復

使用道具 舉報

11#
ID:46028 發表于 2016-5-27 13:27 | 只看該作者
多謝分享,參考一下
回復

使用道具 舉報

12#
ID:167267 發表于 2017-4-15 23:14 | 只看該作者
正在找這個資料。。。。
回復

使用道具 舉報

13#
ID:137676 發表于 2017-4-17 00:00 | 只看該作者
真是雪中送炭啊,找了很久的資料啊!謝謝分享
回復

使用道具 舉報

14#
ID:165122 發表于 2018-3-19 11:10 | 只看該作者
學習學習!
回復

使用道具 舉報

15#
ID:339428 發表于 2018-5-27 23:07 | 只看該作者
很給力
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文天堂在线观看 | 亚洲欧美在线观看 | 国产人成精品一区二区三 | 人人澡人人射 | 日韩在线一区二区三区 | 九九免费视频 | 我要看一级片 | 国产精品久久久久一区二区三区 | 中文字幕av在线 | 国产欧美日韩在线一区 | 成人久久久久久久久 | 亚洲一区二区三区四区在线观看 | 欧美男人天堂 | 黄网站在线播放 | 成人精品鲁一区一区二区 | avmans最新导航地址 | 精品国产黄a∨片高清在线 成人区精品一区二区婷婷 日本一区二区视频 | 中文字幕av在线播放 | 精品国产免费人成在线观看 | 日韩免费视频 | 午夜影院在线视频 | 亚洲人成免费 | 日韩乱码一二三 | 九一国产精品 | 国产一区二区三区久久久久久久久 | 91精品91久久久 | 在线观看国产h | 久久综合久色欧美综合狠狠 | 精品久久久久久一区二区 | 国产精品一级在线观看 | 亚洲欧美中文字幕在线观看 | 激情麻豆视频 | 国产精品99999999 | 国产精品国产精品 | 青春草国产 | 欧美a级成人淫片免费看 | 国产精品久久久久久久久图文区 | 婷婷狠狠| 日韩中文字幕 | 成人免费在线播放视频 | 久久精品国产久精国产 |