完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
这个是msp430g2553luanchpad的12864串行显示的程序,我弄出来的结果会乱码,有时还会花屏,搞了两天也不懂是怎么回事,请各位看看帮帮忙,谢谢.
这是12864的驱动程序,其他配置截图了 #include #include "LCD12864.h" #include "config.h" /******************************************************************** * 名称 : LCD_sendbyte * 功能 : 按照液晶的串口通信协议,发送数据 * 输入 : zdata * 输出 : 无 ***********************************************************************/ void LCD_SendByte(uchar zdata) { uint i; for(i=0; i<8; i++) { RESET_SCLK; delay_us(100); if((zdata << i) & 0x80)//监测传送位,是否传送完 { SET_SID; //SDI为串行数据口;传送完关闭 delay_us(10); } else { RESET_SID;//未传送完继续 delay_us(10); } //给一个时钟信号 SET_SCLK; //SCLK = 1; } } /******************************************************************** * 名称 : LCD_write_com() * 功能 : 写串口指令,分三字节写完 * 输入 : com * 输出 : 无 ***********************************************************************/ void LCD_WriteCom(uchar com) { delay_us(100); OPEN_CS;//打开片选,高电平有效 LCD_SendByte(0xf8); //第一字节1111 1AB0 1111 1000,A--MCU到LCD,B--数据是控制命令, LCD_SendByte(com & 0xf0); //第二字节DDDD 0000(并行)八位数据的高四位 LCD_SendByte((com << 4) & 0xf0);//第三字节0000 DDDD (并行)八位数据的低四位 delay_ms(100); } /******************************************************************** * 名称 : LCD12864_write_date() * 功能 : 写串口指令 * 输入 : date * 输出 : 无 ***********************************************************************/ void LCD_WriteDate(uchar date) { delay_us(100); OPEN_CS; //打开片选 LCD_SendByte(0xfa);//第一字节1111 1AB0 1111 1010,A--MCU到LCD,B--数据是显示数据, LCD_SendByte(date & 0xf0); //第二字节 LCD_SendByte((date << 4) & 0xf0);//第三字节 delay_ms(100); } /******************************************************************** * 名称 : LCD12864_init() * 功能 : 12864初始化函数 * 输入 : com * 输出 : 无 ***********************************************************************/ void LCD_Init() { //RESET_RST; // LCD_Delay(100); //SET_RST; //LCD_Delay(100); LCD_WriteCom(0x34);//扩充指令集动作 ,绘图不显示 LCD_WriteCom(0x01);//清屏 LCD_WriteCom(0x30);//基本指令集动作, 绘图不显示 LCD_WriteCom(0x0c);//开显示,不显示游标和游标位置 LCD_WriteCom(0x02);//DDRAM地址归位 LCD_WriteCom(0x80); //设定DDRAM 7位地址000,0000到 地址计数器AC LCD_WriteCom(0x01);//清屏 delay_ms(10); } /******************************************************************** * 名称 :LCD_CleanScans() * 功能 : 清屏 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void LCD_CleanScans() { LCD_WriteCom(0x01);//清屏 0000 0001,清除显示 delay_ms(10); } /******************************************************************** * 名称 : LCD12864_pos() * 功能 : 设定显示位置 * 输入 : x,y * 输出 : 无 ***********************************************************************/ void LCD_SetPos(uchar x,uchar y) { uchar addr; switch(x) { case 1: addr=0X7F+y;break; //第一行 case 2: addr=0X8F+y;break; //第二行 case 3: addr=0X87+y;break; //第三行 case 4: addr=0X97+y;break; //第四行 default: break; } LCD_WriteCom(addr);//显示地址 } /******************************************************************** * 名称 : LCD_DisplayString() * 功能 : 显示字符串 * 输入 : *s * 输出 : 无 ***********************************************************************/ void LCD_DisplayString(int x,int y,char *s) { uchar i = 0; LCD_SetPos(x,y); while(*s > 0) { LCD_WriteDate(s); i++; } } //写整数函数 uint LCD_DisplayInt(int x,int y,int data) { uint i; uint intLen=3; char cdat[4]={0}; cdat [0] = (char)((data % 1000) /100); cdat [1] = (char)((data % 100) /10); cdat [2] = (char)((data % 10) /1); for (i=0;i<3;i++) { cdat = cdat + 48; } if (cdat[0] == '0') { intLen = 3; if (cdat[1] == '0') { intLen = 2; if (cdat[2] == '0') intLen = 1; } } LCD_DisplayString(x,y,cdat + (3-intLen)); return 0; }
|
|
相关推荐
11个回答
|
|
回帖奖励 +1 分积分
个人觉得你的乱码和花屏都是因为显示位置的问题造成的。我之前也有这样的情况,第一行显示正确,第二行显示错误。屏蔽掉第二行,第一行正常显示,加上第一行,两行显示都不对,就像你说的乱码。
而且LCD_SetPos,这个LZ应该是抄袭网上的吧,LZ还是去看看显示屏的规格书,自己配置。 通过设置PAGE和COL来设置位置。 |
|
|
|
回帖奖励 +1 分积分
不知道你们有没有用QC12864B的,我查到的资料好像说不能用串行,必须把R9的电阻改到R10,有没有高手给个确定答复,我试的串行就不行。
|
|
|
|
现在在用MSP430做AD转换的东西,找到的程序里需要调用一个12864串口显示的程序,QC12864B不能正常显示,再改并口显示好纠结。。。
|
|
|
|
回帖奖励 +1 分积分
顶顶,纯顶顶。
|
|
|
|
有些12864的PSB脚出厂时是接到了电源脚的,我这有三片12864,其中一片就是这样 |
|
|
|
谢谢你的回答,显示屏会花屏我知道有一个原因是电源不稳定造成的,不过这个程序应该还有别的错误 |
|
|
|
我昨天狠了狠心把R9的0电阻拆了把R10接起来了,果然能用串行了 |
|
|
|
楼主问题解决了吗,我也这个问题 |
|
|
|
楼主,我已经解决了,我是rst引脚接地了,,然后p***你检查下接地了没,还有看看板后面的电阻是不是对的,应该就这些问题了
|
|
|
|
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
3052个成员聚集在这个小组
加入小组2968 浏览 1 评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3691 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2366 浏览 1 评论
4830 浏览 1 评论
2592 浏览 1 评论
1370浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3691浏览 2评论
2968浏览 1评论
1564浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 13:36 , Processed in 1.371449 second(s), Total 71, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号