很好用的12864驱动程序
液晶屏12864的FPGA驱动程序
//液晶屏12864驱动芯片型号为ST7920
//芯片型号Altera CYCLONE II EP2C8Q208C8
//板载时钟50MHz
module LCD_test(clk,rst,lcd_e,lcd_rs,lcd_rw,data);
input clk; //模块输入时钟50MHz
input rst; //复位信号输入
output lcd_e; //使能端
output lcd_rs; //数据指令选择
output lcd_rw; //读写选择
output [7:0] data;
reg lcd_e; //这样定义是必须的
reg lcd_rw;
reg lcd_rs;
reg [7:0] data;
reg [21:0] clkcnt; //分频用计数寄存器
reg clkdiv;
reg double_div;
reg flag; //初始化标志,复位后flag=0,表示未初始化
reg [7:0] state;
wire bz_clkcnt;
parameter idle=8'b0000_0000; //状态0:用于初始化判断
parameter setfunction=8'b0010_0000; //用于选择指令集(基本指令集或扩展指令集)parameter switchmode=8'b0000_1000; //显示状态开关
parameter setmode=8'b0000_0100; //
parameter clear=8'b0000_0001; //清屏,耗时最久的指令
parameter setddram=8'b1000_0000; //设定DDRAM地址,即输入字符的位置parameter write1=8'b1111_0000; //输入字符的编码
LCD12864驱动程序(STM32F103RCT6)
#define CS_LOW GPIO_WriteBit(GPIOB,GPIO_Pin_1, RESET) #define CS_HI GPIO_WriteBit(GPIOB,GPIO_Pin_1, SET) #define RESET_LOW GPIO_WriteBit(GPIOB,GPIO_Pin_2, RESET) #define RESET_HI GPIO_WriteBit(GPIOB,GPIO_Pin_2, SET) #define RS_COM GPIO_WriteBit(GPIOB,GPIO_Pin_3, RESET) #define RS_DATA GPIO_WriteBit(GPIOB,GPIO_Pin_3, SET) #define SCLK_LOW GPIO_WriteBit(GPIOB,GPIO_Pin_6, RESET) #define SCLK_HI GPIO_WriteBit(GPIOB,GPIO_Pin_6, SET) #define SDA_LOW GPIO_WriteBit(GPIOB,GPIO_Pin_5, RESET) #define SDA_HI GPIO_WriteBit(GPIOB,GPIO_Pin_5, SET)
修改说明:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ************************************************************************/ void JLX12864_DisplayGraphic(u8 page,u8 column,u8 *dp) {
12864串口驱动程序(郭天祥)
/****************************************************************************** *
* 标题: PIC-ST2学习板演示程序--12864LCD-1
* 文件名: LCD12864-1
* 建立日期: 2010.01.28
* 修改日期: 2010.05.15
* 版本: V1.0
* 作者: simomli
******************************************************************************* *
* 功能描述: LCD12864C液晶串口方式显示字符,只用到三根数据线
******************************************************************************* *
*【版权】Copyright(C) 2009-2019 All Rights Reserved
*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!
******************************************************************************* /
//#include <pic1687x.h>
#include <htc.h>
#include <pic.h>
#define uint8 unsigned char
#define uint16 unsigned int
12864汉字液晶显示驱动程序
12864汉字液晶显示驱动程序
模块主要硬件构成说明
接口说明
*注释1:如在实际应用中仅使用串口通讯模式,可将PSB接固定低电平,也可以将模块上
的J8和“GND”用焊锡短接。
*注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。
*注释3:如背光和模块共用一个电源,可以将模块上的JA、JK用焊锡短接。
2.2并行接口
管脚号管脚名称电平管脚功能描述
1 VSS 0V 电源地
2 VCC 3.0+5V 电源正
3 V0 - 对比度(亮度)调整
RS=“H”,表示DB7——DB0为显示数据
4
RS(CS)H/L
RS=“L”,表示DB7——DB0为显示指令数据
R/W=“H”,E=“H”,数据被读到DB7——DB0 5
R/W(SID) H/L
R/W=“L”,E=“H→L”, DB7——DB0的数据被写到IR或DR
6 E(SCLK) H/L 使能信号
7 DB0 H/L 三态数据线
8 DB1 H/L 三态数据线
9 DB2 H/L 三态数据线
10 DB3 H/L 三态数据线
11 DB4 H/L 三态数据线
12 DB5 H/L 三态数据线
13 DB6 H/L 三态数据线
14 DB7 H/L 三态数据线
15 PSB H/L H:8位或4位并口方式,L:串口方式(见注释1)
16 NC - 空脚
17 /RESET H/L 复位端,低电平有效(见注释2)
18 VOUT - LCD驱动电压输出端
19 A VDD 背光源正端(+5V)(见注释3)
20 K VSS 背光源负端(见注释3)
*注释1:如在实际应用中仅使用并口通讯模式,可将PSB接固定高电平,也可以将模块上的J8和“VCC”用焊锡短接。
51单片机驱动显示屏12864
#includesbit DI=P2^0; #define uchar unsigned char#define uint unsigned int#define display_on 0x3f#define hang 0xc0#define ye 0xb8#define lie 0x40sbit RW=P2^1;sbit E=P2^2;sbit cs1=P2^3;sbit cs2=P2^4;void init();void delay(uchar t);void write_command(uchar command);void write_data(uchar shuju);uchar code hz[]={/*-- 文字: 邓 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x12,0x22,0x42,0x82,0x62,0x1E,0x00,0x00,0xFE,0x02,0x22,0xDA,0x06,0x00,0x00,0x20,0x10,0x08,0x06,0x01,0x06,0x18,0x00,0x00,0xFF,0x08,0x10,0x08,0x07,0x00,0x00,/*-- 文字: 林 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x10,0x10,0xD0,0xFF,0x90,0x10,0x00,0x10,0x10,0xD0,0xFF,0xD0,0x10,0x10,0x10,0x00,0x04,0x03,0x00,0xFF,0x00,0x11,0x08,0x04,0x03,0x00,0xFF,0x00,0x03,0x04,0x08,0x00,/*-- 文字: 辉 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x44,0x58,0xC0,0x7F,0xD0,0x48,0x26,0x22,0xE2,0x3A,0xA2,0x22,0x22,0x2A,0x06,0x00,0x80,0x60,0x1F,0x00,0x7F,0x20,0x10,0x13,0x12,0x12,0xFF,0x12,0x12,0x12,0x10,0x00,/*-- 文字: 信 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x80,0x60,0xF8,0x07,0x00,0x04,0x24,0x24,0x25,0x26,0x24,0x24,0x24,0x04,0x00,0x01,0x00,0x00,0xFF,0x00,0x00,0x00,0xF9,0x49,0x49,0x49,0x49,0x49,0xF9,0x00,0x00,/*-- 文字: 盈 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x82,0x62,0x1E,0x0A,0xAA,0x4A,0xBA,0x02,0x1A,0x96,0x10,0xF0,0x00,0x00,0x40,0x41,0x7C,0x44,0x44,0x7D,0x44,0x44,0x44,0x7D,0x44,0x44,0x7D,0x40,0x40,0x00,/*-- 文字: 达 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x40,0x40,0x42,0xCC,0x00,0x10,0x10,0x10,0x90,0x7F,0x90,0x10,0x10,0x10,0x10,0x00,0x00,0x40,0x20,0x1F,0x20,0x48,0x44,0x42,0x41,0x40,0x40,0x41,0x42,0x4C,0x40,0x00,/*-- 文字: 全 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x80,0x80,0x40,0x20,0x50,0x48,0x44,0xC3,0x44,0x48,0x50,0x20,0x40,0x80,0x80,0x00,0x00,0x40,0x40,0x44,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x44,0x40,0x40,0x00,0x00,/*-- 文字: 日 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x00,0xFE,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x00,0x00,0x00,0x00,/*-- 文字: 制 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x40,0x50,0x4E,0x48,0x48,0xFF,0x48,0x48,0x48,0x40,0xF8,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x3E,0x02,0x02,0xFF,0x12,0x22,0x1E,0x00,0x0F,0x40,0x80,0x7F,0x00,0x00,/*-- 文字: 单 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0xF8,0x49,0x4A,0x4C,0x48,0xF8,0x48,0x4C,0x4A,0x49,0xF8,0x00,0x00,0x00,0x10,0x10,0x13,0x12,0x12,0x12,0x12,0xFF,0x12,0x12,0x12,0x12,0x13,0x10,0x10,0x00,/*-- 文字: 片 --*
12864驱动
LCD12864底层驱动
#include
#include
#define uint unsigned int
#define uchar unsigned char
#define out0 P0 //定义out0为P0口
sbit LCD_RST=P1^0;
sbit LCD_CS2=P1^1;
sbit LCD_CS1=P1^2;
sbit LCD_E=P1^3;
sbit LCD_WR=P1^4;
sbit LCD_RS=P1^5;
uchar code hanzi_ZM[][32]={
/*-- 0 文字: 欢--*/
0x14,0x24,0x44,0x84,0x64,0x1C,0x20,0x18,0x0F,0xE8,0x08, 0x08,0x28,0x18,0x08,0x00,
0x20,0x10,0x4C,0x43,0x43,0x2C,0x20,0x10,0x0C,0x03,0x06, 0x18,0x30,0x60,0x20,0x00,
};
uchar code shuzi_ZM[][16]={
/*-- 文字: 0 --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10, 0x20,0x20,0x10,0x0F,0x00,
};
void delayms(uint x) //延时毫秒函数
{
uchar i;
while(x--)
for(i=0;i<123;i++);
}
void busy() //读忙信号
{
uchar mang; //忙变量
LCD_E=0; //使能端无效
12864液晶屏串口驱动程序
12864液晶屏串口驱动程序代码
12864液晶屏驱动采用4_Wire-SPI串口驱动方式,可有效的减少IO口的占用,方便使用调试,本程序的代码驱动IC为ST7565R,是基于STC89C53RC的12864串行模式的程序,硬件电路连接只需要5根线:RS、 SDA、 SCLK、RES、CS 。
程序已经调试通过,很好用。代码如下:
//----------------------------------------------------------------------
/*hotdisplay CO,.LTD.*/
// Module : HTG12864
// Lanuage : C51 Code
// Create :
// Version : 1.0
// Date : OCT-21-2016
// LCM Drive IC : ST7565R
// INTERFACE : 4_Wire-SPI
// MCU : STC89C53RC
// VDD : 3.3V
//********************************************************* ******************
#include
#define uchar unsigned char
#define uint unsigned int
uchar bdata transdata;
sbit R_S= P3^5;
sbit RES= P3^4;
sbit SCK= P1^6;
sbit SDA= P1^7;
sbit CS1= P3^7;
LCM12864 C语言驱动程序
]LCM12864 C语言驱动程序。[/b]下面是一个我写的12864点阵的显示驱动程序(参考PIC自带的字符型液晶驱动的样板例子),在这之前,我一直在网上苦苦搜索,想找到C语言的12864驱动程序,可是不是8051的汇编,就是什么乱七八糟的程序,哎,不得不自已写,找资料,买LCD,现在可以用了,我想大家很多人正在搜索吧! /************************************************************************* 程序说明: LCD驱动采用4位元(这个4位元方式,在网上搜索来看,还没有人采用,可以节省4位I/O口),并口方式,晶体4M,注意此LCD有点不同尽量很普通,没有CS1,CS2页选择脚,带串口方式,型号是TS-12864-3。IC 16F877A。 在屏幕上显示“Atilla tester" "~_~" RD7----------LCD D7 RD6-----------LCD D6 RD5-----------LCD D5 RD4-----------LCD D4 RD3-----------LCD E RD2-------- LCD RS RD1---------R/W /***********************程序如下**********************************/ #include "pic.h" #define lcd_cursor(x) lcd_write(((x)&0x7F)|0x80)//Set the cursor position #define LCD_RS RD2#define LCD_EN RD3#define LCD_RW RD1 #define LCD_STROBE ((LCD_EN = 1),(LCD_EN=0)) void delay_10us(unsigned char x) { while(x--);} void delay_ms(unsigned char cnt){unsigned char i;do {i = 4;do {delay_10us(39);} while(--i);} while(--cnt); } /* write a byte to the LCD in 4 bit mode */ void lcd_write(unsigned char c){PORTD = (PORTD & 0x0F) | (c & 0xF0); //先送高位D7 D6 D5 D4LCD_STROBE;PORTD = (PORTD & 0x0F) | (c /* Clear and home the LCD */ void lcd_clear(void){LCD_RS = 0;lcd_write(0x1);delay_ms(2);} /* write a string of chars to the LCD */ void lcd_puts(const char * s){LCD_RS = 1; // write characterswhile(*s)lcd_write(*s++);} /* write one character to the LCD */ void lcd_putch(char c){LCD_RS = 1; // write charactersPORTD = (PORTD & 0x0F) | (c & 0xF0); //先送高位LCD_STROBE;PORTD = (PORTD & 0x0F) | (c /*Go to the specified position*/void lcd_goto(unsigned char pos){LCD_RS = 0;lcd_write(0x80+pos);}/* initialise the LCD - put into 4 bit mode *///严格按照LCD的复位要求。 void lcd_init(void){LCD_RS = 0; // write control bytesdelay_ms(40); // power on delay,wait time>40msPORTD = 0x20; // Function set,set 4 bit modeLCD_STROBE;delay_10us(10); //wait time >100uslcd_write(0x20); // Function set:4 bit mode.delay_10us(10); //wait time >100uslcd_write(0x0C); // display ON/OFF control.delay_10us(10); //wait time >100uslcd_write(0x01); // display cleardelay_ms(10); //wait time >10mslcd_write(0x06); // entry mode set} void main(void){TRISD=0X00;PORTD=0X00;lcd_init();lcd_goto(0x00);lcd_puts("Atilla tester");lcd_go
STM32的LCD19264-12864经典程序
现在STM32越来越流行,在学校搞的很火,本人最近也在学习,做了一个LCD19264的程序,先与大家分享,多谢关注!
本程序是有LCD12864该进的,液晶驱动为ST7920。可以稍微改动即可用于12864
一、以下是LCD19264头文件
////////////////////////////////////////////////////////////////////////////////
/******************************************************************** ***********
* 函数功能:STM32F103VET6 19264-1液晶显示,串---并口19264
* 编写时间:2012.07.22
* 作者:ZhouGanJin
* 版本:V1.1
* 液晶19264-1简介:并口不多说;串口引脚4根RW(SID),E1(CLK1),E2(CLK2),PSB=0, RS(CS)=1,
* 通过预编译选择串并口方式
********************************************************************* **********/
#ifndef _LCD19264_H
#define _LCD19264_H
/* 端口定义---------------------------
本程序只用了GPIOA
-----------------------------------*/
/* 函数申明---------------------
12864汉字液晶显示驱动程序(C)
12864的驱动程序(C51)2007-01-24 22:43//12864汉字液晶显示驱动程序#include #include #define uchar unsigned char#define uint unsigned int sbit p_csa=P1^4;sbit p_csb=P1^5;sbit p_di=P1^0;sbit p_rw=P1^1;sbit p_e=P1^2;sbit busy=P0^7;char data mov=0;//滚动显示的变量char data TIMER=0;//软件延时的全局变量uchar code image[][16]={{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x10,0x10,0x08,0x04},{0x04,0x02,0xF2,0x1E,0x02,0x1B,0xE7,0x03,0x07,0x1B,0xE2,0x02,0x02,0x02,0x04,0x04},{0x08,0x10,0x10,0x60,0x80,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},//64*8左屏幕的一页{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},{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},//128*8一页(包括左右屏){0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x3C,0x03,0x00,0x00,0x00,0x84,0x46,0xC6},{0x4E,0x8C,0x1D,0x30,0x00,0x00,0x01,0x00,0x00,0x00,0x31,0x1C,0x8C,0x4E,0xC6,0x46},{0x84,0x00,0x00,0x00,0x00,0x03,0x3C,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},{0x00,0x00,0x80,0x7C,0x1E,0x8E,0x0F,0x0F,0x0F,0x8E,0x1E,0x7C,0x80,0x00,0x00,0x00},//左第二页{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0x28,0x44,0x44,0x44,0x44,0x44,0x4C},{0x7C,0xCC,0x44,0x44,0x04,0x40,0x44,0x48,0x90,0x60,0x60,0x40,0x40,0x40,0x40,0x00},{0x40,0x00,0x40,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,0x00,0x00,0x00,0x00,0x03,0x3C,0xC0,0x00,0x00,0x00,0x00,0x01,0x01},{0x01,0x80,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x81,0x01,0x01},{0x00,0x00,0x00,0x00,0x00,0xC0,0x3C,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},{0x00,0x00,0x07,0x78,0x80,0x01,0x20,0x28,0x20,0x01,0x80,0x78,0x07,0x00,0x00,0x00},//左第三页{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x04,0x3C,0x44,0x54,0x44,0x3C,0x04},{0x04,0x06,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3C,0x44,0x54,0x44,0x3C,0x04,0x04},{0x04,0x00,0x05,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x08,0x08,0x10,0x20},{0x20,0x40,0x41,0x42,0x42,0x84,0x84,0x84,0x84,0x84,0x42,0x42,0x41,0x40,0x20,0x20},{0x10,0x08,0x08,0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x01,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,0x00,0x00,0x00,0
12864并口驱动程序
//***************************************************************************//连线表: CPU=89C52 *//RS=P3.0 RW=P3.1 E=P3.2 *//FOSC=12MHz D0-D7=P1.0-P1.7 *//***************************************************************************#include sbit RS = P3^0;sbit RW = P3^1;sbit E = P3^2;sbit bf = P1^7;#define data_bus P1#define com 0#define dat 1void wr_lcd(unsigned char dat_com,unsigned char content);void ck_busy(void);void delay_us(unsigned int us_value);void delay_ms(unsigned int ms_value);void init_lcd (void);void cn_disp(unsigned char code *cn);void txt_disp(unsigned char code *cn,unsigned char adr);void gra_disp(unsigned char code *img);void lat_disp(unsigned char data1,unsigned char data2);void con_disp(unsigned char data1,unsigned char x0,unsigned char y0,unsigned char xl,unsigned char yl);void lcd_txt_clr(void);void lcd_gra_clr(void);unsigned char code tab1[]={"128X64全点阵显示" //第一行汉字内容"可显示8X4 个中文" //第二行汉字内容"内带标准中文字库" //第三行汉字内容"含8192个中文字型" //第四行汉字内容}; unsigned char code str1[]="汉升实业有限公司";unsigned char code str2[]="欢迎选购我们产品";unsigned char code str3[]=" ";unsigned char code gra1[];/*******************************************************************************************函数名称: init_lcd*功能描述: 初始化******************************************************************************************/void init_lcd (void){wr_lcd(com,0x30); /*30---功能设定,8-bit模式*/ wr_lcd(com,0x30); /*30---功能设定,基本指令*/ wr_lcd(com,0x01); /*清屏,地址指针指向00H*/wr_lcd(com,0x06); /*光标的移动方向*/wr_lcd(com,0x0c); /*开显示,关游标*/}/*******************************************************************************************函数名称: cn_disp*功能描述: 显示全屏汉字或字符******************************************************************************************/void cn_disp(unsigned char code *cn){unsigned char i,j;wr_lcd(com,0x30);wr_lcd(com,0x80);for(j=0;j<4;j++){for(i=0;i<16;i++)wr_lcd(dat,cn[j*16+i]);}delay_ms(800);}/*******************************************************************************************函数名称: txt_disp*功能描述: 显示一行汉字或字符******************************************************************************************/void txt_disp(unsigned char code *cn,unsigned char adr){unsigned char i,j;wr_lcd(com,0x30);wr_lcd(com,adr); //第一到四行地址分别是0x80,0x90,0x88,0x98j=0;for(i=0;i<16;i++)wr_lcd(dat,cn[j*1
带字符的12864驱动及12887显示时间
一、硬件电路图
二、程序部分
#include "reg52.h"
#include "intrins.h"
sbit io_LCD12864_RS = P1^2 ;
sbit io_LCD12864_RW = P1^3 ;
sbit io_LCD12864_EN = P1^4;
sbit G=P2^0; //锁存器控制端
sbit dscs=P2^3; // 时钟芯片片选
sbit dsas=P2^4; //时钟芯片的地址信号
sbit dsrw=P2^5; //时钟芯片的读写信号控制
sbit dsds=P2^6; //时钟芯片的数据信号*/
sbit dsirq=P2^7; //时钟芯片的中断允许请求
#define uchar unsigned char
#define uint unsigned int
#define io_LCD12864_DATAPORT P0 //P0为数据口
#define SET_DATA io_LCD12864_RS = 1 ;
#define SET_INC io_LCD12864_RS = 0 ;
#define SET_READ io_LCD12864_RW = 1 ;
#define SET_WRITE io_LCD12864_RW = 0 ;
#define SET_EN io_LCD12864_EN = 1 ;
#define CLR_EN io_LCD12864_EN = 0 ;
uchar miao,shi,fen,yue,ri,nian,xq,flag,s1num,flag1,x1,x2,x3; //定义时,分,秒,年。月,日等变量
12864的驱动程序
12864的驱动程序(51汇编)
推荐
CS2 BIT P1.5
CS1 BIT P1.4
E BIT P1.2
R_W BIT P1.1
D_I BIT P1.0
RST BIT P1.3
COM EQU 20H ; 指令寄存器
DAT EQU 21H ; 数据寄存器
DENG BIT P1.6
WAIT EQU 22H;中断循环次数(软件延时)
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP TIME_ET0
ORG 0050H
MAIN:
NOP
MOV WAIT,#00H;清0
MOV TMOD,#01H ;方式1,16位定时器
MOV TH0,#00H
MOV TL0,#00H
MOV R5,#0C0H ;设置行命令,选中的行显示在第一行
SETB ET0
SETB EA ;开定时,但是还没有开T0定时.程序后面才开
CLR RST
SETB RST ;给一个低电平脉冲信号来复位LCD
; LCALL DELLY
; CPL DENG
; MOV COM,#3EH ;指令将显示设置开关关闭
; LCALL PR1
; LCALL DELLY ;延时一段时间
MOV COM,#3FH ;指令将显示设置开关打开
LCALL PR1
LCALL DELLY
CLR CS2 ;清屏(清右半边屏幕)
SETB CS1
LCALL QINGP;清屏子程序
LCALL DELLY
CLR CS1
SETB CS2
LCALL QINGP;清屏子程序
LCALL DELLY;调延时子程序等待它反应,我们也可以读它的状态来判断.
;SJMP $
;---------左屏幕----------------
12864LCD驱动程序
//----------------------------------------------------------------- // 名称: LGM12864LCD显示驱动程序(不带字库) //----------------------------------------------------------------- #include
#include "LGM12864.h"
//是否反相显示(白底黑字/黑底白字)
INT8U Reverse_Display = 0;
//----------------------------------------------------------------- // 等待液晶就绪
//----------------------------------------------------------------- void Wait_LCD_Ready()
{
}
//----------------------------------------------------------------- // 向LCD发送命令
//----------------------------------------------------------------- void LCD_Write_Command(INT8U cmd)
{
}
//----------------------------------------------------------------- // 向LCD发送数据
12864液晶屏驱动程序
/*控制器:st7565串行驱动方式,唯一要注意的一点就是WR和RD这两个引脚虽然用不到,但是要接地,否则无法正常显示。当时调了很久。不知道其他厂家的是否也这样。 */#include #include #include "LCD_Driver.h"//字库#include "hzk.h"//当前字符显示的位置//unsigned char Lcd_Charcter_CurrentX,Lcd_Charcter_CurrentY;//当前像素显示位置unsigned char Lcd_CurrentX,Lcd_CurrentY;//图像反色显示 0 否 1是bit LCD_DisplayReserve_Driver; //定义LCD显示的全局变量#define CS_Port P3_0#define A0_Port P3_1#define SI_Port P3_2#define SCL_Port P3_3#define RST_Port P3_4enum PINDefine{CS,A0,SI,SCL,RST};//设置某一位void SETBit(unsigned char PIN){switch (PIN){case CS :CS_Port=1;break;case A0 :A0_Port=1;break;case SI :SI_Port=1;break;case SCL :SCL_Port=1;break;case RST :RST_Port=1;break;}}//清某一位void CLRBit(unsigned char PIN){switch (PIN){case CS :CS_Port=0;break;case A0 :A0_Port=0;break;case SI :SI_Port=0;break;case SCL :SCL_Port=0;break;case RST :RST_Port=0;break;}}/************************************* 函数名称: Delay** 功能描述: 延时时间=(n*9+17)*12/F** 输 入: n** 输 出 : 无** 全局变量:无** 调用模块: 无******************************************/void LCD_DelayMS(unsigned int n){while(n--);return;}//--------------------------------------------------------------------------//串口移位输出//--------------------------------------------------------------------------void LCDShiftWrite(char datain){ unsigned char i;unsigned char Series,Temp;Series = datain;for(i=8;i>0;i--){CLRBit(SCL); //SCL=0Temp=Series & 0x80;if(Temp){SETBit(SI);//SI=1}else {CLRBit(SI);//SI=0}SETBit(SCL); //SCL=1 Series = Series << 1; }}/************************************* 函数名称: Write_Data** 功能描述: 传送数据** 输 入: dat** 输 出 : 无** 全局变量:无** 调用模块: Busy,******************************************/void Write_Data(unsigned char dat) {CLRBit(CS); //CS=0SETBit(A0); //A0=1,数据LCDShiftWrite(dat); SETBit(CS); //CS=1;return;}/************************************* 函数名称: Write_Instruction** 功能描述: 传送命令** 输 入: dat** 输 出 : 无** 全局变量:无** 调用模块: Busy,******************************************/void Write_Instruction(unsigned char cmd){CLRBit(CS); //CS=0CLRBit(A0); //A0=0,命令LCDShiftWrite(cmd);SETBit(CS); //CS=1;return;}//==============================================================================高一级函数//设置像素显示坐标(x:0-127,y:0-7
12864液晶屏(带字库)51单片机3线串口驱动程序
#include
typedef unsigned char uint8; typedef unsigned int uint16; typedef unsigned long uitn32;
sbit CS = P1^0;//片选信号引脚sbit SDA = P1^1;//数据线
sbit SCK = P1^2;//串行时钟线
//sbit RST = P1^3;//复位引脚
//sbit PSB = P1^4;//串并控制引脚
code uint8 strint1[] = "I Love You !";
/*void delay5ms(void) //误差0us {
unsigned char a,b;
for(b=185;b>0;b--)
for(a=12;a>0;a--);
}*/
//发送一个字节
void Send_Byte(uint8 dat)
{
uint8 i;
SCK = 0;
for(i=0;i<8;i++)
{
SDA = dat&0x80;
SCK = 1;
dat <<= 1;
SCK = 0;
}
}
//读取一个字节数据
uint8 Read_Byte(void)
{
uint8 i;
uint16 byte = 0;
SCK = 0;
for(i=0;i<16;i++)
{
byte <<= 1;
SCK = 1;
if(SDA)
byte |= 0x0001;
SCK = 0;
}
byte = ((byte>>4)|(byte>>8))&0x00ff;
return ((uint8)(byte));
}
//读忙标志
void Read_Busy(void)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
///////////////////////////////////////////////////////////
#include
#include
#define uchar unsigned char
#define uint unsigned int
//////////单片机与液晶显示的引脚连接///////// sbit P32=P3^2; //RST
sbit P33=P3^3; //CS2
sbit P34=P3^4; //CS1
sbit P35=P3^5; //E
sbit P36=P3^6; //rs&DI
sbit P37=P3^7; // R/W
////////延时/////////
void delay(uint v)
{
while(v!=0)v--;
}
////////复位///////////
void reset()
{
P32=0;
delay(10);
P32=1;
delay(10);
}
////////write code写指令///////
void wcode(uchar c,uchar cs1,uchar cs2) {
P34=cs1;
P33=cs2;
P37=0;
P36=0;
P1=c;
P35=0;
delay(10);
P35=1;
delay(10);
P35=0;
}
/////////write data写数据///////////////
void wdata(uchar c,uchar cs1,uchar cs2)
{
P34=cs1;
P33=cs2;
P37=1;
P36=0;
P1=c;
P35=0;
delay(10);
P35=1;
delay(10);
P35=0;
}
////////////set start设置起始行/////////////
void set_startline(uchar i)//起始行。11A5A4A3A2A1A0 共有64行
// 液晶显示器的最底层为第一行
{
i=0xc0+64-i;//此算法为把最顶层做为第一层
wcode(i,1,1);
}
////////////set 页值设置,起始列值函数/////////////
void set_adr(uchar x,uchar y)
{
x=x+0xb8;//页地址设置。10111A2A1A0 DDRAM的8行为一页,A0~A2为页码,LCD为64行8页
y=y+0x40;//列地址设置。01A5A4A3A2A1A0 两半屏分别有64列,A0~A5送入列地址计数器,
//作为列(Y)地址指针。每读写一次其自动加一,指向下一列DDRAM单元wcode(x,1,1);
wcode(y,1,1);
}
///////////on/off开/关显示函数//////////////
void dis_on_off(uchar o)
{
o=0x3e+o;//0011111D D=1开显示器把RAM数据呈现在显示器上,D=0关显示,但数据仍储存在RAM内。
wcode(o,1,1);
}
///////////clear清屏///////////////
void clear()
{
uchar i,loop;
for(i=0;i<8;i++)///循环页写0/////////
{
set_adr(i,0);
for(loop=0;loop<64;loop++)wdata(0x00,1,1);
}
}
/////////////////////////////////////////////////////////////////////////
// 汉字字模表//
// 汉字库: 宋体16.dot 纵向取模下高位,数据排列:从左到右从上到下//
/////////////////////////////////////////////////////////////////////////
uchar code xian[32]= // "现"
{
0x04,0x84,0x84,0xFC,0x86,0x84,0x00,0xFE,
0x02,0x82,0x7A,0x02,0xFF,0x02,0x00,0x00,
0x10,0x30,0x10,0x1F,0x88,0x88,0x40,0x23,
0x18,0x07,0x78,0x80,0x83,0x80,0xE0,0x00,
};
uchar code zai[32]= //"在"
{
0x08,0x08,0x08,0x08,0xC8,0x38,0x0F,0x08,
0x08,0xE8,0x08,0x88,0x08,0x0C,0x08,0x00,
0x08,0x04,0x02,0xFF,0x00,0x40,0x41,0x41,
0x41,0x7F,0x41,0x41,0x41,0x60,0x40,0x00,
};
uchar code wen[32]= //"温"
{
0x10,0x22,0x64,0x0C,0x80,0x00,0xFE,0x92,
0x92,0x92,0x92,0x92,0xFF,0x02,0x00,0x00,