完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
/********头文件*******************/
#include #include /********宏定义*******************/ #define DataLCD P0 //LCD1602显示数据端口D0~D7。 /********端口定义*****************/ //*********LCD1602 ***it RS=P2^4; //RS为寄存器选择,高电平(1)时选择数据寄存器、低电平(0)时选择指令寄存器。 ***it RW=P2^5; //RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。 ***it EN=P2^6; //E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。 //******************************************************************************************* /********自定义子函数声明***************/ //void Delay(unsigned char t); //延时函数 //**********1602液晶屏 bit panmang1602(void); //判忙函数 void Writezl1602(unsigned char Wzl); //写入指令函数 void Writesj1602(unsigned char Wsj); //写入数据函数 void qingping1602(void); //清屏函数 void Writewz1602(unsigned char x,y); //写入位置函数 void Write***1602(unsigned char *z); //写入字符串函数 void LCD_Init1602(void); //LCD1602初始化函数 //******************************************************************************************* /********自定义子函数*******************/ //*********延时子函数 void Delay(unsigned char t) { unsigned char a,b; while(--t) { //大致延时1ms for(b=5;b>0;b--) for(a=98;a>0;a--); } } //******************************************************************************************* //*********1602液晶屏子函数 bit panmang1602(void) //判忙函数 { DataLCD=0xff; //拉高使可读数 RS=0; //指令模式 RW=1; //读取 EN=0; //使能0 _nop_(); //空指令 EN=1; //使能1 负降沿触发执行判忙 return (bit) (DataLCD&0x80); //判断第八位(例:P0^7)是1还是0; } void Writezl1602(unsigned char Wzl) //写入指令函数 { while(panmang1602()); //判忙,,忙时等待 Delay(5); RS=0; RW=0; //写入 EN=1; DataLCD=Wzl; //数据端口赋值 _nop_(); EN=0; } void Writesj1602(unsigned char Wsj) //写入数据函数 { while(panmang1602()); Delay(5); RS=1; //数据模式 RW=0; EN=1; DataLCD=Wsj; _nop_(); EN=0; } void qingping1602(void) //清屏函数 { Writezl1602(0x01); //清屏指令 Delay(5); } void Writewz1602(unsigned char x,y) //写入位置函数 { //共16位2行 if(y==0) //第一行 { Writezl1602(0x80+x); //地址位最高须是1(0x80=1000 0000)。加上后X值即时显示位置。 } else //y=1,第二行。 { Writezl1602(0xc0+x); //地址位最高须是1(0xc0=1100 0000)。加上后X值即时显示位置。 } } void Write***1602(unsigned char *z) //写入字符串函数 { while(*z) //字符串依次显示循环 { Writesj1602(*z); //显示一个字符 z++; //显示下一个字符 Delay(5); } } void LCD_Init1602(void) //LCD1602初始化函数 { //显示模式 Writezl1602(0x38); //设8位数据线,双行,5*7点阵。 Delay(5); Writezl1602(0x38); //设8位数据线,双行,5*7点阵。 Delay(5); Writezl1602(0x38); //设8位数据线,双行,5*7点阵。 Delay(5); Writezl1602(0x08); //显示关闭 Writezl1602(0x01); //清屏 Writezl1602(0x06); //显示光标移动设置 Delay(5); Writezl1602(0x0c); //显示开及光标设置 } /********主函数*******************/ void main() { LCD_Init1602(); qingping1602(); while(1) { Writewz1602(8,0); Writesj1602('O'); Writewz1602(6,0); Write***1602("1602"); Writewz1602(0,1); Write***1602("hehe"); Writewz1602(12,1); Write***1602("haha"); while(1); } } |
|
相关推荐
3个回答
|
|
|
|
|
|
|
|
先延时50ms再初始化lcd。试试
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
238 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
629 浏览 0 评论
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
552 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
552 浏览 0 评论
1074 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11765 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 15:40 , Processed in 0.509913 second(s), Total 46, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号