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的操作例程相关推荐

  1. 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 ...

  2. Nexys4DDR的DDR2读写操作例程详解

    本文在vivado下进行,已经上板验证,使用verilog语言. //***************************************************************** ...

  3. 玩转X-CTR100 l STM32F4 l 基础例程printf、LED、蜂鸣器、拨码开关、位带操作

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器基础板载资源的使用,包 ...

  4. 整理javascript操作文件说明:读写文件

    Javascript是网页制作中离不开的脚本语言,依靠它,一个网页的内容才生动活泼.富有朝气.但也许你还没有发现并应用它的一些更高级的功能吧?比如,对文件和文件夹进行读.写和删除,就象在VB.VC等高 ...

  5. JavaScript操作文件(2)

    一.功能实现核心:FileSystemObject 对象     要在javascript中实现文件操作功能,主要就是依靠FileSystemobject对象. 二.FileSystemObject编 ...

  6. curses颜色操作

    curses颜色操作 start_color, init_pair, init_color, has_colors, can_change_color, color_content, pair_con ...

  7. 整理javascript操作文件说明.

    Javascript是网页制作中离不开的脚本语言,依靠它,一个网页的内容才生动活泼.富有朝气.但也许你还没有发现并应用它的一些更高级的功能吧?比如,对文件和文件夹进行读.写和删除,就象在VB.VC等高 ...

  8. ie下利用js操作文件及目录

    注:以下操作只在IE下有效! Javascript是网页制作中离不开的脚本语言,依靠它,一个网页的内容才生动活泼.富有朝气.但也许你还没有发现并应用它的一些更高级的功能吧?比如,对文件和文件夹进行读. ...

  9. [js操作(转)]在IE下js操作本地文件相关方法

    <div class = "post"><h1 class = "postTitle"><p><span>注:以 ...

  10. web调用IC卡读卡器开发第六章--CPU卡APDU操作

    CPU卡APDU的web操作 CPU卡介绍 友我科技IC卡读卡器web插件 CPU卡复位 CPU卡APDU操作 操作例程 CPU卡介绍 CPU卡与M1卡不同, 他不是一种逻辑存储卡,一张空白的CPU卡 ...

最新文章

  1. ajax 导出文件给 文件重新命名_Tanner LEdit 05 | 导出GDSII文件
  2. wireshark协议解析器原理与插件编写
  3. Makefile写法
  4. 王高利:Apache Httpd负载均衡Tomcat并实现Session Sticky和Session Cluster
  5. Mapreduce执行过程分析(基于Hadoop2.4)——(一)
  6. Java中int[]与Integer[]相互转化的方法
  7. Java 算法 王、后传说
  8. linux下spark的python编辑_Linux下搭建Spark 的 Python 编程环境的方法
  9. 只需修改一个像素,让神经网络连猫都认不出 | 论文+代码
  10. outlook常见错误分析指南
  11. NavigateUr l动态参数 格式化参数
  12. 如何查看Dell服务器前面板LCD的报错资讯
  13. mysql+centos7+主从复制
  14. Deepin字体下载与安装
  15. 接口测试定义以及接口测试常用的工具集合
  16. LODOP 打印插件使用
  17. (附思维导图+笔记)-六面美团后,我发现大厂面试真的有“题库”!
  18. weight initialization
  19. NR 物理资源(pointA,PRB,CRB之间关系)
  20. 企鹅够牛,大事不断:腾讯音乐遭“投资者律师代表团”调查、大数据组件TubeMQ宣布开源、1千万美元领投英国AI企业SenSat...

热门文章

  1. 【JSP内置对象】之9大内置对象(JavaWeb必背必掌握)
  2. TOGAF架构学习总结
  3. java batik_Java Batik框架画SVG图 JSVGCanvas
  4. java ojdbc14.jar_ojdbc14_g.jar
  5. 微信小程序引入iconfont实现添加自定义颜色图标
  6. 对python生成的EXE文件 进行反编译
  7. 基于PHP+MySQL的物流配送管理系统平台
  8. Opencv 形态学操作 灰度、滤波、膨胀腐蚀、开闭运算、梯度-python代码
  9. hmcl手机版_hmcl启动器手机版下载-hmcl启动器安卓版下载mod附教程_易玩网
  10. 第四方支付 java代码_第三方支付平台 API聚合支付系统 云支付源码 PHP第四方pi支付...