求一个12864画点简单程序,和一个画图的简单程序,不要教程 要亲测过可以才行。

求一个12864画点简单程序,和一个画图的简单程序,不要教程 要亲测过可以才行。,第1张

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

#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);

}

给你测试了,行可行

下面论述的前提:LZ 得清楚,12864 实际上是 25632 点,把后面的 一半 搬到 第三行、第四行进行显示的。(这也是为什么 反白显示 只能是 1、3同步、2、4同步的原因)

首先得了解 绘图区 的结构:12864 这个屏的 绘图区,分有 16大列,每大列 有 16小列(点),1616=256,于是 它分成了 前 8大列 放在 第一、二行,后8 大列放在 第三、四行。告诉你这个结构,是想说:12864 的绘图区,是以 大列(16小列) 为单位进行 数据输入 显示的。现在来说题目:

1、从 0,0开始,这个最简单,由于从原点开始,可以直接输入数据。但要注意:

①输入的 横向长度,必须是 大列(16点)的整数倍,也就是说,你输入的数据,必须是 2Byte 的整数倍。如不足 长度,应自行补充。比如输入的 长度 为 35×16,横向35,不是 16的整数倍,那么输完 前面的 32 点后,横向还有 3个点,要补0 扩展成 16位 再输入。也就是说,你补充了0(显示为空白)后,实际数据为 48×16。

②因12864 不支持 自动换行,数据输入时,要自行在 横向结束时,进行换行(不是 12864 的四个行,而是每个 小点行)。

2,不从 0,0开始,这个比较繁琐。如果 起点的 横坐标的是 16的整数倍,可以直接通过 绘图 大列定位。如果起点坐标不是 16 的整数倍,那么要 先在每横向数据 的前面进行 填0 补充,虚构一个 16的整数倍。比如,起点在 18,0,那就需要在前面补 2个0,虚构起点在 16,0 的位置。这只是困难的开头,2个0 补充在数据头后,数据的低 2位就得 往 下一个数据 推了。这就是 连续数据 移位,一直移动到 横向长度 的结尾,再根据 LZ 上一个问题的方法处理结尾。连续数据 移位,比如:11100001 ,00011110,01111000,10000111,连续右移2位后,是 00111000,01000111,10011110,00100001, 11(000000,00000000),括号部分为12864补充 的长度,让数据为 16点 的整数倍。

1-1,尺寸不足 12864,就会导致其他区域数据的不定性(为上次的遗留),如果只需这个,那就应该在 绘图之前,进行 绘图区清0,也就是 输入 12864 点 的 0数据。

1-2,下半屏的坐标,参考 了解的 屏结构。

程序没看出什么问题,每一个半屏是12832=4096个像素,外循环32次;内循环16次,每一个write_data是一字节8位,对应8个像素点,这样32168就是4096个像素,就是半屏。

以上就是关于求一个12864画点简单程序,和一个画图的简单程序,不要教程 要亲测过可以才行。全部的内容,包括:求一个12864画点简单程序,和一个画图的简单程序,不要教程 要亲测过可以才行。、(51 单片机)关于 12864 区域 绘图,即 任意起始位置,绘任意太小的图片 、12864显示图像函数解释等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存