完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
谁能看看LCD1602程序哪有问题,为什么第二行的数据会出现在第一行呢,分别显示的时候,都能正常显示,但是同时显示的时候就出错了。
程序如下: #include #define uchar unsigned char #define uint unsigned int uchar table0[]={" X "}; uchar table1[]={" Y "}; ***it rs=P2^0;//数据命令选择端 RS寄存器选择,RS=1数据寄存器,RS=0指令寄存器 ***it rw=P2^1; ***it en=P2^2;//使能端 en为低电平时液晶屏开始执行命令。 uchar num,num1,x1,y1; uchar a,b; uchar h=0,d=0; void delay(uint n)//延时程序 { while(n>0) n--; } bit Busy(void) { bit busy_flag = 0; rs = 0; rw = 1; en = 1; delay(5); busy_flag = (bit)(P0 & 0x80); en = 0; return busy_flag; } void write_com(uchar com) //液晶写命令程序 { while(Busy()); rw=0; rs=0;//等0输入是命令 en=0;//液晶使能信号初始化 delay(10); P0=com;//把com参数,液晶的命令值送到P0口 delay(10);//延时,按照液晶时序图要的要求 en=1;//使能信号,0到1表示上升沿打开可以写命令数据到液晶里 delay(10); en=0;//使能信号恢复0 } void write_data(uchar date) //液晶写数据程序 { while(Busy()); rs=1; //等1表示输入是数据 rw=0; en=0; delay(10); P0=date; //把date参数,液晶的数据送到P0口; delay(10); en=1; delay(10); en=0; } void init() //液晶初始化程序 {rs=0; en=0; delay(50); write_com(0x38); //0x38是按照液晶文档说明写 0011 1000 显示模式设置:设置为16*2显示,5*7点阵,8位数据接口 delay(50); write_com(0x0c); //0000 1100 显示开关及光标设置,开显示,不显示光标,光标不闪烁 delay(10); write_com(0x06); //0000 0110 输入模式设置,光标右移,文字不移动 delay(10); write_com(0x01); //0000 0001 液晶全清屏指令 delay(10); write_com(0x80); } void convertx() //坐标处理程序,把坐标x值转换位液晶显示 { table0[8]=(x1/100)+'0'; //液晶第9位字符为坐标的百位数,例如120度的1 table0[9]=((x1/10)%10)+'0'; //液晶的第10位字符为坐标的十位,例如2 table0[10]=(x1%10)+'0'; //液晶的第11位字符为坐标的个位,例如0 } void converty() //坐标处理程序,把坐标x值转换位液晶显示 { table1[8]=(y1/100)+'0'; //液晶第9位字符为坐标的百位数,例如120度的1 table1[9]=((y1/10)%10)+'0'; //液晶的第10位字符为坐标的十位,例如2 table1[10]=(y1%10)+'0'; //液晶的第11位字符为坐标的个位,例如0 } void main() { //unsigned char i; x1=0xb5; y1=0xb2; delay(30); init(); convertx(); converty(); //液晶的第一行开始地址 for(num=0;num<11;num++) //显示16位数据,后面的几位没有用到就不写到16,以免后面的几位会出现一个随机数据显示乱码 {a=0x80+num; write_com(a); write_data(table0[num]); //液晶需要显示的内容 } write_com(0xc0); for(num1=0;num1<11;num1++) //显示16位数据,后面的几位没有用到就不写到16,以免后面的几位会出现一个随机数据显示乱码 {b=0xc0+num1; write_com(b); write_data(table1[num1]); //液晶需要显示的内容 } while(1); }
|
|
相关推荐
5个回答
|
|
大致瞟了下,目测地址没写对,write_com(0x80)是从第一行显示,如果要从第二行显示,首先地址为write_com(0x80+0x40)
|
|
|
|
80H加40H不是C0H么 |
|
|
|
table赋值,你查看一下,是不是没有赋值。
|
|
|
|
初值先用空值占位,试一下。
|
|
|
|
通过快一周的调试,终于成功了。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
271 浏览 0 评论
298 浏览 0 评论
串口发送中断中对发送I/O口定义为GPIO输出,出现发送数据不完整,缺少2个字节,求解答
1942 浏览 3 评论
848 浏览 0 评论
【xG24 Matter开发套件试用体验】10-Bluetooth示例1
1009 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
10879 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-28 01:27 , Processed in 0.609890 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191