📄 st7565.c
字号:
基于MEGA8的ST7565液晶驱动程序
/*===============================================================
文件名称:ST7565 驱动LCD程序
作者: 丁丁上路
修改时间:07.04.04
=============================================================*/
/* =========头文件===============*/
#include "mega8.h"
#include "delay.h"
#include "STRING.H"
/*========宏定义================*/
#define uchar unsigned char
#define uint unsigned int
#define CS1B PORTC.0 //片选信号
#define A0 PORTC.2 //数据(1)/命令(0)选择信号
#define MRE PORTC.4 //读控制信号,低有效
#define MWE PORTC.3 //写控制信号,低有效
#define RST PORTC.1
#define LED PORTB.0
#define DataPort PORTD //数据口
/*========子程序========== */
void WriteCom(uchar ComData); //向ST7565写命令
void WriteCom1(uchar ComData);
void WriteData(uchar Data); //向ST7565写数据
void InitST7565(); //初始化液晶
void ClearChar(uchar,uchar,uchar); //清屏
void PutChar(uchar Data); //向LCD写字符
void PutString(uchar *Data); //向LCD写字符串
void SetPage_Line_Column(uchar,uchar,uchar) //设置显示字符起始地址
/*===============================================================================
字库:5X7,纵向取模,字节倒序
================================================================================*/
flash uint Ascii8[] = {
0x0000,0x0000,0x0000,0x0000,0x065F,0x0600,0x0007,0x0300,0x0703,0x0024,0x7E24,0x7E24,
0x0024,0x2B6A,0x1200,0x0063,0x1308,0x6463,0x0036,0x4956,0x2050,0x0000,0x0703,0x0000,
0x0000,0x3E41,0x0000,0x0000,0x413E,0x0000,0x0008,0x3E1C,0x3E08,0x0008,0x083E,0x0808,
0x0000,0xE060,0x0000,0x0008,0x0808,0x0808,0x0000,0x6060,0x0000,0x0020,0x1008,0x0402,
0x003E,0x5149,0x453E,0x0000,0x427F,0x4000,0x0062,0x5149,0x4946,0x0022,0x4949,0x4936,
0x0018,0x1412,0x7F10,0x002F,0x4949,0x4931,0x003C,0x4A49,0x4930,0x0001,0x7109,0x0503,
0x0036,0x4949,0x4936,0x0006,0x4949,0x291E,0x0000,0x6C6C,0x0000,0x0000,0xEC6C,0x0000,
0x0008,0x1422,0x4100,0x0024,0x2424,0x2424,0x0000,0x4122,0x1408,0x0002,0x0159,0x0906,
0x003E,0x415D,0x551E,0x007E,0x1111,0x117E,0x007F,0x4949,0x4936,0x003E,0x4141,0x4122,
0x007F,0x4141,0x413E,0x007F,0x4949,0x4941,0x007F,0x0909,0x0901,0x003E,0x4149,0x497A,
0x007F,0x0808,0x087F,0x0000,0x417F,0x4100,0x0030,0x4040,0x403F,0x007F,0x0814,0x2241,
0x007F,0x4040,0x4040,0x007F,0x0204,0x027F,0x007F,0x0204,0x087F,0x003E,0x4141,0x413E,
0x007F,0x0909,0x0906,0x003E,0x4151,0x215E,0x007F,0x0909,0x1966,0x0026,0x4949,0x4932,
0x0001,0x017F,0x0101,0x003F,0x4040,0x403F,0x001F,0x2040,0x201F,0x003F,0x403C,0x403F,
0x0063,0x1408,0x1463,0x0007,0x0870,0x0807,0x0071,0x4945,0x4300,0x0000,0x7F41,0x4100,
0x0002,0x0408,0x1020,0x0000,0x4141,0x7F00,0x0004,0x0201,0x0204,0x8080,0x8080,0x8080,
0x0000,0x0307,0x0000,0x0020,0x5454,0x5478,0x007F,0x4444,0x4438,0x0038,0x4444,0x4428,
0x0038,0x4444,0x447F,0x0038,0x5454,0x5408,0x0008,0x7E09,0x0900,0x0018,0xA4A4,0xA47C,
0x007F,0x0404,0x7800,0x0000,0x007D,0x4000,0x0040,0x8084,0x7D00,0x007F,0x1028,0x4400,
0x0000,0x007F,0x4000,0x007C,0x0418,0x0478,0x007C,0x0404,0x7800,0x0038,0x4444,0x4438,
0x00FC,0x4444,0x4438,0x0038,0x4444,0x44FC,0x0044,0x7844,0x0408,0x0008,0x5454,0x5420,
0x0004,0x3E44,0x2400,0x003C,0x4020,0x7C00,0x001C,0x2040,0x201C,0x003C,0x6030,0x603C,
0x006C,0x1010,0x6C00,0x009C,0xA060,0x3C00,0x0064,0x5454,0x4C00,0x0008,0x3E41,0x4100,
0x0000,0x0077,0x0000,0x0000,0x4141,0x3E08,0x0002,0x0102,0x0100,0x1038,0x7C10,0x1010,
0x0000,0x0077,0x0000,0x0000,0x4141,0x3E08,0x0038,0x5655,0x5418,0x0020,0x5655,0x5678,
0x0000,0x0077,0x0000,0x0020,0x5556,0x5478,0x0002,0x0102,0x0100,0x1038,0x7C10,0x1010,
0x0038,0x5655,0x5618,0x0000,0x4141,0x3E08,0x0038,0x5556,0x5418,0x1038,0x7C10,0x1010,
0x0000,0x0279,0x0200,0x0000,0x017a,0x0000,0x0002,0x0102,0x0100,0x1038,0x7C10,0x1010,
0x0000,0x0077,0x0000,0x0000,0x4141,0x3E08,0x0002,0x0102,0x0100,0x0030,0x4a49,0x4a30,
0x0000,0x0077,0x0000,0x0030,0x494a,0x4830,0x0038,0x4241,0x2278,0x0038,0x4142,0x2278,
0x0000,0x0077,0x0000,0x0000,0x4141,0x3E08,0x0002,0x0102,0x0100,0x1038,0x7C10,0x1010,
0x0000,0x0077,0x0000,0x0000,0x4141,0x3E08,0x0002,0x0102,0x0100,0x1038,0x7C10,0x1010,
0x0024,0x5655,0x5478,0x0000,0x0279,0x0000,0x0030,0x4a49,0x4830,0x0038,0x4241,0x2078,
0x0000,0x0077,0x0000,0x0000,0x4141,0x3E08,0x0002,0x0102,0x0100,0x1038,0x7C10,0x1010,
0x0000,0x0077,0x0000,0x0000,0x4141,0x3E08,0x0002,0x0102,0x0100,0x1038,0x7C10,0x1010,
0x0000,0x0077,0x0000,0x0000,0x4141,0x3E08,0x0002,0x0102,0x0100,0x1038,0x7C10,0x1010,
0x0000,0x0077,0x0000,0x0000,0x4141,0x3E08,0x0038,0x5655,0x5418,0x0020,0x5655,0x5678,
0x0000,0x0077,0x0000,0x0020,0x5556,0x5478,0x0002,0x0102,0x0100,0x1038,0x7C10,0x1010,
0x0038,0x5655,0x5618,0x0000,0x4141,0x3E08,0x0038,0x5556,0x5418,0x1038,0x7C10,0x1010,
0x0000,0x0279,0x0200,0x0000,0x017a,0x0000,0x0002,0x0102,0x0100,0x1038,0x7C10,0x1010,
0x0000,0x0077,0x0000,0x0000,0x4141,0x3E08,0x0002,0x0102,0x0100,0x0030,0x4a49,0x4a30,
0x0000,0x0077,0x0000,0x0030,0x494a,0x4830,0x0038,0x4241,0x2278,0x0038,0x4142,0x2278,
0x0000,0x0077,0x0000,0x0000,0x4141,0x3E08,0x0002,0x0102,0x0100,0x1038,0x7C10,0x1010,
0x0000,0x0077,0x0000,0x0000,0x4141,0x3E08,0x0002,0x0102,0x0100,0x1038,0x7C10,0x1010,
0x0024,0x5655,0x5478,0x0000,0x0279,0x0000,0x0030,0x4a49,0x4830,0x0038,0x4241,0x2078,
0x0000,0x0077,0x0000,0x0000,0x4141,0x3E08,0x0002,0x0102,0x0100,0x1038,0x7C10,0x1010,
0x0000,0x0077,0x0000,0x0000,0x4141,0x3E08,0x0002,0x0102,0x0100,0x1038,0x7C10,0x1010,
0x0000,0x0077,0x0000,0x0000,0x4141,0x3E08,0x0002,0x0102,0x0100,0x1038,0x7C10,0x1010
};
main()
{
uchar Data[] = "fighting jianglinbin";
DDRB = 0xff; //设置端口为输出
DDRC = 0xff;
DDRD = 0xff;
RST = 0; //复位,低有效
delay_ms(100);
RST = 1;
CS1B = 0; //片选有效
InitST7565();
PutString(Data);
while(1)
{
LED = ~LED;
delay_ms(100);
}
}
/*===================================================================
函数功能:向ST7565写命令
输入参数:命令字
输出参数:无
函数说明:
======================================================================*/
void WriteCom(uchar ComData)
{
A0 = 0; //写命令
MRE = 1;
delay_us(50);
DataPort = ComData;
MWE = 0; //写有效
delay_ms(10);
MWE = 1;
}
/*===================================================================
函数功能:向ST7565写数据
输入参数:数据
输出参数:无
函数说明:
======================================================================*/
void WriteData(uchar Data)
{
A0 = 1; //写数据
MRE = 1;
MWE = 0; //写有效
DataPort = Data;
MWE = 1;
}
/*===================================================================
函数功能:初始化ST7565,结果全屏点亮
输入参数:无
输出参数:无
函数说明:
======================================================================*/
void InitST7565(void)
{
WriteCom(0xaf); //打开LCD显示 AE--off AF--on
//WriteCom(0xa2); //设置LCD电压偏置 a2--1/9,a3---1/7
WriteCom(0xa1); //设置显示数据区,a0正常,a1 COM与SEG互换
// WriteCom(0xc7); //选择COM扫描方向,《C7为正常方向,》C8为反向方向
WriteCom(0x2f); //选择内部电源供给模式
//WriteCom(0xa6); //设置显示模式(a6正,a7反)
//WriteCom(0x81); //设置V0电压寄存器
//WriteCom(0x20); // 调节显示颜色
WriteCom(0x20); //选择内部电阻调节比
//WriteCom(0xe0);
WriteCom(0xAd); //Static indicaor ON(AD)/OFF(AC)
WriteCom(0x01); //Static indicator register set
//WriteCom(0xa5); //全屏点亮
}
/*===================================================================
函数功能:清除指定页(Page)所在的列(StartColumn)开始的LineLength列
输入参数: 其始列,列长度,页
输出参数:无
函数说明:
======================================================================*/
void ClearChar(uchar StartColumn,ColumnLength,uchar Page)
{
uchar ColLow,ColHigh,j; //列低地址,列高地址,循环变量
ColLow = StartColumn & 0x0f;
ColHigh = (StartColumn>>4) & 0x0f;
WriteCom1(ColHigh | 0x10);
WriteCom1(ColLow);
WriteCom1(Page+0xb0);
for(j = 0;j<ColumnLength;j++)
{
WriteData(0x00); //写0X00不显示,0xff全显示
}
}
/*===================================================================
函数功能:向LCD写入一个字符
输入参数: 待写入字符
输出参数:无
函数说明:
======================================================================*/
void PutChar(uchar Data)
{
uint flash *p;
uchar AsciiLow,AsciiHigh,i;
Data-=32;
p = Ascii8;
p+= Data*3; //该处有隐患,因为指针所指地址值不能超过255(一个字节)
for(i = 0;i<3;i++,p++)
{
AsciiLow = (uchar)((*p)>>8);
AsciiHigh = (uchar)(*p);
WriteData(AsciiLow);
WriteData(AsciiHigh);
WriteData1(AsciiLow);
WriteData1(AsciiHigh);
}
}
/*===================================================================
函数功能:向LCD写入一个字符串
输入参数: 待写入字符串
输出参数:无
函数说明:
======================================================================*/
void PutString(uchar *Data)
{
uchar StringLength,i;
StringLength = strlen(Data);
for(i = 0;i<StringLength;i++)
{
PutChar(*Data++);
}
}
/*===================================================================
函数功能:设置显示字符起始地址
输入参数: 页地址--最大取8,行地址---最大64,列地址---最大133
输出参数:无
函数说明:
======================================================================*/
void SetPage_Line_Column(uchar Page,uchar Line,uchar Column)
{
WriteCom((Page&0x0f)+0xb0); //设置页地址
WriteCom(Line&0x3f+0x40); //设置行地址
WriteCom((Column>>4)&0x0f+0x10); //设置列地址高四位
WriteCom(Column&0x0f); //设置列地址低四位
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -