完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
写了一个用1602液晶显示时钟、闹钟、温度程序,为什么单片机上电后先显示乱码,过一会儿才显示正常,为什么啊?我的程序有6k多,会是因为程序太大,51单片机执行慢了的原因吗?
|
|
相关推荐
16个回答
|
|
液晶显示器初始化后,会首先显示数据缓存里的数据,所以初始化1602之后,要紧接着马上清缓存。
|
|
|
|
清缓存?就是清屏命令吧,写命令赋值0x01,我也有这一句啊!能详细说一下吗? |
|
|
|
清缓存就是把所有的全部清0
|
|
|
|
清缓存不是清屏,是把空格符写进所有1602的显示缓存中,让屏幕全屏显示空格,也就是把 ' ' 写进32位显示中去
|
|
|
|
void LCD_Init(void) { LCD_Write_Com(0x38); /*显示模式设置*/ DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); LCD_Write_Com(0x08); /*显示关闭*/ LCD_Write_Com(0x01); /*显示清屏*/ LCD_Write_Com(0x06); /*显示光标移动设置*/ DelayMs(5); LCD_Write_Com(0x0C); /*显示开及光标设置*/ } 这是我的液晶初始化函数,你能看下有什么问题吗? 清除缓存,全屏显示空格,难道还要写如下命令吗? LCD_Write_Com(0x80);for(i=0;i<16;i++) LCD_Write_Data(' '); LCD_Write_Com(0xc0);for(i=0;i<16;i++) LCD_Write_Data(' '); 求大神赐教啊! |
|
|
|
是的, LCD_Init()之后,要加上
LCD_Write_Com(0x80);for(i=0;i<16;i++) LCD_Write_Data(' '); LCD_Write_Com(0xc0);for(i=0;i<16;i++) LCD_Write_Data(' '); 清缓存,也就是显示全屏空格,你也可以把这个定义成一个清显示的函数,以后会用到的: #defined LCD_CLEAR_FIRST_LINE 0 #defined LCD_CLEAR_SECOND_LINE 1 #defined LCD_CLEAR_ALL_LINE 2 void LCD_Clear(unsinged char ClearLine) { switch(ClearLine) { case LCD_CLEAR_FIRST_LINE: LCD_Write_Com(0x80);for(i=0;i<16;i++) LCD_Write_Data(' '); break; case LCD_CLEAR_SECOND_LINE : LCD_Write_Com(0xc0);for(i=0;i<16;i++) LCD_Write_Data(' '); break; case LCD_CLEAR_ALL_LINE: LCD_Write_Com(0x80);for(i=0;i<16;i++) LCD_Write_Data(' '); LCD_Write_Com(0xc0);for(i=0;i<16;i++) LCD_Write_Data(' '); break; default: break; } } |
|
|
|
哦,少了一句 void LCD_Clear(unsinged char ClearLine) { int i; switch(ClearLine) { case LCD_CLEAR_FIRST_LINE: LCD_Write_Com(0x80);for(i=0;i<16;i++) LCD_Write_Data(' '); break; case LCD_CLEAR_SECOND_LINE : LCD_Write_Com(0xc0);for(i=0;i<16;i++) LCD_Write_Data(' '); break; case LCD_CLEAR_ALL_LINE: LCD_Write_Com(0x80);for(i=0;i<16;i++) LCD_Write_Data(' '); LCD_Write_Com(0xc0);for(i=0;i<16;i++) LCD_Write_Data(' '); break; default: break; } |
|
|
|
调了很多天还是没解决,抓狂啊!我用一个按键切换三个界面,每换一次界面清屏一次,可还是只有第二个界面在上电时能显示清楚,另两个界面都要先乱码一会儿才显示清楚,请问会是时序问题或者是单片机运行速度太慢的原因吗? |
|
|
|
6K的程序不大,你用LCD_Clear()清屏之后,只要不写错数据进去,单片机速度再慢也不会乱码的。出现乱码,可能是你的程序出错,要不就是单片机速度过快,写液晶显示数据的时候延时不够
|
|
|
|
学习了,你们接着讨论,我接着学习。
|
|
|
|
|
|
|
|
我也有一块,我折腾不好,向你学习,向你致敬!
|
|
|
|
我的实际电路里P0口没接上拉电阻,用万用表测得高电平只有2伏多,请问AT89C52单片机IO口驱动能力能带动1602吗? 还有,1602感觉占用IO口太多,能否通过I2C传输数据?串行通信是不是一定要1602有I2C通信接口啊? |
|
|
|
很多单片机的P0口都是开漏端口,是没有驱动能力的,必须要接上拉电阻,你可以查看你这款单片机的输入输出口说明
要节约IO口,可以用译码器译码,学过数字电路的应该都学过译码器 |
|
|
|
{:1:}
|
|
|
|
谢谢大神的细心讲解,另外再想问一下,我最近在做可编程放大器,,因现在还没上数电课,网上的一些资料有些看不懂,我打算利用DA芯片当做一个可变电阻使用,将DA芯片接在运放的负反馈端,请问一般DA芯片可以吗? |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
《DNESP32S3使用指南-IDF版_V1.6》 第十六章 WATCH_DOG实验
460 浏览 0 评论
【敏矽微ME32G070开发板免费体验】+ADC测试与LED点亮
418 浏览 0 评论
飞凌嵌入式-ELFBOARD ELF 2的硬件知识分享--核心板
352 浏览 0 评论
【敏矽微ME32G070开发板免费体验】\\+Lora通信终端产品开发项目
514 浏览 0 评论
1576 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11971 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 23:28 , Processed in 0.902379 second(s), Total 98, Slave 81 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号