51单片机12864显示汉字画图画点常用例程(2)
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字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [小学教育]四年级综合实践活动课《衣物的洗涤》教
- [小学教育]2014半年工作总结怎么写
- [小学教育]20世纪外国文学专题综合试题及答案
- [小学教育]TS_1循环使用催化丙烯环氧化反应研究
- [小学教育]最实用的考勤签到表(上下班签到表)
- [小学教育]气候与生态建筑——以新疆民居为例
- [小学教育]二人以上股东有限责任公司章程参考样本
- [小学教育]2014届第一轮复习资料4.1,3美好生活的
- [小学教育]土方开挖、降水方案
- [小学教育]手绘儿童绘本《秋天的图画》(蜡笔)
- [小学教育]2002级硕士研究生卫生统计学考试试题
- [小学教育]环保装备重点发展目录
- [小学教育]金蝶K3合并报表培训教材
- [小学教育]岩浆岩试题及参考答案
- [小学教育]知之深爱之切学习心得
- [小学教育]第十二章 蛋白质的生物合成
- [小学教育]Chapter 2-3 Solid structure and basi
- [小学教育]市政道路雨季专项施工方案
- [小学教育]中国海洋大学2012-2013学年第二学期天
- [小学教育]教育心理学第3章-学习迁移
- 浅谈深化国企改革中加强党管企业
- 2006年中国病理生理学会学术活动安排
- 设计投标工作大纲
- 基于ARP的网络攻击与防御
- 2016届湖北省七市(州)教科研协作体高三
- Google_学术搜索及其检索技巧
- 2019-2020学年七年级地理下册6.3美洲教
- 城市道路可研报告
- 【名师指津】2012高考英语 写作基础技
- 6级知识点培训北京师范大学《幼儿智趣
- 注册会计师会计知识点:金融资产
- 新安装 500 kV 变压器介损分析与判断
- PS2模拟器PCSX2设置及使用教程.
- 医院药事管理与药剂科管理组织机构
- {PPT背景素材}丹巴的醉人美景,免费,一
- NAS网络存储应用解决方案
- 青海省西宁市六年级上学期数学期末考试
- 测量管理体系手册依据ISO10012:2003
- 洞子小学培养骨干教师工作计划
- 浅谈《牛津初中英语》的教材特点及教学




