/***程序:LCD1602,显示两行稳定的字符***/
/***作者:爱因斯尼@SCUT***/
/***时间:2010.07.23***/
/***必要的头文件和宏定义***/
#include<reg52.h>//51单片机的头文件
#define uint unsigned int//两个常用的宏定义
#define uchar unsigned char
#define port P3 //定义LCD1602的数据或命令输入端
sbit duan=P1^5;//定义段选端
sbit wei=P1^6;//定义位选端
sbit lie=P1^7;//定义点阵的列扫描
sbit RS=P2^0; //数据或命令
sbit RW=P2^1; //读或写
sbit E=P2^2; //使能端
uchar code LCD1602_dat1[]="Wlcome to tl mcu";
uchar code LCD1602_dat2[]="Our_QQ:120913319";
/******************数码管的初始化函数***************************/
void Init_smg()//数码管的初始化函数,一开始让数码管什么也不显示
{
P0=0x00;
duan=1;
P0=0x00;//关段选端
duan=0;
P0=0xff;
wei=1;
P0=0xff;//关位选端
wei=0;
lie=1;
P0=0xff;//点阵全灭
lie=0;
}
/******************LCD1602的函数******************/
void delay_ms(ms) //延时子函数,变化范围为1ms,具体看你想把形参的设计
{uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<300;j++);
}
void delay_us(us)//延时子函数,变化范围为10us,具体看你想把形参的设计
{uint i,j;
for(i=0;i<us;i++)
for(j=0;j<3;j++);
}
/****写命令/指令****/
void write_com(uchar com)
{
E=0;
RS=0;
RW=0;
delay_ms(1);
port=com;
E=1;
delay_ms(1);
E=0;
}
/****写数据****/
void write_dat(uchar dat)
{
E=0;
RS=1;
RW=0;
delay_ms(1);
port=dat;
E=1;
delay_ms(1);
E=0;
}
/****LCD1602的初始化****/
void Init_lcd1602()
{
delay_ms(15);
write_com(0x38);
delay_ms(5);
write_com(0x38);
delay_ms(5);
write_com(0x38);
write_com(0x38);
write_com(0x08);
write_com(0x01);
write_com(0x06);
write_com(0x0c);
}
/*****主函数******/
void main()
{uchar i;
Init_smg();
Init_lcd1602();
write_com(0x80); //第一行字符串第一个显示的地址
for(i=0;i<16;i++)
{
write_dat(LCD1602_dat1);
delay_us(1);
}
write_com(0x80+0x40); //第二行字符串第一个显示的地址
for(i=0;i<16;i++)
{
write_dat(LCD1602_dat2);
delay_us(1);
}
while(1);//注意,和以往不同的是,程序可以停止在这里,但是LCD1602上的内容不变
}
/******************************************************************************************************/
/***程序:LCD1602左移***/
/***作者:爱因斯尼@SCUT***/
/***时间:2010.07.23***/
/***必要的头文件和宏定义***/
#include<reg52.h>//51单片机的头文件
#define uint unsigned int//两个常用的宏定义
#define uchar unsigned char
#define port P3 //定义LCD1602的数据或命令输入端
sbit duan=P1^5;//定义段选端
sbit wei=P1^6;//定义位选端
sbit lie=P1^7;//定义点阵的列扫描
sbit RS=P2^0; //数据或命令
sbit RW=P2^1; //读或写
sbit E=P2^2; //使能端
uchar code LCD1602_dat1[]="Wlcome to tl mcu";
uchar code LCD1602_dat2[]="Our_QQ:120913319";
uchar code LCD1602_dat3[]="";//空字符串
/******************数码管的初始化函数***************************/
void Init_smg()//数码管的初始化函数,一开始让数码管什么也不显示
{
P0=0x00;
duan=1;
P0=0x00;//关段选端
duan=0;
P0=0xff;
wei=1;
P0=0xff;//关位选端
wei=0;
lie=1;
P0=0xff;//点阵全灭
lie=0;
}
/******************LCD1602的函数******************/
void delay_ms(ms)//延时子函数,变化范围为1ms,具体看你想把形参的设计
{uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<300;j++);
}
void delay_us(us) //延时子函数,变化范围为10us,具体看你想把形参的设计
{uint i,j;
for(i=0;i<us;i++)
for(j=0;j<3;j++);
}
/****写命令/指令****/
void write_com(uchar com)
{
E=0;
RS=0;
RW=0;
delay_ms(1);
port=com;
E=1;
delay_ms(1);
E=0;
}
/****写数据****/
void write_dat(uchar dat)
{
E=0;
RS=1;
RW=0;
delay_ms(1);
port=dat;
E=1;
delay_ms(1);
E=0;
}
/****LCD1602的初始化****/
void Init_lcd1602()
{
delay_ms(15);
write_com(0x38);
delay_ms(5);
write_com(0x38);
delay_ms(5);
write_com(0x38);
write_com(0x38);
write_com(0x08);
write_com(0x01);
write_com(0x06);
write_com(0x0c);
}
/*********第一行数据*****************/
void show_LCD1602_data1(uchar addr1)
{ uchar i;
write_com(0x80+addr1); //第一行字符串第一个显示的地址
for(i=0;i<16;i++)
{
write_dat(LCD1602_dat1);
delay_us(1);
} }
/*********第二行数据*****************/
void show_LCD1602_data2(uchar addr2)
{ uchar i;
write_com(0x80+addr2); //第二行字符串第一个显示的地址
for(i=0;i<16;i++)
{
write_dat(LCD1602_dat2);
delay_us(1);
} }
/******LCD1602整屏左移****/
void show_LCD1602moveleft()
{uchar i;
write_com(0x07);
for(i=0;i<16;i++)
{
write_dat(LCD1602_dat3);
delay_ms(80);//160整屏左移的速度控制
}delay_ms(400);//停顿一下
}
/*****主函数******/
void main()
{uchar i;
Init_smg();
Init_lcd1602();
while(1)
{
show_LCD1602_data1(0x10);
show_LCD1602_data2(0x50);
show_LCD1602moveleft();
}}
欢迎登陆我们的淘宝网:http://item.taobao.com/auction/item_detail.htm?item_num_id=9447334857
文章评论(0条评论)
登录后参与讨论