完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
麻烦大家看一下,为什么郭天祥的lcd1602A程序在普中科技那个单片机上运行不了,只显示第一行,没显示第二行。然后加了一个侧忙函数就可以两行显示了。为什么啊?这个是郭天祥的程序:
#include #define uchar unsigned char #define uint unsigned int uchar code table[]="I LIKE MCU!"; uchar code table1[]="WWW.TXMCU.COM"; ***it lcden=P3^4; ***it lcdrs=P3^5; ***it dula=P2^6; ***it wela=P2^7; uchar num; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void write_com(uchar com) { lcdrs=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; } void write_data(uchar date) { lcdrs=1; P0=date; delay(5); lcden=1; delay(5); lcden=0; } void init() { dula=0; wela=0; lcden=0; write_com(0x38); write_com(0x0e); write_com(0x06); write_com(0x01); write_com(0x80+0x10); } void main() { init(); for(num=0;num<11;num++) { write_data(table[num]); delay(20); } write_com(0x80+0x53); for(num=0;num<13;num++) { write_data(table1[num]); delay(20); } for(num=0;num<16;num++) { write_com(0x18); delay(20); } while(1); } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~另一个程序~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #include #include typedef unsigned char BYTE; //用BYTE代替unsigned char typedef unsigned int WORD;//WORD代替unsigned int typedef bit BOOL ;//用BOOL代替bit ***it rs = P2^6; //复位端 ***it rw = P2^5; //写数据端 ***it ep = P2^7; //使能端 BYTE code dis1[] = {"I LIKE MCU!"}; BYTE code dis2[] = {"www.PRECHIN.com"}; /*******************延时函数********************/ delay(BYTE ms) { BYTE i; while(ms--) { for(i = 0; i< 250; i++) { _nop_(); _nop_(); //空执行消耗CPU时间达到等待的效果 _nop_(); _nop_(); } } } /*******************LCD侧忙函数********************/ BOOL lcd_bz() { BOOL result; rs = 0; rw = 1; ep = 1; _nop_(); _nop_(); _nop_(); _nop_(); result = (BOOL)(P0 & 0x80); //检测P0最高位是否为1 ep = 0; return result;//返回侧忙结果 } lcd_wcmd(BYTE cmd) { // 写入指令数据到LCD while(lcd_bz()); rs = 0; rw = 0; ep = 0; _nop_(); _nop_(); P0 = cmd; //将8位指令通过P0口传给1602 _nop_(); _nop_();//用于产生一个脉冲宽度 ep = 1; _nop_(); _nop_(); ep = 0; } lcd_pos(BYTE pos) { //设定显示位置 lcd_wcmd(pos | 0x80); } lcd_wdat(BYTE dat) { //写入字符显示数据到LCD while(lcd_bz()); rs = 1; rw = 0; ep = 0; P0 = dat;//将8位数据通过P0口传给1602 _nop_(); //用于产生一个脉冲宽度 _nop_(); ep = 1; _nop_(); _nop_(); ep = 0; } lcd_init() { //LCD初始化设定 lcd_wcmd(0x38); ////16*2显示,5*7点阵,8位数据 delay(1); lcd_wcmd(0x0c); //显示开,关光标 delay(1); lcd_wcmd(0x06); //移动光标 delay(1); lcd_wcmd(0x01); //清除LCD的显示内容 delay(1); } main() { BYTE i; lcd_init(); //初始化LCD delay(10); lcd_pos(4); //设置显示位置为第一行的第5个字符 for(i=0;i<8;i++) { //显示字符"welcome!" lcd_wdat(dis1); } lcd_pos(0x41); //设置显示位置为第二行第二个字符 for(i=0;i<16;i++) { lcd_wdat(dis2); //显示字符" www.PRECHIN.com " } while(1); // }
|
|
相关推荐
4个回答
|
|
你这个是看郭天祥视频的吧。
|
|
|
|
void main()
{ init(); for(num=0;num<11;num++) { write_data(table[num]); delay(20); } write_com(0x80+0x53);////////////// 这里改成80+40试试。 for(num=0;num<13;num++) { write_data(table1[num]); delay(20); } for(num=0;num<16;num++) { write_com(0x18); delay(20); } while(1); |
|
|
|
你好,我认为你的问题不在测忙函数,1602比较低端,不用测忙函数也行,所以,你的问题主要在于你的write_com 和 write_data 函数.首先,你可以看一下1602液晶写指令和写数据的时序图,图中的R/W始终为低电平,所以,在你的这两个函数里,都需将lcdrw=0,具体如下:
/****************************************************************** 函数名称:write_com 函数功能:写命令操作 输入参数:com 输出参数:无 ******************************************************************/ void write_com(uchar com) { lcdrs=0; //选择写命令模式 lcdrw=0; //给读写端低电平 P0=com; delay(5); lcden=1; delay(5); lcden=0; } /****************************************************************** 函数名称:write_data 函数功能:写数据操作 输入参数:date 输出参数:无 ******************************************************************/ void write_data(uchar date) { lcdrs=1; lcdrw=0; //给读写端低电平 P0=date; delay(5); lcden=1; delay(5); lcden=0; } 希望对你有用,如有错误请谅解。 |
|
|
|
嗯嗯,知道了,谢谢~~ |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-开发板适配之电阻屏触摸
820 浏览 0 评论
1346 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-开发板适配之I2C-RTC
555 浏览 0 评论
ATK-DLRK3588开发板deepseek-r1-1.5b/7b部署指南
3012 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第五十章 WiFi热点实验
922 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12394 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-24 09:28 , Processed in 0.421073 second(s), Total 44, Slave 37 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191