128x64液晶驱动(添加详细)
//*************************************************************************************************
//* *
//* ******************************LCD12864驱动程序************************** *
//* *
//*************************************************************************************************
//*************************************************************************************************
//* *
//* ******************************头文件及宏定义************************** *
//* *
//*************************************************************************************************
#include <at89x51.h>
#define RST P2_0 /*复位信号,低电平复位*/
#define E P2_1 /*E 使能信号,为H或1时表示DRAM数据读到DB7~DB0,为L或0表示锁存DB7~DB0*/
#define RW P2_2 /* RW 为1 E 为1时数据被读到DB7~DB0,为0 且E为下降沿时DB7~DB0的数据被写入到IR(指令寄存器)或DR(数据寄存器)*/
#define DI P2_3 /* DI为1表示DB7~DB0为显示数据,为0表示DB7~DB0为显示指令数据*/
#define CS1 P2_5 /*CS1为1表示选择该芯片(右半屏)信号*/
#define CS2 P2_4 /*CS2为1表示选择该芯片(左半屏)信号*/
#define LCDPORT P0
#define BUSYSTATUS P0_7 //忙状态位。
//#define DISONSTATUS P0_5 //显示开关状态位。
//#define RSTSTATUS P0_4 //复位状态位。
#define LCDSTARTROW 0xC0 //设置起始行指令。
#define LCDPAGE 0xB8 //设置页指令。
#define LCDLINE 0x40 //设置列指令。
//*************************************************************************************************
//* *
//* ********************************读忙标志位********************************* *
//* *
//*************************************************************************************************
bit bCheckBusy()
{
LCDPORT=0xFF;
RW=1;
DI=0;
E=1;
E=0;
return BUSYSTATUS;
}
//*************************************************************************************************
//* *
//* ********************************写数据********************************* *
//* *
//*************************************************************************************************
void vWriteData(unsigned char ucData)
{
while(bCheckBusy());
LCDPORT=0xFF;
RW=0;
DI=1;
LCDPORT=ucData;
E=1;
E=0;
}
//*************************************************************************************************
//* *
//* ********************************写指令********************************* *
//* *
//*************************************************************************************************
void vWriteCMD(unsigned char ucCMD)
{
while(bCheckBusy());
LCDPORT=0xFF;
RW=0;
DI=0;
LCDPORT=ucCMD;
E=1;
E=0;
}
//*************************************************************************************************
//* *
//* ********************************LCD初始化函数******************************* *
//* *
//*************************************************************************************************
void vLCDInitialize()
{
CS1=1;
CS2=1;
vWriteCMD(0x38); //8位形式,两行字符。
vWriteCMD(0x0F); //开显示。
vWriteCMD(0x01); //清屏。
vWriteCMD(0x06); //画面不动,光标右移。
vWriteCMD(LCDSTARTROW); //设置起始行。
}
//*************************************************************************************************
//* *
//* ******************************显示自定义行********************************* *
//* *
//*************************************************************************************************
//在8×128的格子里显示自定义长度的一行
void vShowCustomRow(unsigned char ucPage,unsigned char ucLine,unsigned char ucWidth,unsigned char *ucaRow)
{
unsigned char ucCount; //取值范围:ucPage:0~7;ucLine:0~127;
if(ucLine<64) //ucWidth:0~127;ucLine+ucWidth<1128。
{
CS1=1;
CS2=0;
vWriteCMD(LCDPAGE+ucPage);
vWriteCMD(LCDLINE+ucLine);
if((ucLine+ucWidth)<64)
{
for(ucCount=0;ucCount<ucWidth;ucCount++)
vWriteData(*(ucaRow+ucCount));
}
else
{
for(ucCount=0;ucCount<64-ucLine;ucCount++)
vWriteData(*(ucaRow+ucCount));
CS1=0;
CS2=1;
vWriteCMD(LCDPAGE+ucPage);
vWriteCMD(LCDLINE);
for(ucCount=64-ucLine;ucCount<ucWidth;ucCount++)
vWriteData(*(ucaRow+ucCount));
}
}
else
{
CS1=0;
CS2=1;
vWriteCMD(LCDPAGE+ucPage);
vWriteCMD(LCDLINE+ucLine-64);
for(ucCount=0;ucCount<ucWidth;ucCount++)
vWriteData(*(ucaRow+ucCount));
}
}
//*************************************************************************************************
//* *
//* *****************************汉字显示函数*********************************** *
//* *
//*************************************************************************************************
//此函数将16×16汉字显示在8×128的格子里。
void vShowOneChin(unsigned char ucPage,unsigned char ucLine,unsigned char *ucaChinMap)
{
vShowCustomRow(ucPage,ucLine,16,ucaChinMap);
vShowCustomRow(ucPage+1,ucLine,16,ucaChinMap+16);
}
//*************************************************************************************************
//* *
//* *****************************字符显示函数*********************************** *
//* *
//*************************************************************************************************
//此函数将8×16字符显示在8×128的格子里。
void vShowOneChar(unsigned char ucPage,unsigned char ucLine,unsigned char *ucaCharMap)
{
vShowCustomRow(ucPage,ucLine,8,ucaCharMap);
vShowCustomRow(ucPage+1,ucLine,8,ucaCharMap+8);
}
//*************************************************************************************************
//* *
//* **********************************显示图片*********************************** *
//* *
//*************************************************************************************************
void vShowGraph(unsigned char ucPage,unsigned char ucLine,unsigned char ucWidth,unsigned char ucHigh,unsigned char * ucaGraph)
{
unsigned char ucCount;
for(ucCount=0;ucCount<ucHigh;ucCount++)
vShowCustomRow(ucPage+ucCount,ucLine,ucWidth,ucaGraph+ucCount*ucWidth);
}
128x64液晶驱动(添加详细)相关推荐
- win10添加网络打印机_大神教你设置
win10系统安装打印机及驱动的详细方案
-win10使用教程...
人吃五谷杂粮会生病,电脑也一样.工作运行时间久了就会出现很多的问题,比如win10系统安装打印机及驱动这样的状况,大部分伙计都是第一次看到win10系统安装打印机及驱动这样的事情,想请高手帮忙解决wi ...
- 基于s3c2440的12864液晶驱动
基于s3c2440的12864液晶驱动 12864是12864点阵液晶模块的点阵数简称,业界约定俗成的简称. 一.液晶显示模块概述 12864A-1 汉字图形点阵液晶显示模块,可显示汉字及图形,内置 ...
- 【连载】【FPGA黑金开发板】Verilog HDL那些事儿--12864(ST7565P)液晶驱动(十三)...
声明:本文为原创作品,版权归akuei2及黑金动力社区(http://www.heijin.org)共同所有,如需转载,请注明出处http://www.cnblogs.com/kingst/ 4.2 ...
- 【连载】【FPGA黑金开发板】Verilog HDL那些事儿--12864(ST7565P)液晶驱动(十三)
声明:本文转载于http://www.cnblogs.com/kingst,版权归akuei2及黑金动力社区(http://www.heijin.org)共同所有. 4.2 实验十二:12864(ST ...
- 【Android取证篇】ADB端口驱动更新详细步骤
[Android取证篇]ADB端口驱动更新详细步骤 更新ADB端口驱动,解决无法连接设备问题-[蘇小沐] 1.[记录VID]路径:设备管理器->便携设备->属性->(记录)VID 查 ...
- 【连载】【黑金动力社区原创力作】《液晶驱动与GUI 基础教程》 --序言(一)
声明:本文为原创作品,版权归黑金动力社区(http://www.heijin.org)所有,如需转载,请注明出处http://www.cnblogs.com/kingst/ 大家好,我是XiaomaG ...
- 12864液晶驱动源码,独创中英文混合输出
12864液晶驱动源码,独创中英文混合输出 51单片机学习笔记:ST7920控制器的12864液晶使用总结 转载于:https://www.cnblogs.com/LittleTiger/p/4724 ...
- win7安装android驱动,win7系统安装手机驱动的详细教程
有时候手机会插入win7专业版系统电脑中下载应用或操作手机,那么就必须要有手机驱动,那么win7系统如何安装手机驱动,安装手机驱动的方法也比较简单,这里以HTC手机为例,其他的手机也是一样.和大家详细 ...
- 【黑金动力社区】【原创博文集锦】《液晶驱动与GUI 基础教程》导读
[连载][黑金动力社区原创力作]<液晶驱动与GUI 基础教程> --序言(一) [连载][黑金动力社区原创力作]<液晶驱动与GUI 基础教程>--第一章 从这里开始(二) [连 ...
最新文章
- Linux系统学习笔记:文件描述符标志
- [转]搞ACM的你伤不起(转自Roba大神)
- 隐形需求 软件测试,从开发角度聊聊如何洞悉隐性需求
- php上传报文,PHP-02.文件上传、php保存/转移上传的文件、常见的网络传输协议、请求报文及属性、响应报文及属性...
- mybatis oracle批量修改
- POI读入excel文件到Java中
- 8.13模拟:分治二分倍增快速幂
- linux7 dns正向,Centos 7 搭建DNS正向解析和反向解析
- 12、基于yarn的提交模式
- 版本控制工具的必要性、作用、分类和发展历程
- Linux系统的查看系统信息和常用监控命令
- 库论计量计算电池容量
- 51单片机复习:红外通信
- Python将PDF按页转换为图片
- Dzz Desktop1.2 Demo
- OpenMp之sections用法
- (三)GNSS定位中的定位系统和误差源
- ildasm Reflector
- phpcms怎么做专题页面
- 【每日一题】 1184. 公交站间的距离
热门文章
- c fscanf 按行读取文件_每日干货丨C语言文件操作函数
- 【数据结构与算法】主宰这个世界的10大算法
- 嘘!你与谷歌语音助手的对话,可能已经泄露……
- EXcel 2016添加下拉列表,并且配置不同颜色,图文并茂手把手指导
- 【Hololens】微软Hololens虚拟现实视频集
- i2c时序图的详细讲解_外脚手架及外架防护棚搭设详细讲解,附做法图
- _百万内最魔性的GT跑车 测试捷豹F-TYPE P380四驱版
- 15.01万起!全新威马E.5上市:505公里长续航
- 3月3日发布!realme V25正式官宣:超大内存的国潮手机
- 支付宝上线宠物防走丢功能