打印

12864液晶程序显示不正确的问题

[复制链接]
2188|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fzpxp|  楼主 | 2009-4-2 14:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚学液晶操作,写个了程序,目的是在屏幕左上角写“A”“B”两个字符。
但意向不到的情况出现了,下面是代码,图片是运行结果
请各位帮看看,到底是哪里写错了?才出现这种情况
#include <reg52.h>
#include <stdlib.h>
#include <intrins.h>
#include <stdio.h> 
#include <math.h>
#define uchar unsigned char
#define uint unsigned int
/********************引脚定义********************/ 
#define DataPort P1      //LCD128*64 I/O 信号管脚
sbit    CS1=P2^0;      //左片选
sbit    CS2=P2^1;      // 右片选 
sbit    RS=P2^2;      //数据指令
sbit    RW=P2^3;      //读写
sbit    E=P2^4;      //使能
//uchar Page;             //页 地址
//uchar Col;              //列 地址 
unsigned char code ASC_5x7[] ={
0x32, 0x49, 0x79, 0x41, 0x3E, //@
0x7E, 0x11, 0x11, 0x11, 0x7E, //A
0x41, 0x7F, 0x49, 0x49, 0x36, //B
0x3E, 0x41, 0x41, 0x41, 0x22, //C
0x41, 0x7F, 0x41, 0x41, 0x3E, //D
0x7F, 0x49, 0x49, 0x49, 0x49, //E
0x7F, 0x09, 0x09, 0x09, 0x01, //F
0x3E, 0x41, 0x41, 0x49, 0x7A, //G
0x7F, 0x08, 0x08, 0x08, 0x7F, //H
0x00, 0x41, 0x7F, 0x41, 0x00, //I
0x20, 0x40, 0x41, 0x3F, 0x01, //J
0x7F, 0x08, 0x14, 0x22, 0x41, //K
0x7F, 0x40, 0x40, 0x40, 0x40, //L
0x7F, 0x02, 0x0C, 0x02, 0x7F, //M
0x7F, 0x06, 0x08, 0x30, 0x7F, //N
0x3E, 0x41, 0x41, 0x41, 0x3E, //O
};

/********************函数定义*******************/
void Delay(uint ms);       //延时
void Locatexy(void);       //将屏幕横向0-12纵向0-7转换成左、右屏的的X、Y
void WriteCommand( uchar CommandByte );    //写指令
void WriteData( uchar DataByte );    //写数据
void LcmClear( void );       //清屏
void LcmInit( void );        //初始化

/***************************/
/*      写指令             */
/***************************/
void WriteCommand( uchar CommandByte )
{        E = 0;
        CS1=0;    //设置片选



        RS = 0;         //指令
        RW = 0;
        DataPort = CommandByte;
        E = 1;          
                  Delay(2);

                  E = 0;

         Delay(2);
            CS1=1;    //设置片选
}

/***************************/
/*       写数据            */
/***************************/
void WriteData( uchar DataByte )
{        E = 0;
        CS1=0;    //设置片选
        RS = 1;         /*数据输出*/
        RW = 0;         /*写输出 */
        DataPort = DataByte; /*数据输出到数据口 */
        E = 1;            /*写入到LCM*/
       Delay(2);          
        E = 0;
      Delay(2);

      CS1=1;    //设置片选

}
/***************************/
/*         清屏            */
/***************************/
void LcmClear( void )
{       uchar Page;uchar Col;
        Page = 0;
        Col = 0;
        for(Page=0;Page<8;Page++)
        {
            for(Col=0;Col<64;Col++)
            {        WriteData(0x00);
            
            }

            WriteCommand(0x0B8+Page);    //设置页X,DataByte=1011,1???(?为X地址)
        }
}

/***************************/
/*       初始化            */
/***************************/
void LcmInit( void )
{        

    WriteCommand(0x3f);    //开显示
        WriteCommand(0x0C0);    //设置起始地址行DataByte=11??,????
                                 (?为起始行0-63)        
       WriteCommand(0x40);    //设置AddressY,DataByte=01??,????
                                   (?为Y 地址)
        WriteCommand(0x0B8);    //设置页X,DataByte=1011,1???
                                     (?为X地址)

        LcmClear();
        
        
}
/***************************/
/*       延时              */
/***************************/
void Delay(uint MS)
{
    uchar us,usn;
    while(MS!=0)
    {
            usn = 2;        //for 12M
            while(usn!=0)
            {
                    us=0xf6;
                    while (us!=0){us--;};
                    usn--;
            }
            MS--;
    }
}
/***************************/
/*       写一个字符        */
/***************************/
void PutAsc( uchar asc )
{
        uchar j;
        uint x;
        x = 5*(asc-32);//asc为字模的位置,32.Means从@、A、B、C、D…O、……开始取字模
            for(j=0;j<5;j++)                   //每个字模是5列数
                {
                        WriteData(ASC_5x7[x]);//x为字模数组中的位置
                        x++;
                }
}

void Main( void )
{    
    
     LcmInit();
     PutAsc(33);//显示A
     PutAsc(34);//显示B
     while(1);
}

相关帖子

沙发
半文盲| | 2009-4-3 22:27 | 只看该作者

给你个参考程序

http://item.taobao.com/auction/item_detail-0db1-ba43433eb2529250b86255b37925f645.htm

http://www.lcdmk.com/html/chanpinzhanshi/tuxingdianzhenyejingmokuai/12864xilie/5849.html



使用特权

评论回复
板凳
glf| | 2009-8-12 09:36 | 只看该作者
for(Page=0;Page<8;Page++)
        {
          WriteCommand(0x0B8+Page);    //设置页X,DataByte=1011,1???(?为X地址)

            for(Col=0;Col<64;Col++)
            {        WriteData(0x00);
            
            }
是应该这样吧

                    }

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

47

帖子

0

粉丝