⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 st7565.c

📁 液晶显示驱动芯片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 + -