//*************************************************************************************************
//*                          *
//*    ******************************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液晶驱动(添加详细)相关推荐

  1. win10添加网络打印机_大神教你设置 win10系统安装打印机及驱动的详细方案 -win10使用教程...

    人吃五谷杂粮会生病,电脑也一样.工作运行时间久了就会出现很多的问题,比如win10系统安装打印机及驱动这样的状况,大部分伙计都是第一次看到win10系统安装打印机及驱动这样的事情,想请高手帮忙解决wi ...

  2. 基于s3c2440的12864液晶驱动

    基于s3c2440的12864液晶驱动 12864是12864点阵液晶模块的点阵数简称,业界约定俗成的简称. 一.液晶显示模块概述 12864A-1 汉字图形点阵液晶显示模块,可显示汉字及图形,内置 ...

  3. 【连载】【FPGA黑金开发板】Verilog HDL那些事儿--12864(ST7565P)液晶驱动(十三)...

    声明:本文为原创作品,版权归akuei2及黑金动力社区(http://www.heijin.org)共同所有,如需转载,请注明出处http://www.cnblogs.com/kingst/ 4.2 ...

  4. 【连载】【FPGA黑金开发板】Verilog HDL那些事儿--12864(ST7565P)液晶驱动(十三)

    声明:本文转载于http://www.cnblogs.com/kingst,版权归akuei2及黑金动力社区(http://www.heijin.org)共同所有. 4.2 实验十二:12864(ST ...

  5. 【Android取证篇】ADB端口驱动更新详细步骤

    [Android取证篇]ADB端口驱动更新详细步骤 更新ADB端口驱动,解决无法连接设备问题-[蘇小沐] 1.[记录VID]路径:设备管理器->便携设备->属性->(记录)VID 查 ...

  6. 【连载】【黑金动力社区原创力作】《液晶驱动与GUI 基础教程》 --序言(一)

    声明:本文为原创作品,版权归黑金动力社区(http://www.heijin.org)所有,如需转载,请注明出处http://www.cnblogs.com/kingst/ 大家好,我是XiaomaG ...

  7. 12864液晶驱动源码,独创中英文混合输出

    12864液晶驱动源码,独创中英文混合输出 51单片机学习笔记:ST7920控制器的12864液晶使用总结 转载于:https://www.cnblogs.com/LittleTiger/p/4724 ...

  8. win7安装android驱动,win7系统安装手机驱动的详细教程

    有时候手机会插入win7专业版系统电脑中下载应用或操作手机,那么就必须要有手机驱动,那么win7系统如何安装手机驱动,安装手机驱动的方法也比较简单,这里以HTC手机为例,其他的手机也是一样.和大家详细 ...

  9. 【黑金动力社区】【原创博文集锦】《液晶驱动与GUI 基础教程》导读

    [连载][黑金动力社区原创力作]<液晶驱动与GUI 基础教程> --序言(一) [连载][黑金动力社区原创力作]<液晶驱动与GUI 基础教程>--第一章 从这里开始(二) [连 ...

最新文章

  1. Linux系统学习笔记:文件描述符标志
  2. [转]搞ACM的你伤不起(转自Roba大神)
  3. 隐形需求 软件测试,从开发角度聊聊如何洞悉隐性需求
  4. php上传报文,PHP-02.文件上传、php保存/转移上传的文件、常见的网络传输协议、请求报文及属性、响应报文及属性...
  5. mybatis oracle批量修改
  6. POI读入excel文件到Java中
  7. 8.13模拟:分治二分倍增快速幂
  8. linux7 dns正向,Centos 7 搭建DNS正向解析和反向解析
  9. 12、基于yarn的提交模式
  10. 版本控制工具的必要性、作用、分类和发展历程
  11. Linux系统的查看系统信息和常用监控命令
  12. 库论计量计算电池容量
  13. 51单片机复习:红外通信
  14. Python将PDF按页转换为图片
  15. Dzz Desktop1.2 Demo
  16. OpenMp之sections用法
  17. (三)GNSS定位中的定位系统和误差源
  18. ildasm Reflector
  19. phpcms怎么做专题页面
  20. 【每日一题】 1184. 公交站间的距离

热门文章

  1. c fscanf 按行读取文件_每日干货丨C语言文件操作函数
  2. 【数据结构与算法】主宰这个世界的10大算法
  3. 嘘!你与谷歌语音助手的对话,可能已经泄露……
  4. EXcel 2016添加下拉列表,并且配置不同颜色,图文并茂手把手指导
  5. 【Hololens】微软Hololens虚拟现实视频集
  6. i2c时序图的详细讲解_外脚手架及外架防护棚搭设详细讲解,附做法图
  7. _百万内最魔性的GT跑车 测试捷豹F-TYPE P380四驱版
  8. 15.01万起!全新威马E.5上市:505公里长续航
  9. 3月3日发布!realme V25正式官宣:超大内存的国潮手机
  10. 支付宝上线宠物防走丢功能