void DisplayDots(uchar DotByte)
{
uchar i,j;
lcd_write_cmd(0x34); //8Bit扩充指令集,即使是36H也要写两次
lcd_write_cmd(0x36); //绘图ON,基本指令集里面36H不能开绘图
for(i=0;i<32;i++) //12864实际为256x32
{
lcd_write_cmd(0x80|i); //行位置
lcd_write_cmd(0x80); //列位置
for(j=0;j<32;j++) //256/8=32 byte
{ //列位置每行自动增加
lcd_write_data(DotByte);
}
DotByte=~DotByte;//&(按位与)、|(按位或)、^(按位异或)、~ (按位取反)
}
}
这里说的 lcd_write_cmd(0x34); //8Bit扩充指令集,即使是36H也要写两次
lcd_write_cmd(0x36); //绘图ON,基本指令集里面36H不能开绘图
即使是36H也要写两次、基本指令集里面36H不能开绘图?什么意思啊?大家都做过这个吧,好难啊,求帮助啊
还有这段:
void lcd_set_dot(unsigned char x, unsigned char y)
{
unsigned char x_byte, x_bit; //在横坐标的哪一个字节,哪一个位
unsigned char y_byte, y_bit;
// unsigned char tmph, tmpl; //定义两个临时变量,用于存放读出来的数据
x &= 0x7F;
y &= 0x3F;
x_byte = x / 16; //算出它在哪一个字节(地址)
//注意一个地址是16位的
x_bit = x&0x0F; //算出它在哪一个位
y_byte = y /32; //y是没在哪个字节这个说法
//这里只是确定它在上半屏还是下半屏
//0:上半屏 1:下半屏
y_bit = y&0x3F; //y_bit确定它是在第几行
lcd_write_cmd(EXTEND_SET); //扩展指令集
lcd_write_cmd(DRAW_ON); //绘图显示打开
lcd_write_cmd(0x80 + y_bit); //先写垂直地址(最高位必须为1)
//具体参照数据手册
lcd_write_cmd(0x80 + x_byte + 8 * y_byte); //水平坐标
//下半屏的水平坐标起始地址为0x88
//(+8*y_byte)就是用来确定
//在上半屏还是下半屏
if (x_bit < 8) //如果x_bit位数小于8
{
lcd_write_data(0x01 << (7 - x_bit)); //写高字节。因为坐标是从左向右的
//而GDRAM高位在左,底位在右
lcd_write_data(0x00); //低字节全部填0
}
else
{
lcd_write_data(0x00); //高字节全部填0
lcd_write_data(0x01 << (15 - x_bit));
}
return ;
}
这两个都是设置坐标的吧?一个是适用于图像的,一个适用于文字吗?这个程序估计要看几天能明白了,指点下吧 |