完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
` 本帖最后由 824657913 于 2017-3-3 14:53 编辑 飞天三号(FSST15)STC15单片机开发板程序烧录后,1602液晶没有显示,只有背景灯是亮的。 板子没有视频书籍等教程,郁闷! 咱是刚开始学,网上查了些资料,还是毫无头绪,求高手帮助! 程序如下: #include #define uchar unsigned char #define uint unsigned int uchar table[16]="abcdefghijklmnyz"; uchar table1[16]="0123456789abcdef"; ***it lcden=P2^0; ***it lcdrs=P2^1; ***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(0x0c); //设置光标 write_com(0x06); write_com(0x01); write_com(0x80); //地址指针 } void main() { init(); for(num=0;num<16;num++) { write_data(table[num]); delay(20); } write_com(1); write_com(0x80+0x40); for(num=0;num<16;num++) { write_data(table1[num]); delay(20); } while(1); } `
HC6800-ES V2.0 新版.pdf
(275.13 KB, 下载次数:
)
|
|
相关推荐
9个回答
|
|
write_com(1);
write_com(0x80+0x40); for(num=0;num<16;num++) { write_data(table1[num]); delay(20); }这里看 你液晶起始地址就一个 当然只有一行显示了,建议你看看1602数据手册
最佳答案
|
|
|
|
改成这样试一下。
#include #define uchar unsigned char #define uint unsigned int uchar table[16]="abcdefghijklmnyz"; uchar table1[16]="0123456789abcdef"; ***it lcden=P2^0; ***it lcdrs=P2^1; ***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(0x0c); //设置光标 write_com(0x06); write_com(0x01); write_com(0x80); //地址指针 } void main() { init(); for(num=0;num<16;num++) { write_data(table[num]); delay(5); } write_com(0x80+0x40); for(num=0;num<16;num++) { write_data(table1[num]); delay(5); } while(1); } |
|
|
|
|
|
|
|
改成
|
|
|
|
谢谢帮忙,只不过还是不对的
|
|
|
|
这种情况一般表示接线正确,但是读写的时序有误。STC15的读写速度较快,而LCD是低速外设,请参照datasheet检查是否正确添加了延时函数或测忙函数?
|
|
|
|
|
|
|
|
#include
#define uchar unsigned char #define uint unsigned int uchar table[16]="abcdefghijklmnyz"; uchar table1[16]="0123456789abcdef"; ***it lcden=P2^7; ***it lcdrs=P2^6; ***it lcdrw=P2^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; lcdrw=0; P0=com; delay(5); lcden=1; //高脉冲所存数据 delay(5); lcden=0; } void write_data(uchar date)//写数据 { lcdrs=1; lcdrw=0; P0=date; delay(5); lcden=1; delay(5); lcden=0; } void init() { //dula=0; //关闭数码管,只液晶显示 //wela=0; lcden=0; write_com(0x38); //液晶设置 write_com(0x0c); //设置光标 write_com(0x06); //光标移动 write_com(0x01); //显示清屏 write_com(0x80); //地址指针 } void main() { init(); write_com(0x80+0x00); for(num=0;num<16;num++) { write_data(table[num]); delay(20); } write_com(0x80+0x40); for(num=0;num<16;num++) { write_data(table1[num]); delay(20); } while(1); } 总算找到原因了,看了下原理图。发现最大问题是在这 ***it lcden=P2^0; ***it lcdrs=P2^1; 然后起始地址只有一个,导致只有第二排有显示,而第一排还是显示方块。 在这里还是多谢HOBBY501的建议 |
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
158 浏览 0 评论
【敏矽微ME32G070开发板免费体验】之原厂2812测试例程解析
237 浏览 0 评论
655 浏览 1 评论
《DNESP32S3使用指南-IDF版_V1.6》第二十六章 INFRARED_RECEPTION实验
563 浏览 0 评论
862 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12034 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 18:55 , Processed in 0.729486 second(s), Total 87, Slave 70 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号