在下最近上网买了块带字库lcd12864,怀抱一颗赤子去学习如何在屏幕显示汉字!谁知道天意弄人,熬了几个夜晚看了12864的中文说明书并成功写出程序,却的到一个乱码的结果,使我久久不得意!百般无奈下,唯有求助江湖大神,望能助我分析程序,寻得乱码缘由,在下定当不胜感激!
{源程序如下:
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit cs=P1^0;
sbit sid=P1^1;
sbit clk=P1^2;
sbit psb=P1^3;//串行四线,psb=0
sbit bla=P1^4;
sbit blk=P1^5;
/*延迟函数*/
void delay(int a)
{ int i,j;
for(i=a;i>0;i--)
{
for(j=110;j>0;j--);
}
}
/*发送命令*/
void send_command(uchar ming);
/*发送数据*/
void send_data(uchar shu);
/*lcd初始化*/
void lcd_init();
uchar a[]=&quot;I am shen chang ben &quot;;
/*文字:广石化电气*/
uchar code b[]={0xb9,0xca,0xbb,0xb5,0xc6};//高位
uchar code b1[]={0xe3,0xaf,0xaf,0xe7,0xf8};//低位
int e;
void main()
{
bla=1;
blk=0;
lcd_init();
delay(400);
e=0;
while(a[e]!='\0')
{
send_data(a[e]);
e=e+1;
delay(50);
}
delay(5000);
send_command(0x01);
send_command(0x02);
lcd_init();
send_command(0x88);
delay(50);
for(e=0;e<4;e++)
{
send_command(0x80+e);
send_data(b[e]);
send_data(b1[e]);
delay(500);
}
while(1)
{}
}
void send_command(uchar ming)
{
uchar i_command;
int i;
i_command=0xf8;
cs=1;
clk=0;
for(i=0;i<8;i++)
{
sid=(bit)(i_command & 0x80);
clk=0;
clk=1;
i_command=i_command<<1;
}
i_command=ming;
i_command=i_command & 0xf0;
for(i=0;i<8;i++)
{
sid=(bit)(i_command & 0x80);clk=0;
clk=1;
i_command=i_command<<1;
}
i_command=ming;
i_command=i_command<<4;
for(i=0;i<8;i++)
{
sid=(bit)(i_command & 0x80);clk=0;
clk=1;
i_command=i_command<<1;
}
cs=0;
delay(10);
}
void send_data(uchar shu)
{
uchar i_data;
int i;
i_data=0xfa;
cs=1;
for(i=0;i<8;i++)
{
sid=(bit)(i_data & 0x80);clk=0;
clk=1;
i_data=i_data<<1;
}
i_data=shu;
i_data=i_data & 0xf0;
for(i=0;i<8;i++)
{
sid=(bit)(i_data & 0x80);clk=0;
clk=1;
i_data=i_data<<1;
}
i_data=shu;
i_data=i_data<<4;
for(i=0;i<8;i++)
{
sid=(bit)(i_data & 0x80);clk=0;
clk=1;
i_data=i_data<<1;
}
cs=0;delay(10);
}
void lcd_init()
{
psb=0;
cs=0;
clk=0;
send_command(0x30);
send_command(0x02);
send_command(0x01);
send_command(0x0c);
send_command(0x80);
} |