智能车制作

标题: 急求mc9s08jm60单片机的12864驱动程序 [打印本页]

作者: xzjdyn    时间: 2011-7-25 19:50
标题: 急求mc9s08jm60单片机的12864驱动程序
如题,如有请发给我,非常感谢
作者: 牧羊人1990    时间: 2011-7-26 15:37
本帖最后由 牧羊人1990 于 2011-7-26 15:42 编辑

我用DZ32写的,12864是不带字库的,ks0107b控制器,程序我可以正常使用,希望能帮助你const UINT8 zimo[][]={{...},                     //存放16x16字模   
                                   {...},
                                      }


UINT8 string_num[][7]={{...},      //     存放要显示的字的编号            
                                     {...},
                                         .......}

/*---------------LCD初始化-------------------*/
void LCD_Init(void)
{
   //LCD_RST=0;       //LCD复位
   //delay(10);
   LCD_RST=1;     //正常工作              
   Read_status();   
   PTBDD=0xff;
   LCD_L=1;
   LCD_R=1;       //选择全屏
   LCD_RS=0;
   LCD_RW=0;
   LCD_E=1;
   LCD_Dx=0x3f;//开LCD
   delay(5);
   LCD_E=0;
   LCD_Clear0();                //清屏
   Init_Show();
}
/*-----------------读取状态----------------*/
void Read_status(void)
{
   
    unsigned char status;
    PTBDD=0x00;
    LCD_RS=0;
    LCD_RW=1;
    LCD_E=1;
    delay(2);
    status=LCD_Dx;
    delay(5);
    LCD_E=0;
   
    while(status&0x90);//busy 时等待
     
}
/*-------------------写指令函数------------------------*/
void Write_command(unsigned char adress_x ,unsigned char adress_y )
{
   
    unsigned char page,row;
    Read_status(); //检测是否忙碌
    PTBDD=0xff;
    if(adress_x<64)
    {
        LCD_L=1;//选择左半屏
        LCD_R=0;
        row=adress_x;
    }
    else
    {
        LCD_R=1;//选择右半屏
        LCD_L=0;
        row=adress_x-64;
    }
    page=adress_y;
   
    LCD_RS=0;
    LCD_RW=0;
    LCD_E=1;
    LCD_Dx=0xc0; //起始行设置    c0H+line(0~63)
                     
    delay(2);
    LCD_E=0;
    delay(2);      
    LCD_E=1;
    LCD_Dx=0xb8+page; //页面地址设置  b8H+page(0~7)  
           
    delay(2);
    LCD_E=0;
    delay(2);
   
    LCD_E=1;
    LCD_Dx=0x40+row;//列地址设置    40H+row
              
    delay(2);
    LCD_E=0;
   
}
/*------------------写数据函数-------------------*/
void Write_data(UINT8 row,UINT8 page, UINT8 data)
{
   
   Write_command(row,page);
   Read_status();//检测是否忙碌
   PTBDD=0xff;
   LCD_RS=1;
   LCD_RW=0;
   LCD_E=1;
   LCD_Dx=data;//写数据
   delay(10);
   LCD_E=0;
}

/*--------------指定位置写字符-------------*/
void Write_Character(UINT8 row,UINT8 page, UINT8 word_num)
{
    UINT8 m,n,*character;
    character=zimo[word_num];
    for(n=0;n<2;n++)
    {
        for(m=0;m<16;m++)
        {
            Write_data(row,page,*character);
            row++;
            character++;
               
        }
            row=row-16;
            page++;   
    }   
   
   
   
}

/*------------------写字符串------------*/
void Write_String(UINT8 row,UINT8 page,UINT8 *string,UINT8 word_num)
{
    UINT8 i;
    for(i=0;i<word_num;i++)
    {
        Write_Character(row+(i<<4),page,*(string+i));
    }
        
}
/*------------------LCD清全屏-----------------*/
void LCD_Clear0(void)
{
    UINT8 m,n;
    for(n=0;n<8;n++)
    {
        for(m=0;m<128;m++)
        {
            Write_data(m,n,0x00);   
        }   
    }


}


/*------------------清除指定矩形区域---------------*/
//(x0,y0),(x1,y1)指定矩形位置

void Clear_Area(UINT8 x0,UINT8 y0,UINT8 x1,UINT8 y1)
{
    UINT8 page,row,n,num_page;
    num_page=y1-y0;
    num_page=num_page>>3;           //区域共占有的页数
    for(n=0;n<=num_page;n++)
    {
        row=x0;
        page=(y0>>3)+n;
        for(;row<x1;row++)
        {

            Write_data(row,page,0x00);   
        }   
    }                 

}




欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2