中级会员
- 积分
- 289
- 威望
- 241
- 贡献
- 28
- 兑换币
- 4
- 注册时间
- 2010-10-22
- 在线时间
- 10 小时
|
本帖最后由 牧羊人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);
}
}
} |
|