标题:
有关LCD1602动态显示的源程序和仿真原理图
[打印本页]
作者:
青春风铃
时间:
2016-10-25 16:13
标题:
有关LCD1602动态显示的源程序和仿真原理图
写了一个基本的1602动态显示程序供大家参考!希望能给初学者带来帮助。
字符式LCD滚动显示.rar
2016-10-25 16:13 上传
点击文件名下载附件
下载积分: 黑币 -5
71.46 KB, 下载次数: 30, 下载积分: 黑币 -5
1602
作者:
admin
时间:
2016-11-13 21:33
#include "stc15f2k60s2.h"
#include"intrins.h"
#define uchar unsigned char
#define uint unsigned int
sbit lcd_rs=P0^7;
sbit lcd_rw=P0^6;
sbit lcd_en=P0^5;
uchar idata dis0[]={" "};
uchar idata dis1[]={"hdxydxc@163.com"};
uchar idata dis2[]={"QQ:1767104479"};
uchar idata dis3[]={"2016-10-20"} ;
uchar idata dis4[]= {"I LOVE YOU"};
void delay(uchar ms)
{
uchar i;
while(ms--)
{
for(i=0;i<120;i++);
}
}
uchar Busy_Check(void)// 测试LCD忙碌状态
{
uchar LCD_Status;
lcd_rs=0;
lcd_rw=1;
lcd_en=1;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
LCD_Status=P0&0x80;
lcd_en=0;
return LCD_Status;
}
void lcd_wcmd(uchar cmd) //写入指令数据到LCD
{
while(Busy_Check()); //等待LCD空闲
lcd_rs=0;
lcd_rw=0;
lcd_en=0;
_nop_ ();
_nop_ ();
P2=cmd;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
lcd_en=1;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
lcd_en=0;
}
void lcd_pos(uchar pos) // 设定显示位置
{
lcd_wcmd(pos|0x80); //设置LCD当前光标的位置
}
void lcd_wdat(uchar dat)//写入字符显示数据到LCD
{
while(Busy_Check()); //等待LCD空闲
lcd_rs=1;
lcd_rw=0;
lcd_en=0;
P2=dat;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
lcd_en=1;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
lcd_en=0;
}
void LCD_disp(void) //向上滚动
{
uchar i;
lcd_pos(1); //设置显示位置为第一行的第二个字符
i=0;
while(dis0[i]!='\0')
{
lcd_wdat(dis0[i]); //在第一行显示字符串“”
i++;
}
delay(1200);
lcd_pos(0x41);//设置显示位置为第二行第二个字符
i=0;
while(dis1[i]!='\0')
{
lcd_wdat(dis1[i]); //在第1行显示字符串“hdxydxc@163.com”
i++;
}
delay(200);
lcd_wcmd(0x01); //清除LCD显示内容
delay(1);
lcd_pos(1);//设置显示位置为第一行第二个字符
i=0;
while(dis1[i]!='\0')
{
lcd_wdat(dis1[i]); //在第一行显示字符串“hdxydxc@163.com”
i++;
}
delay(1200);
lcd_pos(0x41);//设置显示位置为第二行第二个字符
i=0;
while(dis2[i]!='\0')
{
lcd_wdat(dis2[i]); //在第二行显示字符串“QQ:1767104479”
i++;
}
delay(200);
lcd_wcmd(0x01); //清除LCD显示内容
delay(1);
lcd_pos(1);//设置显示位置为第一行第二个字符
i=0;
while(dis1[i]!='\0')
{
lcd_wdat(dis2[i]); //在第一行显示字符串“QQ:1767104479”
i++;
}
delay(1200);
lcd_pos(0x41);//设置显示位置为第二行第二个字符
i=0;
while(dis3[i]!='\0')
{
lcd_wdat(dis3[i]); //在第二行显示字符串“2016-10-20”
i++;
}
delay(200);
lcd_wcmd(0x01); //清除LCD显示内容
delay(1);
lcd_pos(1);//设置显示位置为第一行第二个字符
i=0;
while(dis3[i]!='\0')
{
lcd_wdat(dis3[i]); //在第一行显示字符串“2016-10-20”
i++;
}
delay(1200);
lcd_pos(0x41);//设置显示位置为第二行第二个字符
i=0;
while(dis4[i]!='\0')
{
lcd_wdat(dis4[i]); //在第二行显示字符串“I LOVE YOU”
i++;
}
delay(200);
lcd_wcmd(0x01); //清除LCD显示内容
delay(1);
lcd_pos(1);//设置显示位置为第一行第二个字符
i=0;
while(dis4[i]!='\0')
{
lcd_wdat(dis4[i]); //在第一行显示字符串“I LOVE YOU”
i++;
}
delay(1200);
lcd_pos(0x41);//设置显示位置为第二行第二个字符
i=0;
while(dis1[i]!='\0')
{
lcd_wdat(dis1[i]); //在第二行显示字符串“hdxydxc@163.com”
i++;
}
delay(200);
lcd_wcmd(0x01); //清除LCD显示内容
delay(1);
}
void lcd_init(void) //LCD初始化设定
{
lcd_wcmd(0x38); //设置显示格式为:16*2行显示,5*7点阵,8位数据接口
delay(1);
lcd_wcmd(0x0c);//0x0f--显示开关设置,显示光标并闪烁
delay(1);
lcd_wcmd(0x06);//0x06--读写后指针加1
delay(1);
lcd_wcmd(0x01); // 清除LCD显示内容
delay(1);
}
void main(void)
{
lcd_init(); // 初始化LCD
delay(10);
while(1)
{
LCD_disp();
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1