完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
本帖最后由 xuhanchao2768 于 2013-5-24 09:49 编辑
最近我自己做了一块小板,上边有一块1602,写程序调试时候按照郭天祥的步骤,初始化很顺利,能够显示出光标,也能闪烁,但是输入了数据之后光标跳到第二格上,但是在第一格上显示空白,什么都没有,后来检查有线接错,改正后连光标都不显示了,同样的程序,请问这有可能是什么原因?会不会是1602坏了?
|
|
相关推荐
9个回答
|
|
|
肯定没坏!你是怎么输入数据的啊?把代码贴上来咯!
最佳答案
|
|
|
|
|
|
#include ***it lcdrs=P3^4; ***it lcdrw=P3^5; ***it lcden=P3^6; void init(); void write_com(unsigned char com); void write_data(unsigned char dat); void delay(unsigned int z); void main() { init(); write_data(0x31); while(1); } void init() { P1=0xf0; P0=0x00; P1=0x00; lcden=0; lcdrw=0; write_com(0x38); 现在连光标都不闪烁了,唉肿么回事啊~ write_com(0x0e); write_com(0x06); write_com(0x01); write_com(0x80); } void write_com(unsigned char com) { lcdrs=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; } void write_data(unsigned char dat) { lcdrs=1; P0=dat; delay(5); lcden=1; delay(5); lcden=0; } void delay(unsigned int z) { unsigned int x,y; for(x=z;x>0;x--) for(y=70;y>0;y--); } |
|
|
|
|
|
每次写数据前要先写指令
|
|
|
|
|
|
牛人啊~~~~顶一下
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
每次写数据或指令之前可以先测忙,这样才能保证每次数据正确性。 bit Lcd_Busy( ) // 测试LCD忙碌状态 { bit result; P0= 0xff ; LcdRS = 0; LcdRW = 1; LcdE = 1; _nop_();_nop_();_nop_();_nop_(); result = (bit)(LcdPort & 0x80); LcdE= 0; return result; } void write1602_com( uchar dat ) //写指令 { while(Lcd_Busy( )) ; _nop_(); LcdRS= 0 ; LcdRW= 0 ; LcdE= 0 ; LcdPort= dat ; LcdE= 1 ; _nop_();_nop_(); LcdE= 0 ; } void write1602_dat( uchar dat ) //写数据 { while(Lcd_Busy( )) ; _nop_(); LcdRS= 1 ; LcdRW= 0 ; LcdE= 0 ; LcdPort= dat ; _nop_(); LcdE= 1 ; _nop_();_nop_(); LcdE= 0 ; } void SysInit1602( ) //初始化函数 { write1602_com(0x38); //功能设置 8位传送数据 // write1602_com(0x0f); //开显示,光标,光标闪烁 write1602_com(0x0c); //开显示,关光标 关闪烁 write1602_com(0x06); //光标加1 // write1602_com(0x04); //光标减1 write1602_com(0x01); //清屏 Delay_1602(500); } 这样你试试。。。 |
|
|
|
|
|
每次写数据或指令之前可以先测忙,这样才能保证每次数据正确性。
bit Lcd_Busy( ) // 测试LCD忙碌状态 { bit result; P0= 0xff ; LcdRS = 0; LcdRW = 1; LcdE = 1; _nop_();_nop_();_nop_();_nop_(); result = (bit)(LcdPort & 0x80); LcdE= 0; return result; } void write1602_com( uchar dat ) //写指令 { while(Lcd_Busy( )) ; _nop_(); LcdRS= 0 ; LcdRW= 0 ; LcdE= 0 ; LcdPort= dat ; LcdE= 1 ; _nop_();_nop_(); LcdE= 0 ; } void write1602_dat( uchar dat ) //写数据 { while(Lcd_Busy( )) ; _nop_(); LcdRS= 1 ; LcdRW= 0 ; LcdE= 0 ; LcdPort= dat ; _nop_(); LcdE= 1 ; _nop_();_nop_(); LcdE= 0 ; } void SysInit1602( ) //初始化函数 { write1602_com(0x38); //功能设置 8位传送数据 // write1602_com(0x0f); //开显示,光标,光标闪烁 write1602_com(0x0c); //开显示,关光标 关闪烁 write1602_com(0x06); //光标加1 // write1602_com(0x04); //光标减1 write1602_com(0x01); //清屏 Delay_1602(500); } 这样你试试。。。 |
|
|
|
|
|
检测忙不是一定必要的,可以通过延时来跳过忙的状态。(忙状态就是1602液晶内部正在写或者读数据、命令)。我不知道你延时的时间多久,一般延时2ms刚好。
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
265 浏览 0 评论
【原创】【RA4M2-SENSOR开发板评测】低功耗+USB综合测试
789 浏览 0 评论
1306 浏览 2 评论
787 浏览 0 评论
【RA4M2-SENSOR开发板评测】Analogue+Timers综合测试
1587 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
16901 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 04:54 , Processed in 1.134501 second(s), Total 91, Slave 71 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2662