完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
原子哥,最近没玩STM32,项目需要整个16位单片机,我将51lcd1602整进去了,可是就是不显示,调试的时候,在数据写入函数,执行遇忙函数就无法出来了,一直遇忙,不知道咋回事
部分代码: #define RS_CLR RS = 0 #define RS_SET RS = 1 #define RW_CLR RW = 0 #define RW_SET RW = 1 #define EN_CLR EN = 0#define EN_SET EN = 1 void DelayUs2x(unsigned char t){ while(--t);}/*------------------------------------------------ mS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振12M,精确延时请使用汇编------------------------------------------------*/void DelayMs(unsigned char t){ while(t--) { //大致延时1mS DelayUs2x(245); DelayUs2x(245); }}/*------------------------------------------------ 判忙函数 读状态 输入RS=L;RW=H;E=H;------------------------------------------------*/ bit LCD_Check_Busy(void) { RS_CLR; RW_SET; _nop_(); EN_SET; return (bit)(DataPort & 0x80); EN_CLR; }/*------------------------------------------------ 写入命令函数------------------------------------------------*/ void LCD_Write_Com(unsigned char com) { while(LCD_Check_Busy()); //忙则等待 RS_CLR; RW_CLR; EN_CLR;_nop_(); EN_SET; DataPort= com; _nop_(); EN_CLR; }/*------------------------------------------------ 写入数据函数------------------------------------------------*/ void LCD_Write_Data(unsigned char Data) { while(LCD_Check_Busy()); //忙则等待 RS_SET; RW_CLR; EN_CLR;_nop_(); EN_SET; DataPort= Data; _nop_(); EN_CLR; } /*------------------------------------------------ 清屏函数------------------------------------------------*/ void LCD_Clear(void) { LCD_Write_Com(0x01); DelayMs(5); }/*------------------------------------------------ 写入字符串函数------------------------------------------------*/ void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) { if (y == 0) { LCD_Write_Com(0x80 + x); //表示第一行 } else { LCD_Write_Com(0xC0 + x); //表示第二行 } while (*s) { LCD_Write_Data( *s); s ++; } }/*------------------------------------------------ 写入字符函数------------------------------------------------*/ void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) { if (y == 0) { LCD_Write_Com(0x80 + x); } else { LCD_Write_Com(0xC0 + x); } LCD_Write_Data( Data); }/*------------------------------------------------ 初始化函数------------------------------------------------*/ 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); /*显示开及光标设置*/ } /*------------------------------------------------ 主函数------------------------------------------------*/ // USER CODE END void main(void){ // USER CODE BEGIN (Main,2) // USER CODE END MAIN_vInit(); // USER CODE BEGIN (Main,4) LCD_Init(); LCD_Clear();//清屏 while (1) { // LCD_Write_Char(7,0,'o');// LCD_Write_Char(8,0,'k'); LCD_Write_String(1,1,"www.hlmcu.com"); while(1); } // USER CODE END大家帮我看看吧,在线等 |
|
相关推荐
3个回答
|
|
好久没弄了,我以前有次也弄这个1602弄了好久。。我那次是没有判busy函数。。不过你这里有,,一下子没看出问题来。。
你的MAIN_vInit();函数是没有贴出来吧, 表示路过,,呵呵 |
|
|
|
回复【2楼】caoyicheng626:
----------------------------嘿嘿,刚搞定了啊,就是个延时的问题,按照时序图,RS,RW,EN之间的变换是要时间的,而且这个时间不能太小了,要不就不显示。 |
|
|
|
1602 判忙函数 没太大的必要
|
|
|
|
只有小组成员才能发言,加入小组>>
imx6ull 和 lan8742 工作起来不正常, ping 老是丢包
2660 浏览 0 评论
3347 浏览 9 评论
3025 浏览 16 评论
3519 浏览 1 评论
9127 浏览 16 评论
1251浏览 3评论
642浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
629浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2380浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1944浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-31 01:24 , Processed in 1.109186 second(s), Total 80, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号