2487|0

10

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

求助!!!!!12864液晶显示有问题,大侠们来帮我看一下~~~ [复制链接]

我用的是OCM12864-3,程序是显示“欢迎使用”四个字在液晶正中。
程序烧入单片机以后都没问题,当我把电源拔下再插,多试几次,也没有问题。但是!过了3~5分钟,我再上电,“欢迎”这两个字就往上移动了一行,真不知道为什么,郁闷啊!          附程序      


#define disp_off   0x3E
#define disp_on    0x3F
#define e       PTP_PTP2  //读写使能
#define e_d     DDRP_DDRP2
#define rw      PTP_PTP4  //Write or Read,H:read,L:write
#define rw_d    DDRP_DDRP4
#define rs      PTP_PTP7  //Data or Instrument Select,H:写数据,L:写指令
#define rs_d    DDRP_DDRP7
#define cs2     PTJ_PTJ6  //cs1=H,选择左半屏
#define cs2_d   DDRJ_DDRJ6

#define cs1     PTM_PTM4  //cs2=H,选择右半屏
#define cs1_d   DDRM_DDRM4


/***********************汉字显示字库**********************************/

    unsigned char huan[32]={0x04,0x34,0xC4,0x04,0xC4,0x3C,0x20,0x10,
                            0x0F,0xE8,0x08,0x08,0x28,0x18,0x00,0x00,
                            0x10,0x08,0x06,0x01,0x82,0x8C,0x40,0x30,
                            0x0C,0x03,0x0C,0x10,0x60,0xC0,0x40,0x00 } ;//"欢"字字库
                           
    unsigned char yin[32] ={0x40,0x42,0x44,0xC8,0x00,0xFC,0x04,0x02,
                            0x82,0xFC,0x04,0x04,0x04,0xFE,0x04,0x00,
                            0x00,0x40,0x20,0x1F,0x20,0x47,0x42,0x41,
                            0x40,0x7F,0x40,0x42,0x44,0x63,0x20,0x00};//"迎"字字库
                           
    unsigned char shi[32]={0x40,0x20,0xF8,0x07,0x04,0xF4,0x14,0x14,
                           0x14,0xFF,0x14,0x14,0x14,0xF6,0x04,0x00,
                           0x00,0x00,0xFF,0x00,0x80,0x43,0x45,0x29,                                                                       
                           0x19,0x17,0x21,0x21,0x41,0xC3,0x40,0x00} ;//"使"字字库
                           
    unsigned char yong[32]={0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0xFE,
                            0x22,0x22,0x22,0x22,0xFF,0x02,0x00,0x00,
                            0x80,0x60,0x1F,0x02,0x02,0x02,0x02,0x7F,
                            0x02,0x02,0x42,0x82,0x7F,0x00,0x00,0x00};//"用"字字库
                           
/**********************************************************************/


/***************函数声明*************************************************/
void Disp (unsigned char state);              //控制屏幕的开关
void lcd_write (unsigned char data);          //底层写操作
void delay(unsigned int loop_times);          //延时程序
void lcd_wbyte(unsigned char DATA) ;          //写一个字节程序
void page(unsigned char p_data);              //选择页
void list (unsigned char l_data);             //选择列
void row(unsigned char r_data);               //选择显示首行
void lcd_clear(void);                         //清全屏
void lcd_Word(unsigned char p_Data,unsigned char l_Data,unsigned char lcd_Word[]);//任意页,任意列,写一个16*16的字。
/************************************************************************/



void main(void)

{

    DDRT  = 0xFF;         

    e_d   = 1;              

    rw_d  = 1;              

    rs_d  = 1;              

    cs1_d = 1;              

    cs2_d = 1;               

   delay(3000);

    Disp(0x3e);

    delay(3000);

    lcd_clear();

    Disp(disp_on);

    delay(3000);      

    lcd_Word(0x03,8,&huan[0]);

    lcd_Word(0x03,40,&yin[0]);

    lcd_Word(0x03,72,&shi[0]);

    lcd_Word(0x03,104,&yong[0]);      

    for(;;)

    {

        ;

    }

}                    

void lcd_Word(unsigned char p_Data,unsigned char l_Data,unsigned char lcd_Word[])

{

    unsigned char i;

   

    if(l_Data>63)

    {

      l_Data-=63;

      cs1 = 0;

      cs2 = 1;

      Disp(disp_on);

     } else

     

     {

      cs1  =  1;

      cs2  =  0;

      Disp(disp_on);

     }

    page(p_Data);

    list(l_Data);

    for(i=0;i<16;i++)

    {

        lcd_wbyte(lcd_Word);

    }           

    p_Data+=1;

    page(p_Data);

    list(l_Data);

    for(i=0;i<16;i++)

    {

        lcd_wbyte(lcd_Word[i+16]);

    }        

}

void lcd_clear(void)

{

    unsigned char clr;

    unsigned char x,y;

    cs1=0;

    cs2=1;

    list(0x00);

    row(0x00);

    clr   =   0;

    x     =   0;

    y     =   0;

    for(x=0;x<8;x++)

    {

       page(x);

       for(y=0;y<64;y++)

       {        

       lcd_wbyte(clr);      

       }      

    }   

    cs1=1;

    cs2=0;

    for(x=0;x<8;x++)

    {

       page(x);

       for(y=0;y<64;y++)

       {        

       lcd_wbyte(clr);      

       }      

    }

}

void Disp (unsigned char state) //控制屏幕的开关

{

    rs  = 0;

    rw  = 0;

    lcd_write(state);

}

void lcd_wbyte(unsigned char DATA) //写一个字节程序

{

    rs  = 1;

    rw  = 0;

    lcd_write(DATA);

}

void page(unsigned char p_data) //选择页

{

    rs  = 0;

    rw  = 0;

    p_data+=0xB8;

    lcd_write(p_data);

}

void list (unsigned char l_data) //选择列

{

     rs  = 0;

     rw  = 0;

     l_data+=0x40;

     lcd_write(l_data);

}

void row(unsigned char r_data)  //选择显示首行

{

     rs  = 0;

     rw  = 0;

     r_data+=0xc0;

     lcd_write(r_data);

}

void lcd_write (unsigned char data) //底层写操作

{   

     PTT  = data;

     e      =0;

     delay(4);

     e      = 1;

     delay(4);

     e      = 0;

}


[ 本帖最后由 mowei23 于 2012-8-5 13:32 编辑 ]
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表