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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機+LCD12864字體圖片顯示程序 Proteus仿真圖

[復制鏈接]
跳轉到指定樓層
樓主
按鈕1顯示字體,按鈕2顯示圖片
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include <at89x51.h>
  2. #define        RST P2_0
  3. #define        E P2_1
  4. #define        RW P2_2
  5. #define        DI P2_3
  6. #define        CS1 P2_5
  7. #define        CS2        P2_4
  8. #define        LCDPORT P0

  9. #define BUSYSTATUS P0_7                                  //忙狀態位。

  10. #define LCDSTARTROW 0xC0                          //設置起始行指令。
  11. #define LCDPAGE 0xB8                                  //設置頁指令。
  12. #define LCDLINE 0x40                                  //設置列指令。

  13. bit bCheckBusy()//讀忙標志位
  14. {
  15.         LCDPORT=0xFF;
  16.         RW=1;
  17.         DI=0;
  18.         E=1;
  19.         E=0;
  20.         return BUSYSTATUS;
  21. }

  22. void vWriteData(unsigned char ucData)//寫數據
  23. {
  24.         while(bCheckBusy());
  25.         LCDPORT=0xFF;

  26.         RW=0;
  27.         DI=1;
  28.         LCDPORT=ucData;
  29.         E=1;
  30.         E=0;
  31. }

  32. void vWriteCMD(unsigned char ucCMD)//寫指令
  33. {
  34.         while(bCheckBusy());
  35.         LCDPORT=0xFF;

  36.         RW=0;
  37.         DI=0;
  38.         LCDPORT=ucCMD;
  39.         E=1;
  40.         E=0;
  41. }

  42. void vLCDInitialize()//LCD初始化函數
  43. {
  44.         CS1=1;
  45.         CS2=1;
  46.         vWriteCMD(0x38);                //8位形式,兩行字符。
  47.         vWriteCMD(0x0F);                //開顯示。
  48.         vWriteCMD(0x01);                //清屏。
  49.         vWriteCMD(0x06);                //畫面不動,光標右移。
  50.         vWriteCMD(LCDSTARTROW);        //設置起始行。
  51. }

  52. //顯示自定義行
  53. //在8×128的格子里顯示自定義長度的一行
  54. void vShowCustomRow(unsigned char ucPage,unsigned char ucLine,unsigned char ucWidth,unsigned char *ucaRow)
  55. {
  56.         unsigned char ucCount;                                   //取值范圍:ucPage:0~7;ucLine:0~127;
  57.         if(ucLine<64)                                                   //ucWidth:0~127;ucLine+ucWidth<1128。
  58.                 {
  59.                 CS1=1;
  60.                 CS2=0;
  61.                 vWriteCMD(LCDPAGE+ucPage);
  62.                 vWriteCMD(LCDLINE+ucLine);
  63.                 if((ucLine+ucWidth)<64)
  64.                         {
  65.                         for(ucCount=0;ucCount<ucWidth;ucCount++)
  66.                                 vWriteData(*(ucaRow+ucCount));
  67.                         }
  68.                 else
  69.                         {
  70.                         for(ucCount=0;ucCount<64-ucLine;ucCount++)
  71.                                 vWriteData(*(ucaRow+ucCount));

  72.                         CS1=0;
  73.                         CS2=1;
  74.                         vWriteCMD(LCDPAGE+ucPage);
  75.                         vWriteCMD(LCDLINE);
  76.                         for(ucCount=64-ucLine;ucCount<ucWidth;ucCount++)
  77.                                 vWriteData(*(ucaRow+ucCount));
  78.                         }
  79.                 }
  80.         else
  81.                 {
  82.                 CS1=0;
  83.                 CS2=1;
  84.                 vWriteCMD(LCDPAGE+ucPage);
  85.                 vWriteCMD(LCDLINE+ucLine-64);
  86.                 for(ucCount=0;ucCount<ucWidth;ucCount++)
  87.                         vWriteData(*(ucaRow+ucCount));
  88.                 }
  89. }

  90. //此函數將16×16漢字顯示在8×128的格子里。 漢字顯示函數
  91. void vShowOneChin(unsigned char ucPage,unsigned char ucLine,unsigned char *ucaChinMap)
  92. {
  93.         vShowCustomRow(ucPage,ucLine,16,ucaChinMap);
  94.         vShowCustomRow(ucPage+1,ucLine,16,ucaChinMap+16);

  95. }

  96. //此函數將8×16字符顯示在8×128的格子里。 字符顯示函數
  97. void vShowOneChar(unsigned char ucPage,unsigned char ucLine,unsigned char *ucaCharMap)
  98. {
  99.         vShowCustomRow(ucPage,ucLine,8,ucaCharMap);
  100.         vShowCustomRow(ucPage+1,ucLine,8,ucaCharMap+8);

  101. }

  102. //顯示圖片
  103. void vShowGraph(unsigned char ucPage,unsigned char ucLine,unsigned char ucWidth,unsigned char ucHigh,unsigned char * ucaGraph)
  104. {
  105.         unsigned char ucCount;
  106.         for(ucCount=0;ucCount<ucHigh;ucCount++)
  107.                 vShowCustomRow(ucPage+ucCount,ucLine,ucWidth,ucaGraph+ucCount*ucWidth);
  108. }
復制代碼

Keil代碼與Proteus仿真下載:
lcd.7z (76.83 KB, 下載次數: 49)


評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品综合 | 国产在线视频一区二区 | 欧美精品在线视频 | 成人在线免费观看视频 | 成人h视频| 视频一二区 | 99久久婷婷国产综合精品电影 | 欧美一级视频免费看 | 午夜大片| 欧美日韩综合视频 | 人人人人干 | 国产日韩欧美在线 | 女同久久另类99精品国产 | 免费在线观看毛片 | 亚洲黄色国产 | 91视频一区二区三区 | 在线一区二区三区 | av免费在线播放 | 天天综合久久 | 国产伦精品一区二区三区视频金莲 | 亚洲激情在线观看 | 91精品国产综合久久久久久 | 欧美久久一区 | 久久久网 | 亚洲国产精品一区 | 欧美一区二区三区四区五区无卡码 | 国产不卡在线 | 久久精品综合 | 美美女高清毛片视频免费观看 | 欧美aaaa视频| 日韩精品免费一区二区在线观看 | 中文字幕爱爱视频 | 亚洲人成人一区二区在线观看 | 久久国产精品72免费观看 | 国产在线网站 | 日韩av免费看| 国产一区二区三区色淫影院 | 国产情侣在线看 | 一区精品视频在线观看 | 国产欧美精品一区二区色综合朱莉 | 午夜影院在线观看视频 |