lcd1602_C51显示程序
////////////////////////////////////////////////////////
// lcd1602显示 // ////////////////////////////////////////////////////////
#include
#include //使用其中_nop_()精准空函数
#define uchar unsigned char
#define uint unsigned int
////LCD端口设置////
#define dataport P0 //p0作LCDIO数据连接口
sbit lcd_rs=P2^5; //RS sbit lcd_rw=P2^6; //RW sbit lcd_e=P2^7; //E
// 声明函数//////
void delay1ms(uchar x); //延时函数
void lcdcheckbusy(void); // 因为每次操作LCD前要先检查忙状态才可以操作LCD
void lcdwritecmd(uchar cmd,uchar busy_on); //函数参数,cmd是要发送的命令,busy_on,是定义是否要检查忙状态
void lcdwritedata(char ddata); //函数参数,ddata是要发送到LCD当前光标显示出来的数据,单字节
void lcdpos(uchar xpos,uchar ypos); //光标定位函数 void lcdreset(void); //lcd 初始化函数 void lcdwritechar(uchar xpos,uchar ypos,char c); //指定列上显示字符函数,参数:横坐标x列,丛坐标Y行,显示c;
void lcdwritestring(uchar xpos,uchar ypos,char s[]); //指定列显示字符串函数,参数:x列,Y行,显示字符串S
void main()
{ uchar s[]="seastar"; // 定义字符串 注意:C语中,字符串用双引号,字符用单引号
lcdreset(); //lcd初始化
delay1ms(5); //延时5m秒,等待初始化完成
lcdwritechar(0,1,'a'); //在第一行第0列显示字符A;
lcdwritestring(0,0,s); //在第0列第0行显示字符串seastar
while(1);
}
//读忙状态函数// //读命令
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
: rs(0)+rw(1)=>e(1->0)=>读出端口命令值 void lcdcheckbusy(void)
{ dataport=0xff; //先把P0口设高状态//不写也可以,因为复位后默认为高
lcd_rs=0; //设定用
lcd_rw=1;
_nop_();
lcd_e=1;
_nop_();
_nop_();
while(dataport&0x80); //检查D7的状态,D7=1是忙,E就不变O等待(变0就从
IR寄存器取出数据到端口)
lcd_e=0; // 若D7=0,说明不忙,E=0把端口 从IR中取出数据到
端口
}
//LCD写入命令函数// // 写命令标准: rs(0)+rw(0)+d(0-7)=>e(1->0)=>写入IR
寄存器
void lcdwritecmd(uchar cmd,uchar busy_on) //函数参数中,cmd是要发送的命令,
busy_on,是定义是否要检查忙状态
{ if(busy_on==1)lcdcheckbusy(); //等于1就检查忙状态,因为有时不需要检查的,例
如刚开始操作LCD就不要
lcd_rs=0;
lcd_rw=0;
_nop_();
dataport=cmd; //把命令发到端口
_nop_();
lcd_e=1;
_nop_();
_nop_();
lcd_e=0;
}
//LCD写入数据函数// //写入数据标准:rs(1)+rw(0)+d(0-7)=>e(1->0)=>写入IR
寄存器
void lcdwritedata(char ddata) { lcdcheckbusy();
lcd_rs=1;
lcd_rw=0;
_nop_();
dataport=ddata;
_nop_();
lcd_e=1;
_nop_();
_nop_();
lcd_e=0;
}
//光标定位函数////
void lcdpos(uchar xpos,uchar ypos)
{ uchar tmp;
xpos&=0x0f;
ypos&=0x01;
tmp=xpos;
if(ypos==1)
tmp|=0xc0;
tmp|=0x80;
lcdwritecmd(tmp,0);
}
//lcd初始化函数////
void lcdreset(void)
{ lcdwritecmd(0x38,0); //功能指令,设定八位接口,显示器2行,5*7字符节
lcdwritecmd(0x38,1); //设置显示模式,检查忙状态
lcdwritecmd(0x08,1); //显示开关控制指令,显示关闲
lcdwritecmd(0x01,1); //清屏指令,
lcdwritecmd(0x06,1); //输入方式设置,字符不动,光标自动右移一格
lcdwritecmd(0x0f,1); //显示开关控制指令,显示器开,光标开,光标闪烁
}
//指定列上显示字符函数///
void lcdwritechar(uchar xpos,uchar ypos,char c) //横坐标X列,丛坐标Y行,显示
字符C,
{ lcdpos(xpos,ypos);
lcdwritedata(c);
}
//指定列显示字符串函数//
void lcdwritestring(uchar xpos,uchar ypos,char s[]) //x列,Y行,显示字符串S
{ uchar i=0;
while(1)
{ lcdwritechar(xpos,ypos,s[i]);
i++;
if(s[i]==0)
break;
if(++xpos>=15)
{ xpos=0;
ypos=1;
}
}
}
//1ms延时函数//
void delay1ms(uchar x) { uchar i,j;
for(i=0;i
本文档为【lcd1602_C51显示程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。