本文参考了博主@Z小旋的博文,代码在博主的代码之上修改

在放函数之前,先讲一下接线,一定要注意PSB不能忘记接

端口 解释
VSS GND
VDD VCC(5V or 3.3V)
CS 接VCC,持续高电平,一直选通
SID RW
SCLK E
PSB 接GND 表示串行驱动模式
BLA VCC(5V or 3.3V)
BLK 接GND
main函数
#define  ALLOCATE_EXTERN
#include "HC89S003F4.h"
#include <stdlib.h>
#include <intrins.h>
#include <stdio.h>
#include "lcd12864.H"void main(void)
{WDTCCR = 0x00;                        CLKSWR = 0x51;                     //选择内部高频RC为系统时钟,内部高频RC 2分频,Fosc=16MHzCLKDIV = 0x01;                     //Fosc 1分频得到Fcpu,Fcpu=16MHz P0M0 = P0M0&0x0F|0x08;             //P00设置为推挽输出P0M0 = P0M0&0xF0|0x80;             //P01设置为推挽输出P0M1 = P0M1&0x0F|0x08;             //P02设置为推挽输出Lcd_Init();LCD_Clear();while (1){LCD_Display_Words(0, 0, "秦时明月汉时关,");LCD_Display_Words(1, 0, "万里长征人未还。");LCD_Display_Words(2, 0, "但使龙城飞将在,");LCD_Display_Words(3, 0, "不教胡马度阴山。");}
}
lcd12864.c
#include "lcd12864.H"/* 字符显示RAM地址    4行8列 */
uint8_t LCD_addr[4][8]={{0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87},          //第一行{0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97},      //第二行{0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F},      //第三行{0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F}       //第四行
};void delay_2us(unsigned long fui_i)
{while(fui_i--);
}
void delay_ms(uint8_t time)
{while(time--)delay_2us(500);
}
/***    @name  SendByte[发送一个字节的数据]*/
void SendByte(uint8_t Dbyte)
{uint8_t i; for(i = 0;i < 8;i++){     SID = (Dbyte << i) & 0x80;   // 取最高位SCLK = 0;       // 时钟线置低  允许SID变化delay_2us(3);  // 延时使数据写入SCLK = 1;        // 释放时钟线,让LCD读取}
}/***  @name   Lcd_WriteCmd[写命令]*/
void Lcd_WriteCmd(uint8_t Cmd )
{delay_ms(1);           // 延时等待,防止忙线SendByte(WRITE_CMD);   SendByte(0xf0&Cmd);       //发送高4位SendByte(Cmd<<4);      //发送低4位
}/***  @name   Lcd_WriteData[写数据]*/
void Lcd_WriteData(uint8_t Dat )
{delay_ms(1);     SendByte(WRITE_DAT);   //11111,RW(0),RS(1),0SendByte(0xf0&Dat);    //发送高4位SendByte(Dat<<4);     //发送低4位
}
/** *  @name   Lcd_Init[LCD初始化]*/
void Lcd_Init(void)
{ delay_ms(50);         //等待液晶自检(延时>40ms)Lcd_WriteCmd(0x30);     //功能设定:选择基本指令集delay_ms(1);            //延时>100usLcd_WriteCmd(0x30);     //功能设定:选择8bit数据流delay_ms(1);           //延时>37usLcd_WriteCmd(0x0c);     //开显示delay_ms(1);           //延时>100usLcd_WriteCmd(0x01);     //清除显示,并且设定地址指针为00Hdelay_ms(30);            //延时>10msLcd_WriteCmd(0x06);     //进入设定点,初始化完成
}/** *  @name  LCD_Display_Words[显示字符]*/
void LCD_Display_Words(uint8_t x,uint8_t y,uint8_t*str)
{ Lcd_WriteCmd(LCD_addr[x][y]);     //写初始光标位置while(*str>0){ Lcd_WriteData(*str);         //写数据str++;     }
}/** *  @name  LCD_Display_Picture[显示图片]   */
void LCD_Display_Picture(uint8_t *img)
{uint16_t line,row;Lcd_WriteCmd(0x34);      //切换到扩充指令Lcd_WriteCmd(0x34);        //关闭图形显示for(line = 0; line < 32; line++){Lcd_WriteCmd(0x80+line);Lcd_WriteCmd(0x80);for (row = 0; row < 16; row++){Lcd_WriteData(*img ++);}}for(line = 0; line < 32; line++){Lcd_WriteCmd(0x80+line);Lcd_WriteCmd(0x88);for (row = 0; row < 16; row++){Lcd_WriteData(*img ++);}}Lcd_WriteCmd(0x36);           //打开图形显示        Lcd_WriteCmd(0x30);         //切换回基本指令
}
/** *  @name   LCD_Clear[清屏]*/
void LCD_Clear(void){Lcd_WriteCmd(0x01);            //清屏指令delay_ms(2);              //延时以待液晶稳定【至少1.6ms】}
lcd12864.h
#ifndef __lcd12864_H_
#define __lcd12864_H_
#include "HC89S003F4.h"#define WRITE_CMD  0xF8    // 写命令
#define WRITE_DAT   0xFA    // 写数据#define SID   P0_1        //RW
#define SCLK    P0_2        //E#define uint8_t  unsigned char
#define uint16_t    unsigned intvoid delay_2us(unsigned long fui_i);
void delay_ms(uint8_t time);
void SendByte(uint8_t Dbyte);
void Lcd_WriteCmd(uint8_t Cmd );
void SendByte(uint8_t Dbyte);
void Lcd_WriteData(uint8_t Dat );
void Lcd_Init(void);
void LCD_Display_Words(uint8_t x,uint8_t y,uint8_t*str);
void LCD_Display_Picture(uint8_t *img);
void LCD_Clear(void);#endif

文末提到一点,很多人在做LCD显示的时候,带字库的LCD也会显示汉字乱码,这是因为你用Keil编写的时候把代码的编码格式给改了,使用UltraEdit或者Notepad++把带你要显示的汉字的文件编码格式转为ASCII或者ANSI格式,之后写汉字的时候把Keil的编码格式改为GB2312就可以了

LCD12864串行驱动程序相关推荐

  1. ChibiOS系列:五、将STM32 USART与ChibiOS串行驱动程序配合使用

    本文翻译自:http://www.playembedded.org/blog/stm32-usart-chibios-serial/ 将STM32 USART与ChibiOS串行驱动程序配合使用 发表 ...

  2. [转载]轻松玩转LCD12864-基于AVR单片机的LCD12864串行显示

    原文链接: http://bbs.elecfans.com/forum.php?mod=viewthread&tid=282698&extra=&highlight=12864 ...

  3. 硬件之路-串行LCD12864之MSP430简单实现

    为什么80%的码农都做不了架构师?>>> 串行LCD12864引脚接法: 实现代码(MSP430): /** 12864.c* Created on: 2014-7-15* Auth ...

  4. AT24C02驱动程序,【I2C串行总线】的组成及工作原理

    AT24C02驱动程序 此程序运用到模块化编程,涉及到一下几个函数: 延时函数 起始信号函数 中止信号函数 发送字节函数 接收字节函数 写入数据函数 读取字节函数 通过对以上几类函数的应用实现对数据的 ...

  5. Arduino UNO通过SPI串行方式驱动LCD12864液晶屏

    LCD12864液晶屏简介 LCD12864带中文字库图形点阵式液晶显示器,可配合各种单片机可完成中文汉字.英文字符和图形显示,可构成全中文人机交互图形界面,模块具有功耗低.显示内容丰富等特点而应用广 ...

  6. 液晶屏 LCD12864 / LCD12232 串行 / 并行接口驱动

    液晶屏 LCD12864 / LCD12232 串行 / 并行接口驱动 一.LCD12864 / LCD12232 1.LCD12864 2.LCD12232 3.接线图 二.ST7920 1.接口时 ...

  7. STM32驱动LCD12864(串行模式)

    效果呈现 引脚定义:(VCC接入先询问厂家供电) PIN1--GND PIN2--5V PIN3--不接 PIN4--RS(CS) PIN5--R/W(SID) PIN6--E(SCK) PIN7-- ...

  8. 串行LCM12864驱动程序

    /****************************************************************************/ /* //程序说明  名字:lcm1286 ...

  9. 高速串行总线设计基础(八)揭秘SERDES高速面纱之CML电平标准与预加重技术

    文章目录 前言 物理信号 预加重 差分传输线 参考资料 前言 对于数字工程师来说,我们可能关注的仅仅是本文中的差分信号电平标准以及预加重技术,CML电平标准是Transceiver技术的首选,在Xil ...

最新文章

  1. 【Oracle RAC+DG实验】Oracle RAC+ASM+DataGuard配置实验记录+常见问题
  2. LightGBM用法速查表
  3. 图像处理(二十一)基于数据驱动的人脸卡通动画生成-Siggraph Asia 2014
  4. CSSbackground的详细使用
  5. HP6531s安装windows2003无法调节亮度的解决方法
  6. 一个有趣的关于flash和多种设备交互等技术应用的演示网站
  7. Wpf 调用线程无法访问此对象,因为另一个线程拥有该对象,解决方案
  8. jQuery学习笔记(四)
  9. 合肥师范学院计算机与技术,合肥师范学院计算机科学与技术系JAVA复习提纲
  10. 初学者的回归测试,都该注意哪几点?
  11. (笔记)电路设计(六)之稳压二极管的应用
  12. 网络安全:系统进程的基本概述
  13. 啃老 万岁_Windows 7已死,您的杀毒软件万岁
  14. 阿里云搭建MQTT服务器
  15. 成功需要培养独特的眼光,芸赞通天下沈杨
  16. js实现图片左右移动轮播
  17. QImage 图像格式小结 Format_RGB32
  18. 分布式事务开山之作——《深入理解分布式事务:原理与实战》草图曝光!!
  19. java 类一定要声明成public_关于使用public class 和 class声明类的区别
  20. 爱搞事情:我的黑苹果日记之安装路

热门文章

  1. 【JS】日期Date如何格式化为年月日yyyy-MM-dd hh:mm:ss
  2. ARM体系结构与编程(更)
  3. 特征融合的作用与手段
  4. python %d, %f, %s占位符的使用(学习笔记)
  5. MD5加密为什么不可逆?
  6. OpenGL中glRotatef()函数究竟对矩阵做了什么
  7. 【小白学习记录】渗透测试之信息收集
  8. 港科夜闻|香港科大校长史维教授获颁法国荣誉军团军官勋章(Officier de la Légion d'Honneur)...
  9. 区块链应用 | 一篇文章让你搞懂区块链,非标通证应用将首先落地
  10. socket PHP:详细简单的socket TCP通信PHP实现