微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 自制51单片机常用头文件(st7920串行方式)

自制51单片机常用头文件(st7920串行方式)

时间:11-10 来源:互联网 点击:
/*--------------------------------------------------------------------------

ST7920.H

The user function is C51.
Copyright (c) 1988-2004 Keil Elektronik GmbH sum zhaojun
All rights reserved.
--------------------------------------------------------------------------*/
// 串行方式
#ifndef __ST7920_H__
#define __ST7920_H__

#define uint unsigned int
#define uchar unsigned char

//引脚定义
#define LCD_CS P3_2// 片选 高电平有效 单片LCD使用时可固定高电平
#define LCD_SID P3_3// 数据
#define LCD_CLK P3_4// 时钟
#define LCD_PSB P3_5// 低电平时表示用串口驱动,可固定低电平
#define LCD_RST P3_6// LCD复位,LCD模块自带复位电路。可不接
//#define LCD_BACK P2_6 // LCD背光控制

/*****************************************************
函 数 名:void Delay_LCD(uint Number)
功 能:LCD延时
说 明:在送出一个指令前不检查BF标志,则在前一个指令和这个指令中间必须延迟一段较长的时间
入口参数:Number
返 回 值:无
*****************************************************/
void Delay_LCD(uint Number)
{
uint i,j;

for (i=0; i{
for(j=0; j<10; j++)
{
;
}
}
}

/*****************************************************
函 数 名:void Send_byte(uchar Byte)
功 能:发送一个字节
入口参数:Byte
返 回 值:无
*****************************************************/
void Send_byte(uchar Byte)
{
uchar i;

for (i=0; i<8; i++)
{
LCD_SID = Byte&0x80; // 取出最高位 写入串行数据
LCD_CLK = 1; // 串行同步时钟信号
LCD_CLK = 0;
Byte <= 1; // 左移
}
}
/*****************************************************
函 数 名:void WriteCommandLCM()
功 能:向LCM中写入指令
入口参数:WCLCM
返 回 值:无
****************************************************/
void WriteCommandLCM(uchar WCLCM)
{
uchar Start_data,Hdata,Ldata;

Start_data = 0xf8; // 写指令 11111000

Hdata = WCLCM&0xf0; // 取高四位 DDDD0000
Ldata = (WCLCM < 4) & 0xf0; // 取低四位 0000DDDD

Send_byte(Start_data); // 发送起始信号 第1字节-格式:1111ABC
Delay_LCD(5); // 延时是必须的

Send_byte(Hdata); // 发送高四位 第2字节-格式:DDDD0000
Delay_LCD(1); // 延时是必须的

Send_byte(Ldata); // 发送低四位 第3字节-格式:0000DDDD
Delay_LCD(1); // 延时是必须的
}
/*****************************************************
函 数 名:void WriteDataLCM()
功 能:向LCM1602中写入数据
说 明:将形参WDLCM中的数据写入LCM中
入口参数:WDLCM
返 回 值:无
*****************************************************/
void WriteDataLCM(uchar WDLCM)
{
uchar Start_data,Hdata,Ldata;

Start_data = 0xfa; // 写数据 11111010

Hdata = WDLCM & 0xf0; // 取高四位 DDDD0000
Ldata = (WDLCM < 4) & 0xf0; // 取低四位 0000DDDD

Send_byte(Start_data); // 发送起始信号 第1字节-格式:1111ABC
Delay_LCD(5); // 延时是必须的

Send_byte(Hdata); // 发送高四位 第2字节-格式:DDDD0000
Delay_LCD(1); // 延时是必须的

Send_byte(Ldata); // 发送低四位 第3字节-格式:0000DDDD
Delay_LCD(1); // 延时是必须的
}

/*****************************************************
函 数 名:void Lcdinit(void)
功 能:LCD初始化
入口参数:无
返 回 值:无
*****************************************************/
void Lcdinit(void)
{
Delay_LCD(10); // 启动等待,等LCM讲入工作状态
LCD_PSB = 0; // 串口驱动模式
LCD_RST = 0;

Delay_LCD(1);
LCD_RST = 1; // 复位LCD
LCD_CS = 1; // 片选

WriteCommandLCM(0x30); // 8 位介面,基本指令集
WriteCommandLCM(0x0c); // 显示打开,光标关,反白关
WriteCommandLCM(0x01); // 清屏,将DDRAM的地址计数器归零
}

/*****************************************************
函 数 名:void DisplayListChar()
功 能:向指点的地址写入字符串
入口参数:x-横坐标,y-纵坐标,s-字符串
返 回 值:无
*****************************************************/
void DisplayListChar(uchar x, uchar y, uchar code *s)
{
uchar add; // 显示地址

switch (y) // 显示地址计数
{
case 0: add = x + 0x80; break; // 第一行的地址
case 1: add = x + 0x90; break; // 第二行的地址
case 2: add = x + 0x88; break; // 第三行的地址
case 3: add = x + 0x98; break; // 第四行的地址
default: break;
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top