12864屏幕上显示的图像与想要显示的图像在位置上不符

12864屏幕上显示的图像与想要显示的图像在位置上不符,第1张

你好:

应该是绘图取模时没有取好,注意一下的顺序、取模格式等。

如果取模没问题,估计是程序时序的问题了,你可以进我的百度空间里参考一下12864绘图的程序,目测你的LCD是ST7920控制器的。我用的就是ST7920控制器的LCD。

希望我的回答能帮助到你。

//如果只是要话一个点的话简单,这里是个串口程序

#include <reg52h>

#include <intrinsh>

#define uchar unsigned char

#define uint unsigned int

/LCD接口定义/

sbit SID = P1^0; //串行数据

sbit SCLK = P1^1; //串行同步时钟

/汉字地址表/

uchar code addr_tab[]={

0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,//第一行汉字位置

0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,//第二行汉字位置

0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,//第三行汉字位置

0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,//第四行汉字位置

};

/n(ms)延时子程序/

void delayms(uint t) //约延时n(ms)

{

uint i;

while(t--)

{

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

}

}

/串行发送一个字节/

void SendByte(uchar Dbyte)

{

uchar i;

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

{

SCLK = 0;

Dbyte=Dbyte<<1; //左移一位

SID = CY; //移出的位给SID

SCLK = 1;

SCLK = 0;

}

}

/写指令/

void Lcd_WriteCmd(uchar Cbyte )

{

//delayms(1);

SendByte(0xf8); //11111,RW(0),RS(0),0

SendByte(0xf0&Cbyte); //高四位

SendByte(0xf0&Cbyte<<4); //低四位(先执行<<)

}

/写数据/

void Lcd_WriteData(uchar Dbyte )

{

//delayms(1);

SendByte(0xfa); //11111,RW(0),RS(1),0

SendByte(0xf0&Dbyte); //高四位

SendByte(0xf0&Dbyte<<4); //低四位(先执行<<)

}

/初始化LCD/

void Lcd_Init(void)

{

delayms(3);

Lcd_WriteCmd(0x30); //选择基本指令集

delayms(1);

Lcd_WriteCmd(0x30); //选择8bit数据流

delayms(1);

Lcd_WriteCmd(0x0c); //开显示(无游标、不反白)

delayms(1);

Lcd_WriteCmd(0x01); //清除显示,并且设定地址指针为00H

delayms(2);

}

void pic_Disp(uchar x,uchar y) //显示一个点

{

Lcd_WriteCmd(0x34); //切换到扩充指令,

Lcd_WriteCmd(0x34);//关闭图形显示

Lcd_WriteCmd(0x80+y); //行地址

Lcd_WriteCmd(0x80+x); //列地址,如果是下半屏这里多加8

Lcd_WriteData(0); //写数据 D15-D8

Lcd_WriteData(1); //写数据 D7-D0

Lcd_WriteCmd(0x36);//打开图形显示

}

void main()

{

Lcd_Init();

pic_Disp(1,1);

while(1);

}

给你测试了,行可行

用字模提取软件就可以,其实汉字也是当作图形来处理的,用专用的软件就可以把的内容转换成单片机可以识别的代码,把代码嵌入到程序里就可以了。

你可以到以下链接下载这个软件:

>

/打点/

void point(uchar x,uchar y)

{

uchar y1,hang,lie,msb_data,lsb_data,temp=0x01;

if(y1!=y)

{

msb_data=0;

lsb_data=0;

}

y1=y;

if(y<32)

{

hang=0x80+y;

lie=0x80;

}

if(y>31)

{

hang=0x80+y-32;

lie=0x88;

}

if(y>63)//return;

{

lcm_com(0x80);

_nop_();

hanzi("温度超出显示范围");

while(1)

flash();

}

lie=lie+x/16;

if(x%16==0)

{

msb_data=0;

lsb_data=0;

}

if(x%16<8)

{

msb_data=msb_data|(temp<<(7-x%16));

lsb_data=0x00|lsb_data;

}//保留以前的数据,把第x个点亮

if(x%16==8)

{

msb_data=msb_data|0x00;

lsb_data=lsb_data|0x80;

}

if(x%16>8) 大于24小于32

{

msb_data=msb_data|0x00;

lsb_data=lsb_data|(temp<<(15-x%16));

}

lcm_com(0x34);//扩充指令集

lcm_com(hang);

lcm_com(lie);

lcm_dat(msb_data);

lcm_dat(lsb_data);

lcm_com(0x36);//绘图显示开

}

以上就是关于12864屏幕上显示的图像与想要显示的图像在位置上不符全部的内容,包括:12864屏幕上显示的图像与想要显示的图像在位置上不符、求一个12864画点简单程序,和一个画图的简单程序,不要教程 要亲测过可以才行。、12864液晶屏是怎样显示图片等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存