完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
程序如下:红颜色标注的是判忙程序 程序每次进入后都不停的WHILE循环, 我认为不是程序原因,但电路是学习板也是没问题的
#include typedef unsigned char uchar; typedef unsigned int uint; extern const unsigned char shuzi_table[]; #define LCD_DataIn P4DIR=0x00 //数据口方向设置为输入 #define LCD_DataOut P4DIR=0xff //数据口方向设置为输出 #define LCD2MCU_Data P4IN #define MCU2LCD_Data P4OUT #define LCD_CMDOut P3DIR|=0x4c //P3口的低三位设置为输出 #define LCD_RS_H P3OUT|=BIT2 //P3.0 #define LCD_RS_L P3OUT&=~BIT2 //P3.0 #define LCD_RW_H P3OUT|=BIT3 //P3.1 #define LCD_RW_L P3OUT&=~BIT3 //P3.1 #define LCD_EN_H P3OUT|=BIT6 //P3.2 #define LCD_EN_L P3OUT&=~BIT6 //P3.2 /******************************************* 函数名称:Delay_1ms 功 能:延时约1ms的时间 参 数:无 返回值 :无 ********************************************/ void Delay_1ms(void) { uchar i; for(i = 150;i > 0;i--) _NOP(); } /******************************************* 函数名称:Delay_Nms 功 能:延时N个1ms的时间 参 数:n--延时长度 返回值 :无 ********************************************/ void Delay_Nms(uint n) { uint i; for(i = n;i > 0;i--) Delay_1ms(); } /******************************************* 函数名称:Write_Cmd 功 能:向液晶中写控制命令 参 数:cmd--控制命令 返回值 :无 ********************************************/ void Write_Cmd(uchar cmd) { uchar lcdtemp = 0; LCD_RS_L; LCD_RW_H; LCD_DataIn; do //判忙 { LCD_EN_H; _NOP(); lcdtemp = LCD2MCU_Data; LCD_EN_L; } while(lcdtemp & 0x80); LCD_DataOut; LCD_RW_L; MCU2LCD_Data = cmd; LCD_EN_H; _NOP(); LCD_EN_L; } /******************************************* 函数名称:Write_Data 功 能:向液晶中写显示数据 参 数:dat--显示数据 返回值 :无 ********************************************/ void Write_Data(uchar dat) { uchar lcdtemp = 0; LCD_RS_L; LCD_RW_H; LCD_DataIn; do //判忙 { LCD_EN_H; _NOP(); lcdtemp = LCD2MCU_Data; LCD_EN_L; } while(lcdtemp & 0x80); LCD_DataOut; LCD_RS_H; LCD_RW_L; MCU2LCD_Data = dat; LCD_EN_H; _NOP(); LCD_EN_L; } /******************************************* 函数名称:Ini_Lcd 功 能:初始化液晶模块 参 数:无 返回值 :无 ********************************************/ void Ini_Lcd(void) { LCD_CMDOut; //液晶控制端口设置为输出 Delay_Nms(500); Write_Cmd(0x30); //基本指令集 Delay_1ms(); Write_Cmd(0x02); // 地址归位 Delay_1ms(); Write_Cmd(0x0c); //整体显示打开,游标关闭 Delay_1ms(); Write_Cmd(0x01); //清除显示 Delay_1ms(); Write_Cmd(0x06); //游标右移 Delay_1ms(); Write_Cmd(0x80); //设定显示的起始地址 } /******************************************* 函数名称:Disp_HZ 功 能:控制液晶显示汉字 参 数:addr--显示位置的首地址 pt--指向显示数据的指针 num--显示字符个数 返回值 :无 ********************************************/ void Disp_HZ(uchar addr,const uchar * pt,uchar num) { uchar i; Write_Cmd(addr); for(i = 0;i < (num*2);i++) Write_Data(*(pt++)); } |
|
相关推荐
5个回答
|
|
|
|
|
|
我现在也遇到了同样的问题 已经调了我3天时间了 求大神 给解决方法 !谢谢了
|
|
|
|
解决没有啊????????????????????
|
|
|
|
楼主我也遇到这个问题,后来你是怎么解决的?
|
|
|
|
真不容易啊!冰冻三尺非一日之寒。好好学习了!努力工作!
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2069 浏览 0 评论
1201 浏览 0 评论
3769 浏览 2 评论
2855 浏览 0 评论
这是汽车360全景控制器上的主板,请问圆圈中的原件是什么,起什么作用?
2614 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 21:20 , Processed in 0.780470 second(s), Total 81, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号