本帖最后由 weatt123456789 于 2017-3-7 10:25 编辑
设计效果为 0000011110000000 实际显示的效果是0000101101000000 不明白为什么
刚查一行行发数据排查了一下, 数组12345678 实际显示出来是 21436587 为什么
for(aa=0;aa<1;aa++) //全手动改成如下 地址,就可以了,数据两个一组对调过来发送就可以了,为什么
{
write_lcd(data,da[1]); //
write_lcd(data,da[0]);
write_lcd(data,da[3]);
write_lcd(data,da[2]);
write_lcd(data,da[5]);
write_lcd(data,da[4]);
write_lcd(data,da[7]);
write_lcd(data,da[6]);
write_lcd(data,da[9]);
write_lcd(data,da[8]);
write_lcd(data,da[11]);
write_lcd(data,da[10]);
write_lcd(data,da[13]);
write_lcd(data,da[12]);
write_lcd(data,da[15]);
write_lcd(data,da[14]);
}
下面这个是自动 计数的,就显示不对
for(aa=0;aa<16;aa++) //XL 循环16次 ,写16列8位数组,也就是8行16列半个字
{
write_lcd(data,hz11[aa]); //data=写数据,
}
底下有图
#define disp_off 0x3e //00111110 显示关 指令:RW=0 RS=0 ,
#define disp_on 0x3f //00111111 显示开
#define disp_Y 0xb8 //10111000 页:取值0-7
#define disp_H 0xc0 //11000000 行:取值0-63
#define disp_L 0x40 //01000000 列:取值0-63
#define data_ora P2 //8位数据
#define data 1
#define comm 0
#define uchar unsigned char
unsigned char code hz11[]={
0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//实际显示效果为 0000011110000000 8行的4个竖条。
void main ()
{
while (1)
{
writexy_lcd(0,0,hz11) //在0行0列位置显示hz11数组的数据
}
}
void writexy_lcd(uchar H,uchar L,uchar da[]) //指定行列写汉字,H=行/L=列/da=文字的数组
{
uchar aa=0;
cs1=0,cs2=1,cs3=1; //选择左半屏
write_lcd(comm,disp_Y+H); //COMM=写指令, disp_Y=起始行0行,H=指定偏移位置
write_lcd(comm,disp_L+L); //COMM=写指令,设置列 位置
for(aa=0;aa<16;aa++) //XL 循环16次 ,写16列8位数组,也就是8行16列半个字
{
write_lcd(data,hz11[aa]); //data=写数据,
}
}
/*------------写数据或命令到LCD--------------*/
void write_lcd(uchar data_comm,uchar content) //data_comm=RS=0时是写指令,data_comm=1时是写数据 //RS=L\RW=L写指令 RS=H\RW=L写数据
{
RS=data_comm; //RS = H:写数据,L:写指令 data_comm为传递值
RW=0; //RW=0,L=写 ,H=读
data_ora=content; //数据输入端口data_ora=P2,content是数据,将数据向P2端口送
E=1; //E=1>0,下降沿锁存
delay(14);
E=0;
}
|