📄 1602.c
字号:
//单行或双行显示
//显示的起始位置设定
//屏幕左右移动,动画效果
//给定一个字符数组,如何通过strlen()来判断字符串的长度?这样在for初始化时,也许可以简化程序
//最后的一行,会再次显一遍,又返回到了第一行
#include <at89x51.h>
#include <intrins.h>
#define uchar unsigned char
sbit lcd_RS=P2^5; //定义寄存器
sbit lcd_RW=P2^6; //定义是否读写
sbit lcd_E=P2^7; //定义使能端
sbit lcd_flag=P0^7; //定义是否Busy标志
uchar code dis[]="Hello everyone, my name is gaogao. This is really a great honor to have this opportunity.Hope you will learn something from this program.Sduty right now or lose the chance next second!Come on!";
bit lcd_busy() //判断是否忙碌 RS=Low,RW=High,E=High:读状态
{
bit flag;
lcd_RS=0; //寄存器为Low
lcd_RW=1; //是否读写为High
lcd_E=1; //使能端为High
if (lcd_flag==1) flag=1;
else flag=0;
lcd_E=0;
return flag; //返回标志,判断是否LCD忙碌
}
void lcd_putcommand(uchar command) //写指令 RS=Low,RW=Low,E=High:写指令
{
while (lcd_busy()); //判断是否忙碌
lcd_RS=0;
lcd_RW=0;
lcd_E=0;
P0=command;
lcd_E=1;
lcd_E=0;
}
void lcd_putchar(uchar putchar) //写数据 RS=High,RW=Low,E=High:写数据
{
while(lcd_busy()); //判断是否忙碌
lcd_RS=1;
lcd_RW=0;
lcd_E=0;
P0=putchar;
lcd_E=1;
lcd_E=0;
}
void lcd_moveto(uchar x,uchar y) //显示字符的位置:第x行y列(X=1或2,Y=1~16)
{
if (x==0) lcd_putcommand(0x80|y-1); //第一行,并初始化从第y-1个字符开始显示
if (x==1) lcd_putcommand(0xc0|y-1); //第二行,并............
}
void lcd_delay(int ms) //延时函数
{
uchar i;
while(ms--)
{
for(i=0;i<250;i++)
{
_nop_();_nop_();_nop_();_nop_();
}
}
}
void lcd_init(void)
{
lcd_putcommand(0x38); lcd_delay(1); //LCD为2行,5×7字
lcd_putcommand(0x0e); //打开显示,显示光标,光标不闪
// lcd_putcommand(0x0f); //....................光标闪烁
lcd_delay(1);
lcd_putcommand(0x06); lcd_delay(1);//每次右移一字符
}
void main(void)
{
uchar *app,*p;
lcd_init(); //初始化
// lcd_delay(10);
app=dis;
while(*app!='\0')
{
/************第一行***************/
lcd_moveto(0,1);
// lcd_putcommand(0x08); //在显示数据时关闭显示,否则如果cpu慢的话,会感觉闪烁
for(p=app;p<app+16&&(*p!='\0');p++) //逻辑判断的顺序是从右到左,所以把 *p~='\0'写右边
{
lcd_putchar(*p);
//lcd_delay(100);
}
app=app+16;
// lcd_putcommand(0x0e);
// lcd_delay(200);
/***********第二行****************/
lcd_moveto(1,1);
for(p=app;p<app+16&&(*p!='\0');p++)
{
lcd_putchar(*p);
// lcd_delay(100);
}
// app=app+16;
// lcd_putcommand(0x0e); //开显示
lcd_delay(800); //控制翻页速度
if(*p=='\0') break; //阻止最后一行再次显示
lcd_putcommand(0x01);
}
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -