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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1610|回復(fù): 0
收起左側(cè)

LCD12864顯示變量,顯示數(shù)字 單片機(jī)程序

[復(fù)制鏈接]
ID:1069230 發(fā)表于 2023-10-20 15:37 | 顯示全部樓層 |閱讀模式
最近想用LCD12864顯示變量,但是商家并沒有提供此函數(shù),在網(wǎng)上找了好久,終于找到了,稍微改進(jìn)了一下

單片機(jī)源程序如下:

  1. lcd12864.c如下

  2. #include "lcd12864.h"

  3. //LCD初始化
  4. void lcd12864_init(void)
  5. {
  6.         LCD12864_PSB = 1; //選擇8位或4位并口方式
  7.         lcd12864_write_cmd(0x30);        //顯示模式設(shè)置,開始要求每次檢測忙信號
  8.         lcd12864_write_cmd(0x01);        //顯示清屏
  9.         lcd12864_write_cmd(0x06);        //顯示光標(biāo)移動設(shè)置
  10.         lcd12864_write_cmd(0x0C);        //顯示開及光標(biāo)設(shè)置

  11. }

  12. //寫指令
  13. void lcd12864_write_cmd(u8 cmd)
  14. {

  15.         LCD12864_RS = 0;
  16.         LCD12864_WR = 0;
  17.         LCD12864_E = 0;
  18.         LCD12864_DATAPORT = cmd;
  19.         delay_ms(1);
  20.         LCD12864_E = 1;
  21.         delay_ms(1);
  22.         LCD12864_E = 0;
  23. }

  24. //寫數(shù)據(jù)
  25. void lcd12864_write_data(u8 dat)
  26. {

  27.         LCD12864_RS = 1;
  28.         LCD12864_WR = 0;
  29.         LCD12864_E = 0;
  30.         LCD12864_DATAPORT = dat;
  31.         delay_ms(1);
  32.         LCD12864_E = 1;
  33.         delay_ms(1);
  34.         LCD12864_E = 0;
  35. }

  36. //清屏
  37. void lcd12864_clear(void)
  38. {
  39.         lcd12864_write_cmd(0x01);        //顯示清屏
  40. }

  41. /*******************************************************************************
  42. * 函 數(shù) 名       : lcd12864_show_char
  43. * 函數(shù)功能                 : LCD12864顯示一個字符
  44. * 輸    入       : x,y:顯示坐標(biāo),x=0~7,y=0~3;
  45.                                    DData:顯示的字符
  46. * 輸    出             : 無
  47. *******************************************************************************/
  48. void lcd12864_show_char(u8 X, u8 Y, u8 DData)
  49. {
  50.         if(Y<=0)Y=0;
  51.         if(Y>3)Y=3;
  52.         X &= 0x0F;      //限制X不能大于16,Y不能大于1
  53.         switch (Y) {
  54.                 case 0:
  55.                         X |= 0x80;
  56.                         break;
  57.                 case 1:
  58.                         X |= 0x90;
  59.                         break;
  60.                 case 2:
  61.                         X |= 0x88;
  62.                         break;
  63.                 case 3:
  64.                         X |= 0x98;
  65.                         break;
  66.         }

  67.         lcd12864_write_cmd(X);      //這里不檢測忙信號,發(fā)送地址碼
  68.         lcd12864_write_data(DData);
  69. }

  70. /*******************************************************************************
  71. * 函 數(shù) 名       : lcd12864_show_string
  72. * 函數(shù)功能                 : LCD12864顯示字符串
  73. * 輸    入       : x,y:顯示坐標(biāo),x=0~7,y=0~3;
  74.                                    DData:顯示字符串?dāng)?shù)據(jù)
  75. * 輸    出             : 無
  76. *******************************************************************************/
  77. void lcd12864_show_string(u8 X, u8 Y, u8 *DData)
  78. {
  79.         u8 ListLength, X2;
  80.         ListLength = 0;
  81.         X2 = X;
  82.         if(Y<=0)Y=0;
  83.         if(Y>3)Y=3;
  84.         X &= 0x0F;      //限制X不能大于16,Y在1-4之內(nèi)
  85.         switch (Y) {
  86.                 case 0:
  87.                         X2 |= 0x80;
  88.                         break;
  89.                 case 1:
  90.                         X2 |= 0x90;
  91.                         break;
  92.                 case 2:
  93.                         X2 |= 0x88;
  94.                         break;
  95.                 case 3:
  96.                         X2 |= 0x98;
  97.                         break;
  98.         }
  99.         lcd12864_write_cmd(X2);     //發(fā)送地址碼
  100.         while (DData[ListLength] >= 0x20) { //若到達(dá)字串尾則退出
  101.                 if (X <= 0x0F) { //X坐標(biāo)應(yīng)小于0x0F
  102.                         lcd12864_write_data(DData[ListLength]);
  103.                         ListLength++;
  104.                         X++;
  105.                         delay_ms(5);
  106.                 }
  107.         }
  108. }




  109. /*******************************************************************************
  110. * 函 數(shù) 名       : lcd12864_show_num
  111. * 函數(shù)功能                 : LCD12864顯示數(shù)字
  112. * 輸    入       : x,y:顯示坐標(biāo),x=0~7,y=0~3;
  113.                                    number:顯示字符串?dāng)?shù)據(jù)
  114.                    Length:要顯示數(shù)字的長度
  115. * 輸    出             : 無
  116. *******************************************************************************/

  117. void lcd12864_show_num(u8 X, u8 Y, u32 number, u8 Length)
  118. {
  119.         u8 array[11];
  120.         u8 i;
  121.         array[Length] = 0;


  122.         for (i = Length; i > 0; i--) {
  123.                 array[i - 1] = number % 10 + '0';
  124.                 number /= 10;
  125.         }

  126.         for (i = 0; i < Length - 1; i++) {
  127.                 if (array == '0') {
  128.                         array = ' ';
  129.                 }
  130.                 else {
  131.                         break;
  132.                 }
  133.         }
  134.         lcd12864_show_string(X, Y, array);
  135. }

  136. /*******************************************************************************
  137. * 函 數(shù) 名       : lcd12864_show_image
  138. * 函數(shù)功能                 : LCD12864顯示圖片
  139. * 輸    入       : DData:要顯示的圖片
  140.                     陰碼,順向(高位在前),逐行
  141. * 輸    出             : 無
  142. *******************************************************************************/

  143. void lcd12864_show_image(u8 code *DData)
  144. {
  145.     u8 x, y, i;
  146.     u16 tmp = 0;
  147.     for(i = 0; i < 9; i+=8)     //分兩屏,上半屏和下半屏
  148.     {
  149.         for(x=0; x<32; x++)
  150.         {
  151.             lcd12864_write_cmd(0x34);
  152.             lcd12864_write_cmd(0x80+x);      //列地址
  153.             lcd12864_write_cmd(0x80+i);      //行地址,下半屏
  154.             for(y=0;y<16;y++)
  155.             {
  156.                 lcd12864_write_data(DData[tmp+y]); //讀取數(shù)據(jù)寫入LCD
  157.             }
  158.             tmp +=16;
  159.         }
  160.     }
  161.     lcd12864_write_cmd(0x36);        //擴(kuò)充功能設(shè)定
  162.     lcd12864_write_cmd(0x30);
  163. }


  164. lcd12864.h如下


  165. #ifndef _lcd12864_H
  166. #define _lcd12864_H

  167. #include "public.h"

  168. sbit LCD12864_RS=P2^6;//數(shù)據(jù)命令選擇
  169. sbit LCD12864_WR=P2^5;//讀寫選擇
  170. sbit LCD12864_E=P2^7;//使能信號

  171. #define LCD12864_DATAPORT        P0        //LCD12864數(shù)據(jù)端口定義
  172. sbit LCD12864_PSB=P3^2;//8位或4并口/串口選擇


  173. void lcd12864_init(void);     //LCD初始化
  174. void lcd12864_write_cmd(u8 WCLCD);    //寫指令
  175. void lcd12864_write_data(u8 WDLCD);     //寫數(shù)據(jù)
  176. void lcd12864_clear(void);                //清屏
  177. void lcd12864_show_char(u8 X,u8 Y,u8 DData);   //顯示一個字符
  178. void lcd12864_show_string(u8 X, u8 Y, u8 *DData);   //顯示一串字符
  179. void lcd12864_show_image(u8 code *DData);   //顯示圖形
  180. void lcd12864_show_num(u8 X, u8 Y, u32 number,u8 Length);    //顯示一串?dāng)?shù)字



  181. #endif


  182. public.c
  183. #include "public.h"

  184. /*******************************************************************************
  185. * 函 數(shù) 名       : delay_10us
  186. * 函數(shù)功能                 : 延時函數(shù),ten_us=1時,大約延時10us
  187. * 輸    入       : ten_us
  188. * 輸    出             : 無
  189. *******************************************************************************/
  190. void delay_10us(u16 ten_us)
  191. {
  192.         while(ten_us--);      
  193. }

  194. /*******************************************************************************
  195. * 函 數(shù) 名       : delay_ms
  196. * 函數(shù)功能                 : ms延時函數(shù),ms=1時,大約延時1ms
  197. * 輸    入       : ms:ms延時時間
  198. * 輸    出             : 無
  199. *******************************************************************************/
  200. void delay_ms(u16 ms)
  201. {
  202.         u16 i,j;
  203.         for(i=ms;i>0;i--)
  204.                 for(j=110;j>0;j--);
  205. }

  206. public.h
  207. #ifndef _public_H
  208. #define _public_H

  209. #include "reg52.h"

  210. typedef unsigned int u16;        //對系統(tǒng)默認(rèn)數(shù)據(jù)類型進(jìn)行重定義
  211. typedef unsigned char u8;
  212. typedef unsigned long u32;

  213. void delay_10us(u16 ten_us);
  214. void delay_ms(u16 ms);

  215. #endif
復(fù)制代碼
原理圖: 無
仿真: 無
代碼: lcd12864.zip (2.54 KB, 下載次數(shù): 19)

評分

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

查看全部評分

回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产亚洲一区二区精品 | 免费视频99 | 黄色网址免费在线观看 | 成人免费视频在线观看 | 在线看黄免费 | 亚洲国产欧美日韩 | 亚洲欧美日韩精品久久亚洲区 | 成人免费看 | 午夜电影一区二区 | 日韩高清国产一区在线 | 国产福利在线 | 免费a网站 | 日韩欧美手机在线 | 久久亚| 欧美2区 | 天天干天天爱天天操 | 欧美中文在线 | 欧美最猛性xxxxx亚洲精品 | 九色国产 | 在线视频a| 国产精品3区 | 精品一级电影 | 在线中文字幕亚洲 | 欧美日韩专区 | 精品一区av | 国产午夜精品一区二区三区嫩草 | 欧美视频1区 | 91精品国产91久久久久福利 | 亚洲一区二区视频 | 亚洲精品视频在线播放 | av色在线 | 无码一区二区三区视频 | 亚洲欧美自拍偷拍视频 | 免费在线观看av片 | 午夜手机在线视频 | 国产午夜一级 | 久久久久久国产精品免费免费狐狸 | 视频一二区| 日韩精品一区二区三区在线播放 | 成人伊人 | 区一区二在线观看 |