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

共5条 1/1 1 跳转至

12864B的文字显示乱码问题

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

高手们:

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

#include <c8051f020.h>
#include <LCD.h>

//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 跳转至

回复

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