为什么在网上下载的一段C语言51单片机的12864程序显示位置不能设定一行16个

为什么在网上下载的一段C语言51单片机的12864程序显示位置不能设定一行16个,第1张

一行的显示位置的地址只有八个,就是每个汉字的开始位置,但是可以通过加显空白的方式将字母从一个汉字的第二字节的位置上开始显示。注意,这个方法只是用于单字节字符和字母显示,不适合汉字以及其它双字节字符显示。

买12864液晶屏时,厂家都会给测试程序的,就是C语言的。根据测试程序,改一下引脚定义就行了,编译一下测试程序,看能不能显示。如果能显示了,就可以自己根据测试程序一点点修改。

如果找不到厂家,就只好在网上找了,但不容易与你的晶屏相符。

实在不会,读一下测试程序,显示汉字的方法都是,用汉字取模软件,先取汉字点阵数据,用这些数据代替测试程序的点阵数据,看是不是能显示自己的取模的汉字了。

因液晶屏显示汉字,取模方式有多种,如果显示乱码,说明取模方式不对,再换一种,直到显示出汉字为止。这样就可以,对测试程序进行修改成自己看得懂,又实用的程序了。

标准的一般都是这个程序

#include <reg52h>

#include <mathh>

#define lcd_data P1

sbit cs1=P2^3;

sbit cs2=P2^4;

sbit di=P2^0;

sbit rw=P2^1;

sbit e=P2^2;

void delay(int t)

{

int i,j,k;

for(i=0;i<t;i++)

{ for(j=0;j<255;j++)

k++;}

}

void write_com_l(unsigned int command)

{

cs1=1;

rw=0;

di=0;

lcd_data=command;

e=1;

e=0;

cs1=0;

}

void write_data_l(unsigned int data0)

{

cs1=1;

rw=0;

di=1;

lcd_data=data0;

e=1;

e=0;

cs1=0;

}

void write_com_r(unsigned int command)

{

cs2=1;

rw=0;

di=0;

lcd_data=command;

e=1;

e=0;

cs2=0;

}

void write_data_r(unsigned int data0)

{

cs2=1;

rw=0;

di=1;

lcd_data=data0;

e=1;

e=0;

cs2=0;

}

void disp0()

{

unsigned int i,j;

for (i=0;i<8;i++)

{write_com_l(0xb8+i);

write_com_r(0xb8+i);

write_com_l(0x40);

write_com_r(0x40);

for (j=0;j<64;j++)

{write_data_l(0xaa);

write_data_r(0xaa);

}

}

}

void disp1()

{

unsigned int i,j;

for (i=0;i<8;i++)

{write_com_l(0xb8+i);

write_com_r(0xb8+i);

write_com_l(0x40);

write_com_r(0x40);

for (j=0;j<64;j++)

{write_data_l(0x55);

write_data_r(0x55);

}

}

}

void disp2()

{

unsigned int i,j;

for (i=0;i<8;i++)

{write_com_l(0xb8+i);

write_com_r(0xb8+i);

write_com_l(0x40);

write_com_r(0x40);

for (j=0;j<64;j++)

{write_data_l(0x0f);

write_data_r(0x0f);

}

}

}

void disp3()

{

unsigned int i,j;

for (i=0;i<8;i++)

{write_com_l(0xb8+i);

write_com_r(0xb8+i);

write_com_l(0x40);

write_com_r(0x40);

for (j=0;j<64;j++)

{write_data_l(0xf0);

write_data_r(0xf0);

}

}

}

void init_lcd() //初始化LCD清屏

{

write_com_l(0x3e);

write_com_r(0x3e);

write_com_l(0x3f);

write_com_r(0x3f);

write_com_l(0xc0);

write_com_r(0xc0);

write_com_l(0xb8);

write_com_r(0xb8);

write_com_l(0x40);

write_com_r(0x40);

for(;1;)

{

disp0();

delay(0x0ff);

disp1();

delay(0x0ff);

disp2();

delay(0x0ff);

disp3();

delay(0x0ff);

}

}

void main()

{

IE=0x81;

init_lcd();

}

void innt0 () interrupt 0

{

do {}while(1);

}

你这样谁也看不出对错,先从最简单的地方开始测试吧,先写入12864的某个字节看有没有反应,无:看看是不是初始化或寄存器错了

有:继续读某个地址看能否读出

如果没问题了,我觉的你也就能编出来了,我觉得你程序没有结构感,应该把上面的测试做成子函数形式

我记得当时用12864时没有读忙信号,只是做了手册上要求的延时。你试试把

以上就是关于为什么在网上下载的一段C语言51单片机的12864程序显示位置不能设定一行16个全部的内容,包括:为什么在网上下载的一段C语言51单片机的12864程序显示位置不能设定一行16个、不带中文字库的12864液晶怎么用C写程序然后通过51单片机控制、求无字库12864液晶显示图像的51单片机程序,C语言版的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9344825.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存