这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界» 论坛首页» 综合技术» 电源与模拟» 12864B的文字显示乱码问题

共5条 1/1 1 跳转至

12864B的文字显示乱码问题

菜鸟
2014-12-24 17:21:37 打赏

高手们:

帮我解决一下,我用C8051F020控制12864并口显示文字时,有的时候显示的是乱码,有时换一块电路板就好了。不知道是哪里的问题。是程序有问题,还是电路问题。大家看看我的程序有问题么?

#include
#include

//12864端口定义
#define LCD_DATA P5 //数据口
sbit RS = P3^0; //并行的指令/数据选择信号, H数据, L命令
sbit RW = P3^1; //并行读写选择信号, H读, L写
sbit E = P3^2; //并行使能端, H有效, L无效
sbit PSB = P3^3; //并/串接口选择, H并,L串
sbit RST = P3^4; //复位, L有效

void delayms(unsigned int time) //延时 time * 1ms
{
unsigned int i,j;
for(i = 0; i < time; i++)
for(j = 0; j < 300; j++);
}

bit checkBusy() //检测LCD是否处于忙状态, 若忙返回1, 空闲返回0
{
bit busy;
RS = 0;
RW = 1;
E = 1;
delayms(1);
busy = (bit)(LCD_DATA&0x80);
E = 0;
return busy;
}

void wait() //等待LCD到空闲
{
while(checkBusy());
}

void writeCmd(unsigned char cmd) //写命令
{
wait();
RS = 0;
RW = 0;
E = 0;
delayms(1);
LCD_DATA = cmd;
delayms(1);
E = 1;
delayms(1);
E = 0;
}

void writeData(unsigned char dat) //写数据
{
wait();
RS = 1;
RW = 0;
E = 0;
delayms(1);
LCD_DATA = dat;
delayms(1);
E = 1;
delayms(1);
E = 0;
}

void LCD_Init() //初始化LCD屏
{
RST = 0;
delayms(100);
RST = 1;
PSB = 1; //并口方式
writeCmd(0x30); //基本指令, 扩充指令为34H
delayms(10);
writeCmd(0x0c); //显示开, 关光标
delayms(10);
writeCmd(0x01); //清屏
delayms(10);
}

void setPosition(unsigned char x, unsigned char y)
{
unsigned char p;
switch(x%4)
{
case 0: p = 0x80; break; //第一行开始地址
case 1: p = 0x90; break; //第二行
case 2: p = 0x88; break; //第三行
case 3: p = 0x98; break; //第四行
}
p += y;
writeCmd(p);
}

void writeString(unsigned char * str)
{
unsigned char i = 0;
while(str[i] != '\0')
{
writeData(str[i++]);
}
}




关键词: 12864B 乱码

高工
2014-12-25 14:51:07 打赏
2楼
把乱码的图截图上来看看

菜鸟
2014-12-25 15:48:59 打赏
3楼
我用的是12864的液晶屏,就是在不停的刷新显示数据时,文字部分乱码,数字部分卡。是清屏问题还是时序问题。我是新手,还请多指点一下!
// 回零并调整压力-----------------------------------------------------------------------------------------------------------------------
start: Di();
writeCmd(0x01); // 清屏
writeCmd(0x0c); // 取消光标闪烁
//-----------------------------------------------------------------
//-----------------------------------------------------------------
//------------------------------------------------------------------------------------------------------------------------------


Zeroing:
writeCmd(0x0c); // 取消光标闪烁
setPosition(0,0),writeString(Zeroing); //显示正在回零

Move_to_Zero();
while( Limit_down == 1 )
{

}
Motor2_Off(); // 撞到零点限位,电机停止
Pressure_last = 33;
delay(60000);

direction2 = 1; //确定计数方向
Motor2_On();

//delay(60000);



writeCmd(0x01); // 清屏
writeCmd(0x0c); // 取消光标闪烁

setPosition(0,0),writeString(Adjusting);


P_counting(); // 检测码盘

Motor2_Off(); // 调压电机运行到设置高度后停止
Pressure_last = Pressure_set;


备注:writeString(Zeroing)------应该显示“正在回零”-------但此时却显示乱码;
writeString(Adjusting-----应该显示“正在调压”-------但此时却显示乱码;

我的静态显示时就没有问题,就writeString(Zeroing)、writeString(Adjusting)显示时总是刷屏(显示的是直流电机调节的情况),会出现乱码

院士
2014-12-25 18:31:23 打赏
4楼
会不会是信号干扰导致的啊~~

专家
2015-01-23 11:37:40 打赏
5楼

难道没有字库?


共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]