[求助] LCD12864无法显示要求的字符,显示乱码(我用的是stc12c5a60s2)

虎老头   2014-4-26 16:42 楼主
#include "STC12C5A60S2.h"
#include "12864.h"
#include "math.h"
#include "common.h"       
#define LCD12864Para_dataplay  P1
sbit RS = P3^2;         
sbit RW = P3^1;
sbit EN = P3^0;

void delay(uint i)                   //延时函数
{

        while(i--);

}

void read_busy()                //
{
        RS = 0;
        RW = 1;
        EN = 1;
        while(LCD12864Para_dataplay&0x80); //
        EN = 0;

}

//uchar ReadByte()  //
//{  uchar dat;
//        read_busy();
//        LCD12864Para_dataplay=0xff;         //
//        RS = 1;
//        RW = 1;
//        EN = 0;
//        EN = 1;
//        dat=LCD12864Para_dataplay;                  //
//        EN = 0;
//        return dat;
//}

void write_LCD_command(uchar value)                 //          写指令
{
        read_busy();
        RS = 0;
        RW = 0;
        EN =1;
        LCD12864Para_dataplay = value;
        delay(100);
        EN = 0;

}

void write_LCD_data(uchar value)                //        写数据
{
        read_busy();
        RS = 1;
        RW = 0;
        EN = 1;
        LCD12864Para_dataplay = value;
        delay(100);
        EN = 0;
}


void init_LCD()                                                //初始化
{
write_LCD_command(0x01); //清除LCD的显示内容
delay(1000);
write_LCD_command(0x30); //基本指令操作
delay(1000);
write_LCD_command(0x03); //
delay(1000);
write_LCD_command(0x0c); //设置开显示,不显示光标
delay(1000);
write_LCD_command(0x01); //清除LCD的显示内容
delay(1000);
write_LCD_command(0x06); //写一个字符后地址指针加1
}
/**************************************************************************************************************
函数名称 :LCD_Word
函数功能:字符显示函数
入口参数: uchar addr:显示的地址      第一行0x80~0x87
                                                                           第二行0x90~0x97
                                                                           第三行0x88~0x8f
                                                                           第四行0x98~0x9f
                        uchar *dat:显示的字符
                        unsigned char byte_length:字符长度
出口参数:无
备 注:无  
**************************************************************************************************************/
void LCD_Word(uchar addr,uchar *dat)
{
        unsigned char lcd_temp;
        write_LCD_command(addr);
        lcd_temp=*dat;
   while(lcd_temp != 0x00)
    {
        write_LCD_data(lcd_temp);
        lcd_temp=*(++dat);
    }
}

/**************************************************************************************************************
函数名称 :LCD_Clr
函数功能:清屏清GDRAM函数
入口参数:无
出口参数:无
备 注:无  
**************************************************************************************************************/
void LCD_Clr(void)                                        //
{
        uchar i,j;
        write_LCD_command(0x36);
        delay(100);
        write_LCD_command(0x36);
        delay(37);
        write_LCD_command(0x3e);
        delay(100);
        write_LCD_command(0x01);
        delay(100);               
        for(i = 0;i<32;i++)
        {
                write_LCD_command(0x80+i);//先送垂直地址
                write_LCD_command(0x80);
                for(j = 0;j<16;j++)
                {
                        write_LCD_data(0x00);
                }       
        }
        for(i = 0;i<32;i++)
        {
                write_LCD_command(0x80+i);//先送垂直地址
                write_LCD_command(0x88);
                for(j = 0;j<16;j++)
                {
                write_LCD_data(0x00);       
                }       
        }
        write_LCD_command(0x30);//回到普通模式
}
以上是lcd模块
主程序就一小段
#include
#include"common.h"
#include"12864.h"
void main()
{       
        init_LCD();
        LCD_Clr();
        LCD_Word(0x90,"1");                  
}大家帮忙看一下

回复评论 (6)

显示乱码不一定是程序的事,板子没有问题?
点赞  2014-4-26 17:55
有规律的乱码还是....
点赞  2014-4-26 19:26
半角字符一次两字节.
点赞  2014-4-26 21:12
引用: Xy201207 发表于 2014-4-26 19:26
有规律的乱码还是....

额 应该算是有规律的乱码吧  一些箭头的符号。。。
点赞  2014-4-26 22:22
引用: qwqwqw2088 发表于 2014-4-26 17:55
显示乱码不一定是程序的事,板子没有问题?

板子没问题!
点赞  2014-4-26 22:22
引用: 虎老头 发表于 2014-4-26 22:22
额 应该算是有规律的乱码吧  一些箭头的符号。。。

你查一下这些乱码的ASCII值和你需要显示值的关系,可能你是如果你想显示48 直接写入48 而显示的却是ASCII值为48的0。仅仅是举一个例子
点赞  2014-4-27 08:54
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复