教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 小学教育 >

51单片机12864显示汉字画图画点常用例程(2)

来源:网络收集 时间:2026-09-12
导读: uchar pos; if(x == 0) // 第一行的地址是80H { x = 0x80; } else if(x == 1) //第二行的地址是90H { x = 0x90; } else if(x == 2) //第三行的地址是88H { x = 0x88; } else if(x == 3) { x = 0x98; } pos = x + y;

uchar pos;

if(x == 0) // 第一行的地址是80H

{

x = 0x80;

}

else if(x == 1) //第二行的地址是90H

{

x = 0x90;

}

else if(x == 2) //第三行的地址是88H

{

x = 0x88;

}

else if(x == 3)

{

x = 0x98;

}

pos = x + y;

LCD12864_WriteCmd(pos);

}

/*******************************************************************************

* 函 数 名 : LCD12864_ClearScreen

* 函数功能 : 在画图模式下,LCD12864的01H命令不能清屏,所以要自己写一个清

* * 屏函数

* 输 入 : 无

* 输 出 : 无

*******************************************************************************/

#ifdef LCD12864_PICTURE

void LCD12864_DrowPic(uchar *a)

{

unsigned char i,j;

LCD12864_ClearScreen();

LCD12864_WriteCmd(0x34); //开启扩展指令集,并关闭画图显示。

for(i=0;i<32;i++) //因为LCD有纵坐标32格所以写三十二次

{

LCD12864_WriteCmd(0x80+i); //先写入纵坐标Y的值

LCD12864_WriteCmd(0x80); //再写入横坐标X的值

for(j=0; j<16; j++) //横坐标有16位,每位写入两个字节的的数据,也 { //就写入32次以为当写入两个字节之后横坐标会自 LCD12864_WriteData(*a); //动加1,所以就不用再次写入地址了。 a++;

}

}

for(i=0; i<32; i++) //因为LCD有纵坐标32格所以写三十二次

{

LCD12864_WriteCmd(0x80+i); //先写入纵坐标Y的值

LCD12864_WriteCmd(0x88); //再写入横坐标X的值

for(j=0; j<16; j++) //横坐标有16位,每位写入两个字节的的数据,也

{ //就写入32次以为当写入两个字节之后横坐标会自 LCD12864_WriteData(*a); //动加1,所以就不用再次写入地址了。 a++; }

}

LCD12864_WriteCmd(0x36); //开显示

LCD12864_WriteCmd(0x30); //转回基本指令集

}

/*******************************************************************************

* 函 数 名 : LCD12864_DrowPoint

* 函数功能 : 在一定的坐标点亮一个点,可以用于画线条

* 输 入 : x, y

* 输 出 : 无

*******************************************************************************/

void LCD12864_DrowPoint(uchar x, uchar y)

{

uint bt = 0, readValue = 0;

uchar x_adr, y_adr, h_bit, l_bit;

//--Y轴最大一共64,但是12864分为上半屏和下半屏,超过32就是下半屏了,--// //--地址得又从零开始了。所以对32求余数,得到Y轴的坐标,然后加上80H的基地址--//

y_adr = 0x80 + y % 32; //计算Y轴的地址

//--当Y大于31时是下半屏,X(水平位置的地址)是从88H开始的,而且它是16位一--//

//--个地址,所以对16求模。而上半屏的地址是从80H开始的--//

if(y>31)

{

x_adr = 0x88 + x / 16; //计算X轴的地址

}

else

{

x_adr = 0x80 + x / 16;

}

//--求出X(水平位置),点亮的点是在16位数据里面的哪一个位--//

//--所以对这个数求余数--//

bt = 0x8000 >> (x % 16);

LCD12864_WriteCmd(0x34); //进入拓展指令集

LCD12864_WriteCmd(y_adr); //读取数据的时候要先写入所取数据的地址 LCD12864_WriteCmd(x_adr);

LCD12864_ReadData(); //读取的第一个字节不要,

readValue = LCD12864_ReadData(); //从第二个字节开始接收。

readValue <<= 8;

readValue |= LCD12864_ReadData();

bt = bt | readValue;

h_bit = bt >> 8;

l_bit = bt;

LCD12864_WriteCmd(y_adr); //写入点的时候,从新写入地址,因为地址已经改变。

LCD12864_WriteCmd(x_adr);

LCD12864_WriteData(h_bit);

LCD12864_WriteData(l_bit);

LCD12864_WriteCmd(0x36); //开显示

LCD12864_WriteCmd(0x30); //关闭绘图指令集

}

#endif

//////////////////////////////////////////////////画图例程////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////以下是 主文件 main.c 的内容

#include<reg51.h>

#include"lcd12864.h"

//---图片代码---//

unsigned char code Photo1[] ={

0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x01,0x3F,0xC0,

0x80,0x42,0x04,0x20,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x8A,0x1F,

0xFC,0x42,0x04,0xF8,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x80,

0x00,0x00,0x00,0x00,0x00,0x01,0x2A,0x87,

0xF0,0xA2,0x0A,0xF8,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0xBF,0x84,

0x10,0xA2,0x0A,0x88,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x1F,

0xFC,0xA2,0x0A,0xF8,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x9F,0x90,

0x05,0x2F,0xCA,0xA4,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x03,

0xE1,0xA8,0x4A,0xA8,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0xBF,0xC2,

0x24,0x48,0x44,0x90,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x92,0x84,

0x24,0xA8,0x4A,0xA8,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0xA6,0x58,

0x3D,0x0F,0xD0,0xC4,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x1C,0xFF,0xC0,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x23,0x08,0x37,0x80,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x40,0x10,0x08,0x40,0x00,0xFF,0x90,

0x10,0x08,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x81,0x86,0x10,0x40,0x00,0x08,0x08,

0x10,0xFF,0x86,0x00,0x00,0x00,0x00,0x00,

0x01,0x02,0x49,0x40,0x40 …… 此处隐藏:4291字,全部文档内容请下载后查看。喜欢就下载吧 ……

51单片机12864显示汉字画图画点常用例程(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/43796.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)