[51]12864液晶程序
2016-04-06 18:04
295 查看
#include<reg52.h>
#include<intrins.h>
#include<stdlib.h>
#define uchar unsigned char
#define uint unsigned int
#define LCD_data P0;//数据口
sbit LCD_RS=P3^5; //数据选择输入
sbit LCD_RW=P3^6; //液晶读写控制
sbit LCD_EN=P3^4; //液晶使能控制端
sbit LCD_PSB=P3^7; //串并方式控制
sbit wela=P2^7;
sbit dula=P2^6;
uchar code dis1[]= {"I like sleep,but"};
uchar code dis2[]= {"like candy best!"};
uchar code dis3[]= {" 卖萌无罪! "};
uchar code dis4[]= {"2016-3-21By Echo"};
void delay_1ms(uint x)
{
uint i,j;
for(j=0; j<x; j++)
for(i=0; i<110; i++);
}
/*写命令到LCD*/
/*PS=L,RW=L,D0~D7=指令码,E=高脉冲*/
void write_cmd(uchar cmd)
{
LCD_RS=0;
LCD_RW=0;
delay_1ms(5);
LCD_EN=0;
P0=cmd;
delay_1ms(5);
LCD_EN=1;
delay_1ms(5);
LCD_EN=0;
}
/*写显示数据到LCD*/
/*RS=H,RW=L,E=高脉冲,D0~D7=数据 */
void write_dat(uchar dat)
{
LCD_RS=1;
LCD_RW=0;
LCD_EN=0;
P0=dat;
delay_1ms(5);
LCD_EN=1;
delay_1ms(5);
LCD_EN=0;
}
/*设定显示位置*/
void lcd_pos(uchar X,uchar Y)
{
uchar pos;
if(X==0)
{
X=0x80;
}
else if(X==1)
{
X=0x90;
}
else if(X==2)
{
X=0x88;
}
else if(X==3)
{
X=0x98;
}
pos=X+Y;
write_cmd(pos);
}
/*LCD初始化设置*/
void lcd_init()
{
LCD_PSB=1; //并口方式
write_cmd(0x30);//基本指令操作
delay_1ms(5);
write_cmd(0x0C);//先是开,关光标
delay_1ms(5);
write_cmd(0x01);//清除LCD的显示内容
delay_1ms(5);
}
void main()
{
uchar i;
wela=0;
dula=0;
delay_1ms(10);
lcd_init();
i=0;
lcd_pos(0,0);
while(dis1[i]!='\0')
{
write_dat(dis1[i]);
i++;
}
lcd_pos(1,0);
i=0;
while(dis2[i]!='\0')
{
write_dat(dis2[i]);
i++;
}
lcd_pos(2,0);
i=0;
while(dis3[i]!='\0')
{
write_dat(dis3[i]);
i++;
}
lcd_pos(3,0);
i=0;
while(dis4[i]!='\0')
{
write_dat(dis4[i]);
i++;
}
while(1);
}
#include<intrins.h>
#include<stdlib.h>
#define uchar unsigned char
#define uint unsigned int
#define LCD_data P0;//数据口
sbit LCD_RS=P3^5; //数据选择输入
sbit LCD_RW=P3^6; //液晶读写控制
sbit LCD_EN=P3^4; //液晶使能控制端
sbit LCD_PSB=P3^7; //串并方式控制
sbit wela=P2^7;
sbit dula=P2^6;
uchar code dis1[]= {"I like sleep,but"};
uchar code dis2[]= {"like candy best!"};
uchar code dis3[]= {" 卖萌无罪! "};
uchar code dis4[]= {"2016-3-21By Echo"};
void delay_1ms(uint x)
{
uint i,j;
for(j=0; j<x; j++)
for(i=0; i<110; i++);
}
/*写命令到LCD*/
/*PS=L,RW=L,D0~D7=指令码,E=高脉冲*/
void write_cmd(uchar cmd)
{
LCD_RS=0;
LCD_RW=0;
delay_1ms(5);
LCD_EN=0;
P0=cmd;
delay_1ms(5);
LCD_EN=1;
delay_1ms(5);
LCD_EN=0;
}
/*写显示数据到LCD*/
/*RS=H,RW=L,E=高脉冲,D0~D7=数据 */
void write_dat(uchar dat)
{
LCD_RS=1;
LCD_RW=0;
LCD_EN=0;
P0=dat;
delay_1ms(5);
LCD_EN=1;
delay_1ms(5);
LCD_EN=0;
}
/*设定显示位置*/
void lcd_pos(uchar X,uchar Y)
{
uchar pos;
if(X==0)
{
X=0x80;
}
else if(X==1)
{
X=0x90;
}
else if(X==2)
{
X=0x88;
}
else if(X==3)
{
X=0x98;
}
pos=X+Y;
write_cmd(pos);
}
/*LCD初始化设置*/
void lcd_init()
{
LCD_PSB=1; //并口方式
write_cmd(0x30);//基本指令操作
delay_1ms(5);
write_cmd(0x0C);//先是开,关光标
delay_1ms(5);
write_cmd(0x01);//清除LCD的显示内容
delay_1ms(5);
}
void main()
{
uchar i;
wela=0;
dula=0;
delay_1ms(10);
lcd_init();
i=0;
lcd_pos(0,0);
while(dis1[i]!='\0')
{
write_dat(dis1[i]);
i++;
}
lcd_pos(1,0);
i=0;
while(dis2[i]!='\0')
{
write_dat(dis2[i]);
i++;
}
lcd_pos(2,0);
i=0;
while(dis3[i]!='\0')
{
write_dat(dis3[i]);
i++;
}
lcd_pos(3,0);
i=0;
while(dis4[i]!='\0')
{
write_dat(dis4[i]);
i++;
}
while(1);
}
相关文章推荐
- 51单片机模拟简单交通灯
- 51单片机延时程序探讨
- 利用US-100超声波传感器测距的核心代码
- 51单片机串口通信及波特率寄存器设置
- [51]1602液晶程序
- [51]数码管作时钟
- [51]简单按键计数程序
- STC15W4K32S系列 低速模式
- 51单片机英文全称
- STC15W4K32S4 系列 T0定时器输出时钟
- 定时器0控制LED闪灭
- 51单片机配合超声波测距以及用1602液晶进行显示
- 51单片机在Keil中使用printf进行串口输出
- C语言编程技巧----如何定义全局变量----->提高代码可移植性
- 电子研发联盟-红外调光灯设计
- 51单片机的边沿触发及电平触发简介及测量
- 基于51单片机modbusRTU从机设计
- STC单片机timer2捕获模式测频率
- keil C51使用串口时程序跑死的问题
- 51单片机单串口同时实现AT指令和调试信息输出