LCD12864的操作例程
12864液晶屏是工业控制领域常用的显示部件,以下为老朽自己写的一部分程序以搏一洒;
#include "stc8g.h"
#include "intrins.h"
#define DATA_PORT P0
sbit LCD12864_CS1 = P2^5; //左半屏高有效;
sbit LCD12864_CS2 = P2^4; //右边半屏高有效;
sbit LCD12864_RST = P2^3; //复位信号低有效
sbit LCD12864_RS = P2^0; //指令数据选择信号低指令高数据;
sbit LCD12864_RW = P2^1; //读写信号,(高度低些)高为读低为写;
sbit LCD12864_E = P2^2; //使能操作;char code hanzi[]=
{
/*-- 文字0: 本 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x10,0x10,0x10,0x10,0xD0,0x30,0xFF,0x30,0xD0,0x10,0x10,0x10,0x10,0x00,0x00,
0x10,0x08,0x04,0x02,0x09,0x08,0x08,0xFF,0x08,0x08,0x09,0x02,0x04,0x08,0x10,0x00,/*-- 文字1: 机 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x10,0xD0,0xFF,0x90,0x10,0x00,0xFE,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,
0x04,0x03,0x00,0xFF,0x00,0x83,0x60,0x1F,0x00,0x00,0x00,0x3F,0x40,0x40,0x78,0x00,/*-- 文字2: 地 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x20,0x20,0x20,0xFF,0x20,0x20,0x80,0xF8,0x80,0x40,0xFF,0x20,0x10,0xF0,0x00,0x00,
0x10,0x30,0x10,0x0F,0x08,0x08,0x00,0x3F,0x40,0x40,0x5F,0x42,0x44,0x43,0x78,0x00,/*-- 文字3: 址 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x20,0x20,0x20,0xFF,0x20,0x20,0x00,0xF8,0x00,0x00,0xFF,0x40,0x40,0x40,0x00,0x00,
0x10,0x30,0x10,0x0F,0x08,0x48,0x40,0x7F,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x00,/*-- 文字4: 串 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x3C,0x24,0x24,0x24,0x24,0xFF,0x24,0x24,0x24,0x24,0x3C,0x00,0x00,0x00,
0x00,0x1F,0x09,0x09,0x09,0x09,0x09,0xFF,0x09,0x09,0x09,0x09,0x09,0x1F,0x00,0x00,/*-- 文字5: 口 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0xFC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFC,0x00,0x00,0x00,
0x00,0x00,0x7F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7F,0x00,0x00,0x00,/*-- 文字6: 波 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x60,0x02,0x0C,0xC0,0x00,0xF8,0x88,0x88,0x88,0xFF,0x88,0x88,0xA8,0x18,0x00,
0x04,0x04,0x7C,0x03,0x80,0x60,0x1F,0x80,0x43,0x2C,0x10,0x28,0x46,0x81,0x80,0x00,/*-- 文字7: 特 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x40,0x3C,0x10,0xFF,0x10,0x10,0x40,0x48,0x48,0x48,0x7F,0x48,0xC8,0x48,0x40,0x00,
0x02,0x06,0x02,0xFF,0x01,0x01,0x00,0x02,0x0A,0x12,0x42,0x82,0x7F,0x02,0x02,0x00,/*-- 文字8: 率 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x14,0xA4,0x44,0x24,0x34,0xAD,0x66,0x24,0x94,0x04,0x44,0xA4,0x14,0x00,0x00,
0x08,0x09,0x08,0x08,0x09,0x09,0x09,0xFD,0x09,0x09,0x0B,0x08,0x08,0x09,0x08,0x00,/*-- 文字9: 黑方块 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0xff,0xff,0xff,0xFF,0xff,0xff,0xff,0xff,0xff,0xff,0xFF,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
/*-- 清零10 --*/
/*-- 宽度x高度=16x16 --*/
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,
/*-- 文字11;横线图像 --*/
/*-- 宽度x高度=16x16 --*/
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
};char code shuzi[]= {
/*-- 文字10: 0 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
/*-- 文字11: 1 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
/*-- 文字12: 2 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
/*-- 文字13: 3 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,
/*-- 文字14: 4 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,
/*-- 文字15: 5 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,
/*-- 文字16: 6 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,
/*-- 文字17: 7 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,
/*-- 文字18: 8 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,
/*-- 文字19: 9 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,
/*-- 文字A: 冒号 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,
/*-- 文字b: 清空 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};/*******************************************************************************
* 函 数 名 : LCD12864_WriteCmd
* 函数功能 : 写入一个命令到12864
* 输 入 : cmd RS=H;数据,L指令
* 输 出 : 无 WR=H: 读 L写;
*******************************************************************************/void lcd12864_writecmd(unsigned char cmd){ unsigned char xh;LCD12864_E = 1; //E初始为高延时一段时间LCD12864_RS = 1;LCD12864_RW = 1;xh=60;while(xh--);LCD12864_E = 0;xh=20;while(xh--);LCD12864_RS = 0;LCD12864_RW = 0;xh=40;while(xh--);LCD12864_E = 1;DATA_PORT = cmd; xh=60;while(xh--);LCD12864_E = 0;// 锁存xh=10;while(xh--);}/*******************************************************************************
* 函 数 名 : Lcd2864WriteData
* 函数功能 : 写入一个数据到12864
* 输 入 : cmd RS=H;数据,L指令
* 输 出 : 无 WR=H: 读 L写;
*******************************************************************************/void lcd12864_writedat(unsigned char dat)
{unsigned char xh;LCD12864_E = 1; //E初始为高延时一段时间LCD12864_RS = 0;LCD12864_RW = 1;xh=60;while(xh--);LCD12864_E = 0;xh=20;while(xh--);LCD12864_RS = 1;LCD12864_RW = 0;xh=40;while(xh--);LCD12864_E = 1;DATA_PORT = dat; xh=60;while(xh--);LCD12864_E = 0;// 锁存xh=10;while(xh--);}/*******************************************
***** 函 数 名 : LCD12864_Init ****
***** 函数功能 : 初始化12864 ****
***** 输 入 : 无 ****
***** 输 出 : 无 ****
* ****说 明 : ****
********************************************/void lcd12864_init(void)
{ unsigned char hczz;LCD12864_RST = 0;hczz=20;while(hczz--);LCD12864_RST = 1;hczz=20;while(hczz--);lcd12864_writecmd(0x3F); //打开显示;lcd12864_writecmd(0xC0); // 显示起始行设置;
}/****************************************************************************************************
* 函 数 名 * :LcdWrite_Word(unsigned char x,unsigned char y,unsigned char *p) *
* 函数功能 * : 在液晶屏指定位置写一个字;p为存放数据的地址;x为纵坐标从上到下取值为0到3; *
* * : y为左右,取值范围为0到f,程序没有检测数值范围注意不要超过; *
* 输 入 * : 页地址,位地址,数据存放位置指针数值; *
* 输 出 * : 无
x代表从上到下的位置从0到3共四行可选;
y代表从左到右的位置:从0到f,共15个位置可选,汉字两个位置组成一个汉字每行能写8个汉字
num:是汉字数组里的排序:数组里面写好了编号;bit fan为布尔值,0代表正写,1代表反白;
*****************************************************************************************************/
void lcdwrite_word(unsigned char x,unsigned char y,unsigned char num,bit fan){unsigned char yin,i,datain;unsigned char *p;if(y<=7) //如果字符横坐标在0到7选左面片区{LCD12864_CS1 = 1; //选中左片区;LCD12864_CS2 = 0; //选中左片区;yin=y;}else //如果字符横坐标在8到e选右面片区{LCD12864_CS1 = 0; //选中右片区;LCD12864_CS2 = 1; //选中右片区;yin=y-8;}//写汉字上面8行16列;lcd12864_writecmd(0xB8+x*2); //设置页面x地址垂直地址上小下大;实际取值范围是b8到bflcd12864_writecmd(0x40+(yin<<3)); //设置y地址;水平地址,左边小右边大,取值范围是40到8f;p=&hanzi[0]+num*0x20;for(i=0;i<16;i++) //字模软件取得垂直八个点为一个字节,顺序取16列。是汉字的上面{datain=*p; //指针数值是程序区域存储的字模数据位置if(fan==1) //调用之前找到数组用&hanzi[0]数组取得数值datain=~datain; //赋值给p;p=&shuzu[x];就行 ;lcd12864_writedat(datain) ;p++;}//写汉字下面16列;lcd12864_writecmd(0xB8+x*2+1); //设置x地址;上下方向为xlcd12864_writecmd(0x40+(yin<<3)); //设置y地址;左右方向为yfor(i=0;i<16;i++){datain=*p; //指针没有动继续写下一行;if(fan==1) //调用之前找到数组用&hanzi[0]数组取得数值datain=~datain;lcd12864_writedat(datain) ;p++;}}/*******************************************************************************
* 函 数 名 : void Write0() *
* 函数功能 : 清屏12864时往数据ram区域写零清屏; *
* 输 入 : 无 *
* 输 出 : 无 *
*******************************************************************************/void write0(void){ unsigned char j,i,xh;LCD12864_CS1 = 1; //选中左片区;LCD12864_CS2 = 0; //选中左片区;xh=5;while(xh--)for(i=0;i<8;i++) //x坐标循环设置{lcd12864_writecmd(0xB8+i);lcd12864_writecmd(0x40);for(j=0;j<64;j++) //y坐标自动加一;{lcd12864_writedat(0x00);}}LCD12864_CS1 = 0; //选中右片区;LCD12864_CS2 = 1; //选中右片区;xh=5;while(xh--)for(i=0;i<8;i++){lcd12864_writecmd(0xB8+i);lcd12864_writecmd(0x40);for(j=0;j<64;j++){lcd12864_writedat(0x00);}}
}
/**********************************************
* 函 数 名 : void write——unmb() *
* 函数功能 : 在液晶上写数字 *
* 输 入 : 无 *
* 输 出 : 无 *
方法同写汉字一样,本例程全是正显示,需要反白的自己根据写汉字的方法修改程序即可;***********************************************/void write_numb(unsigned char x,unsigned char y,unsigned char num){unsigned char yin,i,datain,xh;unsigned char *p;if(y<=7) //如果字符横坐标在0到7选左面片区{LCD12864_CS1 = 1; //选中左片区;LCD12864_CS2 = 0; //选中左片区;xh=5;while(xh--)yin=y;}else //如果字符横坐标在8到f选右面片区{LCD12864_CS1 = 0; //选中右片区;LCD12864_CS2 = 1; //选中右片区;xh=5;while(xh--)yin=y-8;} //写数字上面8列;lcd12864_writecmd(0xB8+x*2); //设置页面x地址垂直地址上小下大;实际取值范围是b8到bflcd12864_writecmd(0xB8+x*2);lcd12864_writecmd(0x40+(yin<<3)); //设置y地址;水平地址,左边小右边大,取值范围是40到8f;p=&shuzi[0]+num*0x10;for(i=0;i<8;i++) //字模软件取得垂直八个点为一个字节,顺序取8列。是数字的上面{datain=*p; //指针数值是程序区域存储的字模数据位置//调用之前找到数组用&shuzi[0]数组取得数值//赋值给p;p=&shuzu[x];就行 ;lcd12864_writedat(datain) ;p++;}//写数字下面8列;lcd12864_writecmd(0xB8+x*2+1); //设置x地址;上下方向为xlcd12864_writecmd(0xB8+x*2+1);lcd12864_writecmd(0x40+(yin<<3)); //设置y地址;左右方向为yfor(i=0;i<8;i++){datain=*p; //指针没有动继续写下一行;lcd12864_writedat(datain) ;p++;}}
LCD12864的操作例程相关推荐
- usleep延时0.毫秒_LabVIEW从0到1系列视频培训_第4讲全集_操作例程说明
本期课件对应视频传送门 LabVIEW从0到1视频教学_课时4-1 LabVIEW从0到1视频教学_课时4-2 LabVIEW从0到1视频教学_课时4-3 LabVIEW从0到1视频教学_课时4-4 ...
- Nexys4DDR的DDR2读写操作例程详解
本文在vivado下进行,已经上板验证,使用verilog语言. //***************************************************************** ...
- 玩转X-CTR100 l STM32F4 l 基础例程printf、LED、蜂鸣器、拨码开关、位带操作
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器基础板载资源的使用,包 ...
- 整理javascript操作文件说明:读写文件
Javascript是网页制作中离不开的脚本语言,依靠它,一个网页的内容才生动活泼.富有朝气.但也许你还没有发现并应用它的一些更高级的功能吧?比如,对文件和文件夹进行读.写和删除,就象在VB.VC等高 ...
- JavaScript操作文件(2)
一.功能实现核心:FileSystemObject 对象 要在javascript中实现文件操作功能,主要就是依靠FileSystemobject对象. 二.FileSystemObject编 ...
- curses颜色操作
curses颜色操作 start_color, init_pair, init_color, has_colors, can_change_color, color_content, pair_con ...
- 整理javascript操作文件说明.
Javascript是网页制作中离不开的脚本语言,依靠它,一个网页的内容才生动活泼.富有朝气.但也许你还没有发现并应用它的一些更高级的功能吧?比如,对文件和文件夹进行读.写和删除,就象在VB.VC等高 ...
- ie下利用js操作文件及目录
注:以下操作只在IE下有效! Javascript是网页制作中离不开的脚本语言,依靠它,一个网页的内容才生动活泼.富有朝气.但也许你还没有发现并应用它的一些更高级的功能吧?比如,对文件和文件夹进行读. ...
- [js操作(转)]在IE下js操作本地文件相关方法
<div class = "post"><h1 class = "postTitle"><p><span>注:以 ...
- web调用IC卡读卡器开发第六章--CPU卡APDU操作
CPU卡APDU的web操作 CPU卡介绍 友我科技IC卡读卡器web插件 CPU卡复位 CPU卡APDU操作 操作例程 CPU卡介绍 CPU卡与M1卡不同, 他不是一种逻辑存储卡,一张空白的CPU卡 ...
最新文章
- ajax 导出文件给 文件重新命名_Tanner LEdit 05 | 导出GDSII文件
- wireshark协议解析器原理与插件编写
- Makefile写法
- 王高利:Apache Httpd负载均衡Tomcat并实现Session Sticky和Session Cluster
- Mapreduce执行过程分析(基于Hadoop2.4)——(一)
- Java中int[]与Integer[]相互转化的方法
- Java 算法 王、后传说
- linux下spark的python编辑_Linux下搭建Spark 的 Python 编程环境的方法
- 只需修改一个像素,让神经网络连猫都认不出 | 论文+代码
- outlook常见错误分析指南
- NavigateUr l动态参数 格式化参数
- 如何查看Dell服务器前面板LCD的报错资讯
- mysql+centos7+主从复制
- Deepin字体下载与安装
- 接口测试定义以及接口测试常用的工具集合
- LODOP 打印插件使用
- (附思维导图+笔记)-六面美团后,我发现大厂面试真的有“题库”!
- weight initialization
- NR 物理资源(pointA,PRB,CRB之间关系)
- 企鹅够牛,大事不断:腾讯音乐遭“投资者律师代表团”调查、大数据组件TubeMQ宣布开源、1千万美元领投英国AI企业SenSat...
热门文章
- 【JSP内置对象】之9大内置对象(JavaWeb必背必掌握)
- TOGAF架构学习总结
- java batik_Java Batik框架画SVG图 JSVGCanvas
- java ojdbc14.jar_ojdbc14_g.jar
- 微信小程序引入iconfont实现添加自定义颜色图标
- 对python生成的EXE文件 进行反编译
- 基于PHP+MySQL的物流配送管理系统平台
- Opencv 形态学操作 灰度、滤波、膨胀腐蚀、开闭运算、梯度-python代码
- hmcl手机版_hmcl启动器手机版下载-hmcl启动器安卓版下载mod附教程_易玩网
- 第四方支付 java代码_第三方支付平台 API聚合支付系统 云支付源码 PHP第四方pi支付...