原创 整版测试4:LCD1602

2011-3-24 09:05 1843 12 12 分类: MCU/ 嵌入式

attachment download


b355d753-68f6-4a34-b4cf-a78ace322ad3.jpg


/*****整版测试4:LCD1602*****/
//现象:按照定义接好电路,其中LCD1602的数据口接P3
//其他的看位定义
//把程序烧进去后,会依次显示两行字符,再左移,最后闪烁,如此循环
/****作者:爱因斯尼@SCUT***/
/****时间:2010.08.29******/


//程序说明:如果烧入程序后没显示,请调节旁边的10K电位器
//结合时序图,进行写命令和写数据操作就可以啦
#include<reg52.h>//51单片机的头文件
#define uint unsigned int//两个常用的宏定义
#define uchar unsigned char
#define port P3 //LCD1602数据的接口
sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P2^2;
sbit bell=P1^4;//定义蜂鸣器
sbit duan=P1^5;//定义段选端
sbit wei=P1^6;//定义位选端
sbit lie=P1^7;//定义点阵的列扫描
uchar code data1[]="Welcome to tlmcu";
uchar code data2[]="Our_QQ:120913319";
uchar code data3[]=""; //写空白,目的实现左移或右移
/*********延时子函数,变化范围为1ms,具体看你想把形参的设计***************/
void delay_ms(ms)
{uint i,j;
 for(i=0;i<ms;i++)
   for(j=0;j<300;j++);
}
/****延时子函数,变化范围为10us,具体看你想把形参的设计****/
void delay_us(us) 
{uint i,j;
 for(i=0;i<us;i++)
   for(j=0;j<3;j++);
}
/*********数码管的初始化函数***************/
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;
 }
/*****写命令*****/
void write_com(uchar com) //写命令子函数
{E=0;    //使能端
 RS=0; //低电平为命令选择端
 RW=0; //低电平为写选择端
 port=com; //P3口链接1602液晶的数据口
 delay_ms(1);
 E=1;
 delay_ms(1);
 E=0;
}
/*****写数据*****/
void write_dat(uchar dat) //写数据子函数
{E=0;
 RS=1; //;高电平为数据选择端
 RW=0; //低电平为写选择端
 port=dat; //P3口链接1602液晶的数据口
 delay_ms(1);
 E=1;
 delay_ms(1);
 E=0;
}
/*****LCD1602的初始化函数*****/
void Init_LCD1602()
{
 write_com(0X38);//设置显示模式
 delay_ms(8);
 write_com(0X01);//清屏
 delay_ms(8);
 write_com(0X0c);//光标不显示和闪烁
 write_com(0X06);//当写一个字符后地址指针加1,而且光标家1
 delay_ms(8);
 }
/*****显示第一行*****/
void show_LCD1602row1(uchar addr1,uint delay_time)
{uchar i;
 write_com(0x80+addr1);
 delay_us(1);
 for(i=0;i<16;i++)
 {
  write_dat(data1);
  delay_us(delay_time);
 }
 }
/*****显示第二行*****/
void show_LCD1602row2(uchar addr2,uint delay_time)//第一个形参显示的是起始地址
{uchar i;                                         //第二个形参延时时间
 write_com(0x80+addr2);
 delay_us(1);
 for(i=0;i<16;i++)
 {
  write_dat(data2);
  delay_us(delay_time);
 }
 }
/******整屏左移****/
void show_LCD1602moveleft()
{uchar i;
write_com(0x07);
for(i=0;i<15;i++)
 {
  write_dat(data3);
  delay_ms(600);//160整屏左移的速度控制
  }delay_ms(400);//停顿一下
 }
/*****LCD1602闪烁*****/
void show_LCD1602_onoff()
{uchar k;
Init_LCD1602();
for(k=0;k<10;k++)
{
 show_LCD1602row1(0x00,1);   
 show_LCD1602row2(0x40,1);
 delay_ms(200);
 write_com(0x01);
 delay_ms(200);
 }}
/*****主函数*****/
void main()
{uchar i;
 Init_smg();
 bell=1;//关闭蜂鸣器
 P3=0X00;
 Init_LCD1602();
 while(1)
{
show_LCD1602row1(0x00,3000);   
show_LCD1602row2(0x40,3000);
delay_ms(1000);
write_com(0x01); //清屏
delay_ms(200);
show_LCD1602row1(0x0f,1);   
show_LCD1602row2(0x4f,1);
show_LCD1602moveleft();    
show_LCD1602_onoff();
 }}


欢迎光临我们的淘宝网:http://item.taobao.com/auction/item_detail.htm?item_num_id=9447334857

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
12
关闭 站长推荐上一条 /3 下一条