找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

分享一個(gè)簡(jiǎn)單且可行的LCD12864的顯示 單片機(jī)程序

  [復(fù)制鏈接]
ID:513514 發(fā)表于 2019-9-20 16:24 | 顯示全部樓層 |閱讀模式
在用51單片機(jī)做停車場(chǎng)實(shí)驗(yàn)的時(shí)候一直無(wú)法讓LCD12864正常顯示,用了比較久的時(shí)候才完成了這樣一個(gè)簡(jiǎn)單且可行的程序,親測(cè)可用。并附上LCD12864的手冊(cè)與ST7920中文字型碼表。這是實(shí)驗(yàn)時(shí)成功顯示的圖片:

這是實(shí)驗(yàn)時(shí)成功顯示的圖片

這是實(shí)驗(yàn)時(shí)成功顯示的圖片

代碼如下:
  1. #include "reg52.h"         /
  2. #include "intrins.h"
  3. #define LCD_DB  P0         //LCD12864顯示數(shù)據(jù)接口定義
  4. typedef unsigned char u8;
  5. typedef unsigned int u16;

  6. sbit LCD_RS=P2^6;         //定義LCD12864使用的IO口
  7. sbit LCD_RW=P2^5;
  8. sbit LCD_EN=P2^7;
  9. sbit DSdat=P3^4;

  10. u8 usablespace;          //停車場(chǎng)可用空間                 
  11. u16 time1;                                         //停車時(shí)間
  12. u8 fee;                                                 //停車費(fèi)用
  13. //---車牌首位漢字顯示數(shù)據(jù)編碼---//
  14. code u16 platenumber[32]={0xBEA9,0xBDF2,0xBBA6,0xD3E5,0xD5E3,0xC3F6,0xD4C1,0xBCBD,0xBDFA,0xC3C9,        //京 津 滬 渝 浙 閩 粵 冀 晉 蒙
  15.                           0xC1C9,0xBCAA,0xBADA,0xCBD5,0xCDEE,0xB8D3,0xC2B3,0xD4A5,0xB6F5,0xCFE6,    //遼 吉 黑 蘇 皖 贛 魯 豫 鄂 湘
  16.                                       0xB9F3,0xC7ED,0xB4A8,0xB9F1,0xD4C6,0xB2D8,0xC9C2,0xB8CA,0xC7E0,0xC4FE,0xD0C2,0xA1A0};  //貴 瓊 川 桂 云 藏 陜 甘 青 寧 新 無(wú)        
  17. u8 car1[10]={22,0x11,0x11,0x12,0x01,0x02,0x03,13};         //車輛賬戶信息:車牌省位0,車牌市位1,號(hào)牌編號(hào)2~6,余額7


  18. void delay_12864(u16 del)                //LCD12864延時(shí)函數(shù)
  19. {
  20. u16 i;
  21. for(i = 0; i < del; i++){; }
  22. }

  23. void Init_LCD(void)                           //初始化LCD控制端口函數(shù)
  24. {
  25.    LCD_RS=1;                                  //輸出數(shù)據(jù)LCD_RS和LCD_EN清零
  26.    LCD_RW=0;
  27.    LCD_EN=0;
  28. }

  29. void LCD_write_command(u8 command)          //LCD12864寫(xiě)指令函數(shù)
  30. {
  31. LCD_EN=0;
  32. LCD_RS=0;         //寫(xiě)指令
  33. LCD_RW=0;         //寫(xiě)入
  34. LCD_DB=command;//賦值給D0-D7對(duì)應(yīng)的IO引腳
  35. delay_12864(50);
  36. LCD_EN=1;          //允許
  37. delay_12864(50);  
  38. LCD_EN=0;
  39. }

  40. void LCD_write_data(u8 dat)                        //LCD12864寫(xiě)數(shù)據(jù)函數(shù)
  41. {
  42. LCD_EN=0;
  43. LCD_RS=1;          //寫(xiě)數(shù)據(jù)
  44. LCD_RW=0;          //寫(xiě)入
  45. LCD_DB=dat;//賦值給D0-D7對(duì)應(yīng)的IO引腳
  46. delay_12864(50);
  47. LCD_EN=1;           //允許
  48. delay_12864(50);
  49. LCD_EN=0;
  50. }

  51. void LCD_init(void)                                //初始化LCD12864顯示設(shè)置函數(shù)
  52. {
  53. delay_12864(10000);
  54. LCD_write_command(0x30);//功能設(shè)置
  55. delay_12864(20);
  56. LCD_write_command(0x30);//功能設(shè)置
  57. delay_12864(20);
  58. LCD_write_command(0x0c);//顯示開(kāi)關(guān)控制
  59. delay_12864(20);
  60. LCD_write_command(0x01);//顯示清除
  61. delay_12864(1200);
  62. LCD_write_command(0x06);//顯示清除
  63. delay_12864(50);
  64. }

  65. void LCD_SHOW()                                  //LCD顯示函數(shù)
  66. {
  67.      Init_LCD();                              //初始化LCD控制端口
  68.      LCD_init();                          //初始化LCD顯示設(shè)置
  69.          LCD_write_command(0x80);        //第一行數(shù)據(jù)指針地址
  70. //-------------第一行顯示內(nèi)容-------------//
  71.      LCD_write_data(0xBF); //空   
  72.      LCD_write_data(0xD5);
  73.      LCD_write_data(0xB3); //車
  74.      LCD_write_data(0xB5);
  75.      LCD_write_data(0xCE); //位
  76.      LCD_write_data(0xBB);
  77.          LCD_write_data(0xA1); //:
  78.      LCD_write_data(0xC3);
  79.      LCD_write_data(0x20);
  80.      LCD_write_data(0x20);
  81.          LCD_write_data(usablespace/10+'0'); //空車位十位
  82.      LCD_write_data(usablespace%10+'0'); //空車位個(gè)位
  83.      LCD_write_data(0xB8); //個(gè)
  84.      LCD_write_data(0xF6);
  85.      LCD_write_data(0x20);
  86.      LCD_write_data(0x20);
  87. //-------------第三行顯示內(nèi)容-------------//
  88.      LCD_write_data(0xCA); //時(shí)  
  89.      LCD_write_data(0xB1);
  90.      LCD_write_data(0xB3); //長(zhǎng)
  91.      LCD_write_data(0xA4);
  92.      LCD_write_data(0xA1); //:
  93.      LCD_write_data(0xC3);
  94.      LCD_write_data(time1/600+'0'); //停車小時(shí) 十位
  95.      LCD_write_data(time1/60%10+'0'); //停車小時(shí) 個(gè)位
  96.      LCD_write_data(0xD0); //小
  97.      LCD_write_data(0xA1); //
  98.      LCD_write_data(0xCA); //時(shí)
  99.      LCD_write_data(0xB1); //
  100.      LCD_write_data(time1%60/10+'0'); //停車分鐘 十位
  101.      LCD_write_data(time1%60%10+'0'); //停車分鐘 個(gè)位
  102.      LCD_write_data(0xB7); //分
  103.      LCD_write_data(0xD6); //
  104. //-------------第二行顯示內(nèi)容-------------//
  105.      LCD_write_data(0xB3); //車  
  106.      LCD_write_data(0xB5);
  107.      LCD_write_data(0xC5); //牌
  108.      LCD_write_data(0xC6);
  109.      LCD_write_data(0xBA); //號(hào)
  110.      LCD_write_data(0xC5);
  111.      LCD_write_data(0xA1); //:
  112.      LCD_write_data(0xC3); //
  113.      LCD_write_data(platenumber[car1[0]]>>8); //車牌省位
  114.      LCD_write_data(platenumber[car1[0]]&0xff);
  115.      LCD_write_data(car1[1]+'0'); //車牌市位
  116.      LCD_write_data(car1[2]+'0'); //車牌號(hào)編碼
  117.      LCD_write_data(car1[3]+'0');
  118.      LCD_write_data(car1[4]+'0');
  119.      LCD_write_data(car1[5]+'0');
  120.      LCD_write_data(car1[6]+'0');
  121. //-------------第四行顯示內(nèi)容-------------//
  122.      LCD_write_data(0xCD); //停  
  123.      LCD_write_data(0xA3);
  124.      LCD_write_data(0xB3); //車
  125.      LCD_write_data(0xB5);
  126.      LCD_write_data(0xB7); //費(fèi)
  127.      LCD_write_data(0xD1);
  128.      LCD_write_data(0xD3); //用
  129.      LCD_write_data(0xC3); //
  130.      LCD_write_data(0xA1); //:
  131.      LCD_write_data(0xC3); //
  132.      LCD_write_data(fee/10+'0'); //停車費(fèi)十位
  133.      LCD_write_data(fee%10+'0'); //停車費(fèi)個(gè)位
  134.      LCD_write_data(0xD4); //元
  135.      LCD_write_data(0xAA); //
  136.      LCD_write_data(0xA1); //無(wú)
  137.      LCD_write_data(0xA0);
  138.          delay_12864(10);   
  139. }


  140. void main()                        //主函數(shù)
  141. {
  142.   usablespace=50;
  143.   time1=33;
  144.   fee=5;

  145. while(1)               
  146. {         
  147.          LCD_SHOW();                //LCD12864進(jìn)行顯示
  148. }  
  149. }
復(fù)制代碼
0.png

全部資料51hei下載地址:
程序代碼及LCD12864相關(guān)資料.zip (3.92 MB, 下載次數(shù): 109)

評(píng)分

參與人數(shù) 2黑幣 +80 收起 理由
songhetai + 30 共享資料的黑幣獎(jiǎng)勵(lì)!
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:701369 發(fā)表于 2020-3-10 17:55 | 顯示全部樓層
請(qǐng)問(wèn)DSDATA是什么?如何連接?
回復(fù)

使用道具 舉報(bào)

ID:891154 發(fā)表于 2021-7-26 16:00 | 顯示全部樓層
這是帶字庫(kù)的嗎
回復(fù)

使用道具 舉報(bào)

ID:960749 發(fā)表于 2021-8-18 15:43 | 顯示全部樓層
您好,請(qǐng)問(wèn)有連接的電路圖嗎?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表