在用51单片机做停车场实验的时候一直无法让LCD12864正常显示,用了比较久的时候才完成了这样一个简单且可行的程序,亲测可用。并附上LCD12864的手册与ST7920中文字型码表。这是实验时成功显示的图片:
代码如下:
- #include "reg52.h" /
- #include "intrins.h"
- #define LCD_DB P0 //LCD12864显示数据接口定义
- typedef unsigned char u8;
- typedef unsigned int u16;
- sbit LCD_RS=P2^6; //定义LCD12864使用的IO口
- sbit LCD_RW=P2^5;
- sbit LCD_EN=P2^7;
- sbit DSdat=P3^4;
- u8 usablespace; //停车场可用空间
- u16 time1; //停车时间
- u8 fee; //停车费用
- //---车牌首位汉字显示数据编码---//
- code u16 platenumber[32]={0xBEA9,0xBDF2,0xBBA6,0xD3E5,0xD5E3,0xC3F6,0xD4C1,0xBCBD,0xBDFA,0xC3C9, //京 津 沪 渝 浙 闽 粤 冀 晋 蒙
- 0xC1C9,0xBCAA,0xBADA,0xCBD5,0xCDEE,0xB8D3,0xC2B3,0xD4A5,0xB6F5,0xCFE6, //辽 吉 黑 苏 皖 赣 鲁 豫 鄂 湘
- 0xB9F3,0xC7ED,0xB4A8,0xB9F1,0xD4C6,0xB2D8,0xC9C2,0xB8CA,0xC7E0,0xC4FE,0xD0C2,0xA1A0}; //贵 琼 川 桂 云 藏 陕 甘 青 宁 新 无
- u8 car1[10]={22,0x11,0x11,0x12,0x01,0x02,0x03,13}; //车辆账户信息:车牌省位0,车牌市位1,号牌编号2~6,余额7
- void delay_12864(u16 del) //LCD12864延时函数
- {
- u16 i;
- for(i = 0; i < del; i++){; }
- }
-
- void Init_LCD(void) //初始化LCD控制端口函数
- {
- LCD_RS=1; //输出数据LCD_RS和LCD_EN清零
- LCD_RW=0;
- LCD_EN=0;
- }
- void LCD_write_command(u8 command) //LCD12864写指令函数
- {
- LCD_EN=0;
- LCD_RS=0; //写指令
- LCD_RW=0; //写入
- LCD_DB=command;//赋值给D0-D7对应的IO引脚
- delay_12864(50);
- LCD_EN=1; //允许
- delay_12864(50);
- LCD_EN=0;
- }
- void LCD_write_data(u8 dat) //LCD12864写数据函数
- {
- LCD_EN=0;
- LCD_RS=1; //写数据
- LCD_RW=0; //写入
- LCD_DB=dat;//赋值给D0-D7对应的IO引脚
- delay_12864(50);
- LCD_EN=1; //允许
- delay_12864(50);
- LCD_EN=0;
- }
- void LCD_init(void) //初始化LCD12864显示设置函数
- {
- delay_12864(10000);
- LCD_write_command(0x30);//功能设置
- delay_12864(20);
- LCD_write_command(0x30);//功能设置
- delay_12864(20);
- LCD_write_command(0x0c);//显示开关控制
- delay_12864(20);
- LCD_write_command(0x01);//显示清除
- delay_12864(1200);
- LCD_write_command(0x06);//显示清除
- delay_12864(50);
- }
- void LCD_SHOW() //LCD显示函数
- {
- Init_LCD(); //初始化LCD控制端口
- LCD_init(); //初始化LCD显示设置
- LCD_write_command(0x80); //第一行数据指针地址
- //-------------第一行显示内容-------------//
- LCD_write_data(0xBF); //空
- LCD_write_data(0xD5);
- LCD_write_data(0xB3); //车
- LCD_write_data(0xB5);
- LCD_write_data(0xCE); //位
- LCD_write_data(0xBB);
- LCD_write_data(0xA1); //:
- LCD_write_data(0xC3);
- LCD_write_data(0x20);
- LCD_write_data(0x20);
- LCD_write_data(usablespace/10+'0'); //空车位十位
- LCD_write_data(usablespace%10+'0'); //空车位个位
- LCD_write_data(0xB8); //个
- LCD_write_data(0xF6);
- LCD_write_data(0x20);
- LCD_write_data(0x20);
- //-------------第三行显示内容-------------//
- LCD_write_data(0xCA); //时
- LCD_write_data(0xB1);
- LCD_write_data(0xB3); //长
- LCD_write_data(0xA4);
- LCD_write_data(0xA1); //:
- LCD_write_data(0xC3);
- LCD_write_data(time1/600+'0'); //停车小时 十位
- LCD_write_data(time1/60%10+'0'); //停车小时 个位
- LCD_write_data(0xD0); //小
- LCD_write_data(0xA1); //
- LCD_write_data(0xCA); //时
- LCD_write_data(0xB1); //
- LCD_write_data(time1%60/10+'0'); //停车分钟 十位
- LCD_write_data(time1%60%10+'0'); //停车分钟 个位
- LCD_write_data(0xB7); //分
- LCD_write_data(0xD6); //
- //-------------第二行显示内容-------------//
- LCD_write_data(0xB3); //车
- LCD_write_data(0xB5);
- LCD_write_data(0xC5); //牌
- LCD_write_data(0xC6);
- LCD_write_data(0xBA); //号
- LCD_write_data(0xC5);
- LCD_write_data(0xA1); //:
- LCD_write_data(0xC3); //
- LCD_write_data(platenumber[car1[0]]>>8); //车牌省位
- LCD_write_data(platenumber[car1[0]]&0xff);
- LCD_write_data(car1[1]+'0'); //车牌市位
- LCD_write_data(car1[2]+'0'); //车牌号编码
- LCD_write_data(car1[3]+'0');
- LCD_write_data(car1[4]+'0');
- LCD_write_data(car1[5]+'0');
- LCD_write_data(car1[6]+'0');
- //-------------第四行显示内容-------------//
- LCD_write_data(0xCD); //停
- LCD_write_data(0xA3);
- LCD_write_data(0xB3); //车
- LCD_write_data(0xB5);
- LCD_write_data(0xB7); //费
- LCD_write_data(0xD1);
- LCD_write_data(0xD3); //用
- LCD_write_data(0xC3); //
- LCD_write_data(0xA1); //:
- LCD_write_data(0xC3); //
- LCD_write_data(fee/10+'0'); //停车费十位
- LCD_write_data(fee%10+'0'); //停车费个位
- LCD_write_data(0xD4); //元
- LCD_write_data(0xAA); //
- LCD_write_data(0xA1); //无
- LCD_write_data(0xA0);
- delay_12864(10);
- }
- void main() //主函数
- {
- usablespace=50;
- time1=33;
- fee=5;
-
- while(1)
- {
- LCD_SHOW(); //LCD12864进行显示
- }
- }
复制代码
全部资料51hei下载地址:
程序代码及LCD12864相关资料.zip
(3.92 MB, 下载次数: 109)
|