[51]1602液晶程序
2016-04-06 18:03
253 查看
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="*---LCD Test---*";
uchar code table1[]="|__2016-03-20__|" ;
sbit lcden=P3^4;
sbit lcdrs=P3^5;
uchar num;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com) /*RS=L,R/W=L,D0-D7,E高脉冲*/
{
lcdrs=0; // 选择写命令模式 命令模式时为低电平
P0=com; // 将要写的命令送到数据总线上
delay(5); // 稍作延迟以待数据稳定
/*下面脉冲产生*/
lcden=1; //使能端给以高电平,因为初始化函数中已经将lcden置为0
delay(5); //稍作延迟
lcden=0; // 将使能端置0已完成高脉冲
}
void write_data(uchar date)/*RS=H,R/W=L,D0-D7,E高脉冲*/
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init() //初始化函数
{
WR=0; // 置写入
lcden=0; //E置0
write_com(0x38); // 设置16*2显示,5*7点阵,8数据接口
write_com(0x0c); //设置开显示,0x0f显示光标 0x0c不显示光标 00001(1开显示)(1显示光标)(1光标闪烁0光标不显示)
write_com(0x06); //写一个字符后地址指针加1 000001(1读写一字符指针加1,光标加1)(写一个字符整屏左移,0右移)(1开移动0关移动)
write_com(0x01); //显示清0,数据指针清0 0x02回车 本行不写也行
}
void main()
{
init();
write_com(0x80);//0x80+(0x00~0x10~0x27)(0x40~0x50~0x67)设置指针
/* command集合
00010000左移光标 0x10
00010100右移光标 0x14
00011000整屏左移 0x18
00011100整屏右移 0x1c
*/
for(num=0;num<16;num++)
{
write_data(table[num]);
delay(5);
}
write_com(0x80+0x40);
for(num=0;num<16;num++)
{
write_data(table1[num]);
delay(5);
}
while(1);
}
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="*---LCD Test---*";
uchar code table1[]="|__2016-03-20__|" ;
sbit lcden=P3^4;
sbit lcdrs=P3^5;
uchar num;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com) /*RS=L,R/W=L,D0-D7,E高脉冲*/
{
lcdrs=0; // 选择写命令模式 命令模式时为低电平
P0=com; // 将要写的命令送到数据总线上
delay(5); // 稍作延迟以待数据稳定
/*下面脉冲产生*/
lcden=1; //使能端给以高电平,因为初始化函数中已经将lcden置为0
delay(5); //稍作延迟
lcden=0; // 将使能端置0已完成高脉冲
}
void write_data(uchar date)/*RS=H,R/W=L,D0-D7,E高脉冲*/
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init() //初始化函数
{
WR=0; // 置写入
lcden=0; //E置0
write_com(0x38); // 设置16*2显示,5*7点阵,8数据接口
write_com(0x0c); //设置开显示,0x0f显示光标 0x0c不显示光标 00001(1开显示)(1显示光标)(1光标闪烁0光标不显示)
write_com(0x06); //写一个字符后地址指针加1 000001(1读写一字符指针加1,光标加1)(写一个字符整屏左移,0右移)(1开移动0关移动)
write_com(0x01); //显示清0,数据指针清0 0x02回车 本行不写也行
}
void main()
{
init();
write_com(0x80);//0x80+(0x00~0x10~0x27)(0x40~0x50~0x67)设置指针
/* command集合
00010000左移光标 0x10
00010100右移光标 0x14
00011000整屏左移 0x18
00011100整屏右移 0x1c
*/
for(num=0;num<16;num++)
{
write_data(table[num]);
delay(5);
}
write_com(0x80+0x40);
for(num=0;num<16;num++)
{
write_data(table1[num]);
delay(5);
}
while(1);
}
相关文章推荐
- 51单片机模拟简单交通灯
- 51单片机延时程序探讨
- 利用US-100超声波传感器测距的核心代码
- 51单片机串口通信及波特率寄存器设置
- [51]数码管作时钟
- [51]简单按键计数程序
- STC15W4K32S系列 低速模式
- 51单片机英文全称
- STC15W4K32S4 系列 T0定时器输出时钟
- 定时器0控制LED闪灭
- 51单片机配合超声波测距以及用1602液晶进行显示
- 51单片机在Keil中使用printf进行串口输出
- C语言编程技巧----如何定义全局变量----->提高代码可移植性
- 电子研发联盟-红外调光灯设计
- 51单片机的边沿触发及电平触发简介及测量
- 基于51单片机modbusRTU从机设计
- STC单片机timer2捕获模式测频率
- keil C51使用串口时程序跑死的问题
- 51单片机单串口同时实现AT指令和调试信息输出
- 超声波模块HC-SR04调试经验分享