单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 213|回复: 0
打印 上一主题 下一主题
收起左侧

分享一个简单且可行的LCD12864的显示 单片机程序

[复制链接]
跳转到指定楼层
楼主
在用51单片机做停车场实验的时候一直无法让LCD12864正常显示,用了比较久的时候才完成了这样一个简单且可行的程序,亲测可用。并附上LCD12864的手册与ST7920中文字型码表。这是实验时成功显示的图片:

代码如下:
  1. #include "reg52.h"         /
  2. #include "intrins.h"
  3. #define LCD_DB  P0         //LCD12864显示数据接口定义
  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;          //停车场可用空间                 
  11. u16 time1;                                         //停车时间
  12. u8 fee;                                                 //停车费用
  13. //---车牌首位汉字显示数据编码---//
  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};  //贵 琼 川 桂 云 藏 陕 甘 青 宁 新 无        
  17. u8 car1[10]={22,0x11,0x11,0x12,0x01,0x02,0x03,13};         //车辆账户信息:车牌省位0,车牌市位1,号牌编号2~6,余额7


  18. void delay_12864(u16 del)                //LCD12864延时函数
  19. {
  20. u16 i;
  21. for(i = 0; i < del; i++){; }
  22. }

  23. void Init_LCD(void)                           //初始化LCD控制端口函数
  24. {
  25.    LCD_RS=1;                                  //输出数据LCD_RS和LCD_EN清零
  26.    LCD_RW=0;
  27.    LCD_EN=0;
  28. }

  29. void LCD_write_command(u8 command)          //LCD12864写指令函数
  30. {
  31. LCD_EN=0;
  32. LCD_RS=0;         //写指令
  33. LCD_RW=0;         //写入
  34. LCD_DB=command;//赋值给D0-D7对应的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写数据函数
  41. {
  42. LCD_EN=0;
  43. LCD_RS=1;          //写数据
  44. LCD_RW=0;          //写入
  45. LCD_DB=dat;//赋值给D0-D7对应的IO引脚
  46. delay_12864(50);
  47. LCD_EN=1;           //允许
  48. delay_12864(50);
  49. LCD_EN=0;
  50. }

  51. void LCD_init(void)                                //初始化LCD12864显示设置函数
  52. {
  53. delay_12864(10000);
  54. LCD_write_command(0x30);//功能设置
  55. delay_12864(20);
  56. LCD_write_command(0x30);//功能设置
  57. delay_12864(20);
  58. LCD_write_command(0x0c);//显示开关控制
  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显示函数
  66. {
  67.      Init_LCD();                              //初始化LCD控制端口
  68.      LCD_init();                          //初始化LCD显示设置
  69.          LCD_write_command(0x80);        //第一行数据指针地址
  70. //-------------第一行显示内容-------------//
  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'); //空车位个位
  83.      LCD_write_data(0xB8); //个
  84.      LCD_write_data(0xF6);
  85.      LCD_write_data(0x20);
  86.      LCD_write_data(0x20);
  87. //-------------第三行显示内容-------------//
  88.      LCD_write_data(0xCA); //时  
  89.      LCD_write_data(0xB1);
  90.      LCD_write_data(0xB3); //长
  91.      LCD_write_data(0xA4);
  92.      LCD_write_data(0xA1); //:
  93.      LCD_write_data(0xC3);
  94.      LCD_write_data(time1/600+'0'); //停车小时 十位
  95.      LCD_write_data(time1/60%10+'0'); //停车小时 个位
  96.      LCD_write_data(0xD0); //小
  97.      LCD_write_data(0xA1); //
  98.      LCD_write_data(0xCA); //时
  99.      LCD_write_data(0xB1); //
  100.      LCD_write_data(time1%60/10+'0'); //停车分钟 十位
  101.      LCD_write_data(time1%60%10+'0'); //停车分钟 个位
  102.      LCD_write_data(0xB7); //分
  103.      LCD_write_data(0xD6); //
  104. //-------------第二行显示内容-------------//
  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); //号
  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'); //车牌号编码
  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. //-------------第四行显示内容-------------//
  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); //费
  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'); //停车费十位
  133.      LCD_write_data(fee%10+'0'); //停车费个位
  134.      LCD_write_data(0xD4); //元
  135.      LCD_write_data(0xAA); //
  136.      LCD_write_data(0xA1); //无
  137.      LCD_write_data(0xA0);
  138.          delay_12864(10);   
  139. }


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

  145. while(1)               
  146. {         
  147.          LCD_SHOW();                //LCD12864进行显示
  148. }  
  149. }
复制代码


全部资料51hei下载地址:
程序代码及LCD12864相关资料.zip (3.92 MB, 下载次数: 13)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 转播转播 分享分享 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|单片机论坛 |51黑电子论坛技术交流 QQ 管理员QQ:125739409;技术交流QQ群636986012

Powered by 单片机教程网

快速回复 返回顶部 返回列表