您的位置 首页 芯闻

克己51单片机常用头文件(st7920串行方法)

/*————————————————————————–ST7920.HTheuserfunctioni

/*————————————————————————–

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;
}

WriteCommandLCM(0x30); // 8位介面,根本指令集
WriteCommandLCM(add); // 写入地址

while (*s > 0) // 写入字符串
{
WriteDataLCM(*s);
s++;
Delay_LCD(50);
}
}

/*****************************************************
函 数 名:void DisplayPicture(uint code *img)
功 能:在LCD上显现图形
说 明:在LCD上显现图形时,因为ST7920的特殊性应分两屏操控
进口参数:*img
返 回 值:无
*****************************************************/
//图形方法
void DisplayPicture(uint code *img)
{
uchar Line,Row; // Line为行地址;Row为列地址
uint regist = 0; // 图形地址寄存器

WriteCommandLCM(0x36); // 图形方法,扩展指令
// ————– 上半屏 —————-
for (Line=0; Line<32; Line++)
{
WriteCommandLCM(0x80 + Line); // 写入行地址
WriteCommandLCM(0x80); // 写入列

for (Row=0; Row<16; Row++)
{
WriteDataLCM(img[regist++]); // 写入图片数据
}
}
// ————— 下半屏 —————
regist=512; // 下半屏开始数据

for (Line=0; Line<32; Line++)
{
WriteCommandLCM(0x80 + Line);// 写入行地址
WriteCommandLCM(0x88);// 写入列

for (Row=0; Row<16; Row++)
{
WriteDataLCM(img[regist++]); // 写入图片数据
}
}

WriteCommandLCM(0x30); // 根本指令
}

/*****************************************************
函 数 名:void main(void)
功 能:主函数
进口参数:无
返 回 值:无
*****************************************************/
void main(void)
{

Lcdinit(); // 初始化LCD

while(1)
{

DisplayListChar(0,0,”zhaojun”);
}

}

#endif

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/xinwen/275921.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部