51单片机LCD12864显示乱码怎么回事
#include<reg52.h>#include"intrins.h"#defineucharunsignedchar#defineuintunsignedintsbi...
#include <reg52.h>#include "intrins.h"#define uchar unsigned char#define uint unsigned intsbit rs = P2^6; //寄存器选择输入 sbit rw = P2^5; //液晶读/写控制sbit en = P2^7; //液晶使能控制sbit psb = P3^2; //串/并方式控制sbit rst = P3^4; //液晶复位端口 void lcd_com(uchar com);void lcd_dat(uchar dat);void lcd_busy();void lcd_dis(uchar *table);void lcd_int();void delay(uint z){ uchar i; while(z--) for(i=10;i>0;i--);}void lcd_busy(void) //忙检测{ uchar busy; rs=0; rw=1; do{ en=1; _nop_(); _nop_(); busy=P0; _nop_(); _nop_();// delay(1); en=0; }while(busy & 0x80); } void lcd_com(uchar com){ lcd_busy(); rs=0;//命令01 rw=0;//写数据// en=0; P0=com; en=1; _nop_(); _nop_(); en=0;}void lcd_dat(uchar dat){ lcd_busy(); rs=1;//数据1 rw=0;//写方式// en=0; P0=dat;// delay(2); en=1; _nop_(); _nop_(); en=0; }void lcd_int(){ psb=1; rst=0; delay(5); rst=1; delay(5); lcd_com(0x30); lcd_com(0x0c); lcd_com(0x01); lcd_com(0x02); lcd_com(0x80); delay(50);}void lcd_dis(uchar *table){ char x=0,y=0,i=0,j=0; for(i=0;i<2;i++) { for(y=0;y<32;y++) { lcd_com(0x80+y); lcd_com(0x80+x); for(j=0;j<16;j++) lcd_dat(*(table++)); } x+=8; } }
展开
2个回答
展开全部
你这液晶屏带不带字库啊?这是显示乱码,要么程序不对,要么取模方式不对。
程序中那table是显示图形一或汉字的点阵数据吧?液晶屏的型号不同,显示图形或汉字时,取模的方式有多种,下载一个液晶屏专用的取模软件,试一下几种取模方式,看哪种取模方式取得数据能正常显示。
程序中那table是显示图形一或汉字的点阵数据吧?液晶屏的型号不同,显示图形或汉字时,取模的方式有多种,下载一个液晶屏专用的取模软件,试一下几种取模方式,看哪种取模方式取得数据能正常显示。
更多追问追答
追问
带字库的 是读取sd卡中的bin文件
追答
那sd卡的bin文件是图形数据吗?取模方式知道吗?你程序的显示模式与图形模式一相同吗?特别是带字库的液晶屏,显示图形就特殊。如果不是图形,那就不能显示的,只能是这样的乱码了。
2018-07-16 · 百度知道官方认证企业
腾讯电脑管家
腾讯电脑管家是腾讯公司推出的免费安全管理软件,能有效预防和解决计算机上常见的安全风险,并帮助用户解决各种电脑“疑难杂症”、优化系统和网络环境,是中国综合能力最强、最稳定的安全软件。
向TA提问
关注
展开全部
/***********************************//* LCD12864初始化函数 *//***********************************/void LCD12864_Init(){ delay_ms_12864(45); LCD_PSB = 0; //0串口工作模式,1并口工作模式 delay_ms_12864(1); LCD_RES = 0; //复位 delay_ms_12864(1); LCD_RES = 1; //复位置高 delay_ms_12864(10); Write_12864(0x30,0); //8/4位接口选择 delay_us_12864(15); //延时>100us Write_12864(0x30,0); //指令集选择 delay_us_12864(5); //延时>37us Write_12864(0x08,0); //显示关 delay_us_12864(15); //延时>100us Write_12864(0x10,0); //游标控制 delay_us_12864(15); //延时>100us Write_12864(0x0c,0); //显示开 delay_us_12864(15); //延时>100us Write_12864(0x01,0); //清屏 delay_ms_12864(10); //延时>10ms Write_12864(0x06,0); //进入设定点}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询