微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机 LCD12864

51单片机 LCD12864

时间:11-25 来源:互联网 点击:
有了LCD12864,人机交互就友好的多了。

原理图:





上代码:

//程序可能,驱动12864液晶显示文字
//本程序有问题,见实际效果,1数码管在接入串口线乱码;2无法多页显示
#include
#define uint unsigned int
#define uchar unsigned char
//端口声明
sbit duanxuan=P2^6; //数码管段选端
sbit weixuan=P2^7; //数码管位选端
sbit lcd12864_RS=P3^5; //12864数据/指令选择端
sbit lcd12864_WR=P3^6; //读/写选择端
sbit lcd12864_E=P3^4; //信号时能端
sbit lcd12864_PSB=P3^7; //串/并选择端
//显示数据定义
uchar display_date0[]="闫伟 luobin 彭超:"; //第一行显示文字
uchar display_date1[]="欢迎你们来到我家"; //第二行显示文字
uchar display_date2[]="我们是朋友--永远"; //第三行显示文字
uchar display_date3[]="王春林2012-7-6-N"; //第四行显示文字

//相关函数声明
void delay(uint); //延时函数声明
void system_init(); //系统初始化函数
void writting_order(uchar); //写入指令函数
void lcd_init(); //初始化函数
void writting_date(uchar); //写入数据函数
void display1(); //显示函数
//void display2();
//主函数
void main()
{
system_init(); //系统初始化
lcd_init(); //lcd初始化-指令设置
display1(); //显示
while(1);
}
//延时函数主体
void delay(uint s)
{
uint i,j;
for(i=s;i>0;i--)
{
for(j=110;j>0;j--)
{
}
}
}
//系统初始化函数主体
void system_init()
{
//防止数码管乱码,关闭数码管
duanxuan=0;
weixuan=0;
}
//lcd12864写入指令函数主体
void writting_order(uchar order_date)
{
lcd12864_WR=0; //WR-0,写
lcd12864_RS=0; //RS-0,写指令
lcd12864_E=0;
P0=order_date;
delay(5);
lcd12864_E=1; //E高脉冲有效
delay(5);
lcd12864_E=0; //回到0,是为了防止误写入数据
}
//lcd12864初始化函数主体
void lcd_init()
{
lcd12864_PSB=1; //选择并口
writting_order(0x01); //AC指针归零
delay(5);
writting_order(0x03); //指针归零,游标原点
delay(5);
writting_order(0x0d); //显示开,游标关,循序反白
delay(5);
writting_order(0x06); //写入数据AC自动加以,游标自动右移一位
delay(5);
writting_order(0x30); //8位数据,基本指令操作
delay(5);
}
//lcd12864写入显示数据函数主体
void writting_date(uchar disolay_data)
{
lcd12864_WR=0; //写
lcd12864_RS=1; //数据
lcd12864_E=0;
P0=disolay_data; //写入数据
delay(5);
lcd12864_E=1; //E高脉冲有效
delay(5);
lcd12864_E=0;
}
//显示函数主体__第一页
void display1()
{
uint number;
//写第一行数据
writting_order(0x80);
for(number=0;number<16;number++)
{
writting_date(display_date0[number]); //循环写入第一行文字
}
//写第二行数据
writting_order(0x90);
for(number=0;number<16;number++)
{
writting_date(display_date1[number]);
}
//写第三行数据
writting_order(0x88);
for(number=0;number<16;number++)
{
writting_date(display_date2[number]);
}
//写第四行数据
writting_order(0x98);
for(number=0;number<16;number++)
{
writting_date(display_date3[number]);
}
}

以上,结束。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top