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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

HDG12864L-6 STC15W4K32S4仿真顯示文字

[復制鏈接]
跳轉到指定樓層
樓主
HDG12864L-6 STC15W4K32S4仿真顯示文字 程序來源于網上

個人學習 領會 理解  程序通過  仿真顯示如下
  1. #include "STC15W4K32S4.h"     //單片機定義文件
  2. #include "intrins.h"          //調用_nop_();延時函數用
  3. #include "pixel.h"            //字符和漢字

  4. #define LCD_Data_Out P0

  5. sbit  RW = P1^0;
  6. sbit  RS = P1^1;
  7. sbit  RST= P1^2;
  8. sbit  CS = P1^3;
  9. sbit  E  = P1^4;

  10. #define X_WIDTH 132
  11. #define Y_WIDTH 64

  12. //*****************延時********************
  13. void delay_ms(uint t)
  14. {
  15.          int ii,jj;
  16.          if(t<1)  t=1;
  17.          for(ii = 0; ii < t; ii++)
  18.           for(jj = 0; jj < 2670; jj++);    //busclk:16MHz--1ms
  19. }
  20. /***************************LCD12864************************/
  21. //**************************寫命令**************************
  22. void LCD_WrCmd(byte cmd)      //寫命令
  23. {
  24.          RS = 0;  CS = 0;  RW = 0;  E = 1;
  25.          P0 = cmd;
  26.          _nop_();
  27.    E = 0;
  28. }
  29. //**************************寫數據**************************
  30. void LCD_WrDat(byte date)      //--寫數據
  31. {
  32.    RS = 1;  CS = 0;  RW = 0;  E = 1;
  33.    P0 = date;
  34.    _nop_();
  35.    E = 0;
  36. }
  37. //************************清屏*****************************
  38. void LCD_Fill(byte bmp_data)
  39. {
  40.          byte y,x;
  41.          for(y = 0; y < 8; y++)     //分頁,總共8頁
  42.          {
  43.                   LCD_WrCmd(0xb0+y);      //設置頁地址
  44.                   LCD_WrCmd(0x01);        //設置column地址低地址
  45.                   LCD_WrCmd(0x10);        //設置column地址高地址
  46.                   for(x = 0; x < X_WIDTH; x++)
  47.        LCD_WrDat(bmp_data);
  48.    }
  49. }
  50. //*************************定指針坐標***********************
  51. void LCD_Set_Pos(byte x, byte y)    //定坐標,指針的位置
  52. {
  53.          LCD_WrCmd(0xb0+y);               //定初始頁 ---P39
  54.          LCD_WrCmd(((x&0xf0)>>4)|0x10);   //坐標在column的位置MSB ---P40
  55.          LCD_WrCmd((x&0x0f)|0x01);        //LSB 0X01 ---P40
  56. }
  57. //************************LCD初始化*************************
  58. void LCD_Init(void)
  59. {
  60.          RST = 0;                //指令表---P37
  61.          delay_ms(10);
  62.          RST = 1;
  63.          delay_ms(0);
  64.          LCD_WrCmd(0xaf);        //0xaf LCD On ---P39
  65.          LCD_WrCmd(0x2f);        //0x2f 設置上電控制模式 ---P44
  66.          LCD_WrCmd(0x81);        //0x81 電量設置模式(顯示亮度---P45
  67.          LCD_WrCmd(0x1a);        //指令數據0x0000~0x003f
  68.          LCD_WrCmd(0x24);        //0x24 V5內部電壓調節電阻設置---P45
  69.          LCD_WrCmd(0xa2);        //0xa2 5V,0xa1 3V3   LCD偏壓設置---P42
  70.          LCD_WrCmd(0xc0);        //0xc8 正常,0xc0 倒置  Com 掃描方式設置
  71.          LCD_WrCmd(0xa1);        //0xa0 正常,0xa1 反向  Segment方向選擇---P42
  72.          LCD_WrCmd(0xa4);        //0xa4 全屏點亮/變暗指令 ---P42
  73.          LCD_WrCmd(0xa6);        //0xa6 正向反向顯示控制指令 ---P42
  74.          LCD_WrCmd(0xac);        //0xac 關閉靜態指示器---P46
  75.          LCD_WrCmd(0x00);        //指令數據  
  76.          LCD_WrCmd(0x40+32);     //0x40+32 設置顯示起始行對應RAM---P39
  77.          LCD_Fill(0x00);         //初始清屏
  78.          LCD_Set_Pos(0,0);       //指針的位置
  79. }
  80. /******************************輸出字符****************************/
  81. void LCD_P6x8Str(byte x,byte y,byte ch[])    //輸入字符
  82. {
  83.          byte c = 0, i = 0, j = 0;
  84.          while(ch[j]!='\0')
  85.    {
  86.                   c = ch[j]-48;      //F6x8[c][i]從032開始建立ASCLL碼數組,要查找,需減32
  87.                   if(x>126)
  88.         { x=0;y++; }
  89.       LCD_Set_Pos(x,y);
  90.       for(i=0;i<6;i++)
  91.       LCD_WrDat(F6x8[c][i]);
  92.       x += 6;
  93.       j++;
  94.    }
  95. }
  96. void LCD_P8x16Str(byte x,byte y,byte ch[])
  97. {
  98.          
  99. }
  100. /******************************輸出漢字字符串***********************/
  101. void LCD_P14x16Str(byte x,byte y,byte ch[])
  102. {
  103.          byte wm=0,ii = 0;      //字節:0xff
  104.          uint adder = 1;        //字:0xffff
  105.          while(ch[ii] != '\0')
  106.    {
  107.                   wm = 0;
  108.                   adder = 1;
  109.                   while(F14x16_Idx[wm] > 127)  //why
  110.       {
  111.          if(F14x16_Idx[wm] == ch[ii])
  112.          {
  113.             if(F14x16_Idx[wm + 1] == ch[ii + 1])
  114.             {
  115.                adder = wm * 14;
  116.                break;
  117.             }
  118.          }
  119.          wm += 2;
  120.       }
  121.       if(x>118)
  122.         { x=0; y++; }
  123.                         LCD_Set_Pos(x, y);
  124.                         if(adder != 1)          //顯示漢字
  125.                   {
  126.          LCD_Set_Pos(x, y);
  127.          for(wm = 0; wm < 14; wm++)
  128.          {
  129.                                     LCD_WrDat(F14x16[adder]);
  130.                                     adder += 1;
  131.                                  }
  132.                                  LCD_Set_Pos(x,y + 1);
  133.                                  for(wm = 0; wm < 14; wm++)
  134.                                  {
  135.                                           LCD_WrDat(F14x16[adder]);
  136.                                           adder += 1;
  137.                                  }
  138.                         }
  139.                         else       //顯示空白字符
  140.                         {
  141.          ii += 1;
  142.          LCD_Set_Pos(x,y);
  143.          for(wm = 0; wm < 16; wm++)
  144.          {
  145.             LCD_WrDat(0);
  146.          }
  147.          LCD_Set_Pos(x,y + 1);
  148.          for(wm = 0; wm < 16; wm++)
  149.          {
  150.             LCD_WrDat(0);
  151.          }
  152.       }
  153.       x += 14;
  154.       ii += 2;
  155.    }
  156. }
  157. //******************輸出漢字和字符混合字符串**********************
  158. void LCD_Print(byte x, byte y, byte ch[])
  159. {
  160.          byte ch2[3];
  161.          byte ii = 0;
  162.          while(ch[ii] != '\0')
  163.          {
  164.                   if(ch[ii] > 127)       //漢字的碼>127
  165.                   {
  166.                           ch2[0] = ch[ii];
  167.                           ch2[1] = ch[ii + 1];
  168.                           ch2[2] = '\0';       //漢字為兩個字節
  169.                           LCD_P14x16Str(x, y, ch2);   //顯示漢字
  170.                           x += 14;                    //不太理解
  171.                           ii += 2;
  172.       }
  173.                         else
  174.                   {
  175.                                 ch2[0] = ch[ii];
  176.                                 ch2[1] = '\0';              //字母占一個字節
  177.                                 LCD_P8x16Str(x, y, ch2);    //顯示字母
  178.                                 x += 8;
  179.         ii += 1;
  180.       }
  181.    }
  182. }
  183. void Draw_BMP(byte x0,byte y0,byte x1,byte y1,byte bmp[])
  184. {
  185.        
  186. }
  187. /**********************主函數*******************************/
  188. main()
  189. {
  190.          LCD_Init();     //LCD初始化
  191.          while(1)
  192.    {
  193.                   LCD_P6x8Str(0,5,"51");
  194.                   LCD_Print(12,4,"黑電子論壇");
  195.                   LCD_P6x8Str(12,7,"51");
  196.                   LCD_Print(24,14,"黑電子論壇");
  197.                   LCD_P6x8Str(24,9,"51");
  198.                   LCD_Print(36,0,"黑電子論壇");
  199.                   LCD_P6x8Str(33,2,"============");
  200.                   LCD_P6x8Str(0,3,"http:www51heicom");
  201.    }
  202. }
復制代碼
     

請教老師
1.void LCD_P8x16Str(byte x,byte y,byte ch[])
    8*16  數字函數 怎么寫?
2. 8*16 數字怎么取模?
3.void Draw_BMP(byte x0,byte y0,byte x1,byte y1,byte bmp[])
   顯示圖片函數 怎么寫?


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

使用道具 舉報

沙發
ID:44037 發表于 2021-1-11 22:08 | 只看該作者

回復

使用道具 舉報

板凳
ID:390416 發表于 2021-1-12 11:57 | 只看該作者
LCD12864中文資料包 容易看明白  http://www.zg4o1577.cn/bbs/dpj-200462-1.html

不知道我分享的資料 是不是和你的LCD一樣能用呢?
回復

使用道具 舉報

地板
ID:44037 發表于 2021-1-12 14:52 | 只看該作者
謝謝  不是我需要的
   上面程序有 14*16 函數   需要寫8*16 函數
          8*16 數字取模   不知方法  主要是如文字 取模  需 放倒 反轉 取模  才能正確 顯示
  顯示圖片函數
只有  void Draw_BMP(byte x0,byte y0,byte x1,byte y1,byte bmp[])  沒有內容
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线播放中文 | 久久久久久久久毛片 | 91网站视频在线观看 | av网站免费观看 | 久久精品一区二区三区四区 | 国产成人jvid在线播放 | 成人黄页在线观看 | av片免费观看 | 日本一区二区视频 | 日本免费一区二区三区四区 | 99热精品在线| 五十女人一级毛片 | 一级欧美 | 欧美中国少妇xxx性高请视频 | 99国产精品99久久久久久粉嫩 | 欧美在线观看免费观看视频 | 久久综合一区 | 男女羞羞的网站 | 欧美一级做性受免费大片免费 | 一区二区精品 | 免费成人高清在线视频 | 久久亚洲视频 | 福利片一区二区 | 国产在线中文 | 青青久草 | 999国产视频 | 日韩国产免费观看 | 99久久婷婷国产综合精品首页 | 久久久噜噜噜www成人网 | 国产精品a久久久久 | 国产在线精品一区二区三区 | 毛片久久久| 国产精品爱久久久久久久 | 日本精品一区二区三区视频 | 在线欧美小视频 | 亚洲精品99久久久久久 | h视频在线观看免费 | 国产精品亚洲一区二区三区在线 | 黄网站涩免费蜜桃网站 | 偷拍自拍第一页 | 成人福利网 |