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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1807|回復: 0
收起左側

LCD12864顯示變量,顯示數字 單片機程序

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

單片機源程序如下:

  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);        //顯示模式設置,開始要求每次檢測忙信號
  8.         lcd12864_write_cmd(0x01);        //顯示清屏
  9.         lcd12864_write_cmd(0x06);        //顯示光標移動設置
  10.         lcd12864_write_cmd(0x0C);        //顯示開及光標設置

  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. //寫數據
  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. * 函 數 名       : lcd12864_show_char
  43. * 函數功能                 : LCD12864顯示一個字符
  44. * 輸    入       : x,y:顯示坐標,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);      //這里不檢測忙信號,發送地址碼
  68.         lcd12864_write_data(DData);
  69. }

  70. /*******************************************************************************
  71. * 函 數 名       : lcd12864_show_string
  72. * 函數功能                 : LCD12864顯示字符串
  73. * 輸    入       : x,y:顯示坐標,x=0~7,y=0~3;
  74.                                    DData:顯示字符串數據
  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之內
  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);     //發送地址碼
  100.         while (DData[ListLength] >= 0x20) { //若到達字串尾則退出
  101.                 if (X <= 0x0F) { //X坐標應小于0x0F
  102.                         lcd12864_write_data(DData[ListLength]);
  103.                         ListLength++;
  104.                         X++;
  105.                         delay_ms(5);
  106.                 }
  107.         }
  108. }




  109. /*******************************************************************************
  110. * 函 數 名       : lcd12864_show_num
  111. * 函數功能                 : LCD12864顯示數字
  112. * 輸    入       : x,y:顯示坐標,x=0~7,y=0~3;
  113.                                    number:顯示字符串數據
  114.                    Length:要顯示數字的長度
  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. * 函 數 名       : lcd12864_show_image
  138. * 函數功能                 : 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]); //讀取數據寫入LCD
  157.             }
  158.             tmp +=16;
  159.         }
  160.     }
  161.     lcd12864_write_cmd(0x36);        //擴充功能設定
  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;//數據命令選擇
  169. sbit LCD12864_WR=P2^5;//讀寫選擇
  170. sbit LCD12864_E=P2^7;//使能信號

  171. #define LCD12864_DATAPORT        P0        //LCD12864數據端口定義
  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);     //寫數據
  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);    //顯示一串數字



  181. #endif


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

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

  194. /*******************************************************************************
  195. * 函 數 名       : delay_ms
  196. * 函數功能                 : ms延時函數,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;        //對系統默認數據類型進行重定義
  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
復制代碼
原理圖: 無
仿真: 無
代碼: lcd12864.zip (2.54 KB, 下載次數: 19)

評分

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

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久在线 | 午夜免费小视频 | 欧美理伦| 青青草国产成人av片免费 | 国产精品一区二区三区免费 | 毛片网站视频 | 日本视频一区二区三区 | 免费黄色一级 | 国内精品在线播放 | 国产欧美精品一区二区三区 | av免费在线观看网站 | 欧美一区二区三区在线视频 | 五月天久久久 | 欧美日韩亚洲视频 | 九九久久精品 | 婷婷色婷婷 | 中文字幕一区二 | 国产福利在线播放 | 国产男女无遮挡猛进猛出 | 真实人妻互换毛片视频 | 日韩视频在线免费观看 | 午夜国产在线观看 | 国产精品久久久久久精 | 青青草网站| 天天射天天 | 精品亚洲国产成人av制服丝袜 | 黄色日批视频 | 日本高清网站 | 日韩欧美视频在线 | 美女网站视频在线观看 | 法国极品成人h版 | 四虎看片 | 亚洲影音| 亚洲综合天堂 | 午夜av在线播放 | 日本丰满少妇做爰爽爽 | 久久精品久久久久久久 | 国产高清久久 | 在线观看av片 | 中文字幕免费在线观看 | 亚洲天堂中文字幕 |