LCD2004 STC IAP154K61S4驱动程序及例程
更新时间:2023-12-27 21:13:01 阅读量: 教育文库 文档下载
- lcd2004屏幕推荐度:
- 相关推荐
//LCD/LCM 2004A 204A 头文件
#ifndef __LCD2004A_H__ #define __LCD2004A_H__
/********************************** 当使用的是4位数据传输的时候定义, 使用8位取消这个定义
**********************************/ #define LCD2004A_4PINS
/********************************** 包含头文件
**********************************/ #include
#include \
//---重定义关键词---// #ifndef BYTE
#define BYTE unsigned char #endif
#ifndef WORD
#define WORD unsigned int #endif
#ifndef DWORD
#define DWORD long unsigned int #endif
/********************************** Data PIN口定义
**********************************/ #define LCD2004A_DATAPINS P0 //Define LCD1602 control bit
sbit LCD2004A_E=P4^4; //LCD_Enable
sbit LCD2004A_RW=P4^2; // LCD write/read select
sbit LCD2004A_RS=P4^1; //LCD Data/command select /********************************** Function define /函数声明
**********************************/ /*51单片机在20MHZ时钟下的延时函数*/ void Delay1ms(); ////delay 1ms at 20MH void Delay5ms(); ////delay 1ms at 20MH /*LCD2004A写入8位命令子函数*/ void Lcd2004A_WriteCom(BYTE com); /*LCD2004A写入8位数据子函数*/ void Lcd2004A_WriteData(BYTE dat);
/*LCD2004A写入8位窗口位置数据子函数*/
void Lcd2004A_SetWindow(BYTE x,BYTE y); //x: row mumber, y:clumn number /*LCD2004A初始化子程序*/
void Lcd2004A_Init(); //initate LCD2004A /*LCD2004A判忙子程序*/ bit Lcd2004A_CheckBusy();// Check LCD2004A busy /*LCD2004A显示字符串前x个字符子程序*/
void Lcd2004A_DisplayStringx(BYTE *D_String, BYTE x); //Display D_String 0~x charaters /*LCD2004A显示字符串前字符子程序*/
void Lcd2004A_DisplayString(BYTE *D_String); //Display D_String /*初始化STC 15WK32系列单片机I/O口子程序*/ void Io_Init(BYTE n,BYTE x, BYTE y); //Init STC MCU I/O n:I/O no, x: PnM1 y:PnM0 /*十进制显示整数子函数*/
void DisplayLongInt(DWORD x); #endif
//LCD/LCM 2004A 204A 驅動源程序
#include \
//******************************* void Delay1ms() //@20.000MHz { unsigned char i, j; i = 20; j = 113; do { while (--j); } while (--i); }
//****************************** void Delay5ms() //@20.000MHz { unsigned char i, j; i = 98; j = 67; do { while (--j); } while (--i); }
/******************************************************************************* * 函 数 名 : LcdWriteCom * 函数功能 : 向LCD写入一个字节的命令 * 输 入 : com * 输 出 : 无
*******************************************************************************/
#ifndef LCD2004A_4PINS //当没有定义这个LCD2004A _4PINS时,4PIN即4线接法,接并口高四位 void Lcd2004A_WriteCom(BYTE com) //写入命令 com: command data { LCD2004A_E = 0; //使能 LCD2004A_RS = 0; //选择发送命令 LCD2004A_RW = 0; //选择写入 LCD2004A_DATAPINS = com; //放入命令 Delay1ms(); //等待数据稳定 LCD2004A_E = 1; //写入时序 Delay5ms(); //保持时间 LCD2004A_E = 0; }
#else
void Lcd2004A_WriteCom(BYTE com) //写入命令 { LCD2004A_E = 0; //使能清零 LCD2004A_RS = 0; //选择写入命令 LCD2004A_RW = 0; //选择写入 LCD2004A_DATAPINS = com; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改 Delay1ms(); //等待数据稳定 LCD2004A_E = 1; //写入时序 Delay5ms(); //保持时间 LCD2004A_E = 0; LCD2004A_DATAPINS = com << 4; //发送低四位 Delay1ms(); //等待数据稳定 LCD2004A_E = 1; //写入时序 Delay5ms(); //保持时间 LCD2004A_E = 0; }
#endif
/******************************************************************************* * 函 数 名 : LcdWriteData * 函数功能 : 向LCD写入一个字节的数据 * 输 入 : dat * 输 出 : 无
*******************************************************************************/ #ifndef LCD2004A_4PINS void Lcd2004A_WriteData(BYTE dat) //写入数据 { LCD2004A_E = 0; //使能清零 LCD2004A_RS = 1; //选择输入数据 LCD1602_RW = 0; //选择写入 LCD2004A_DATAPINS = dat; //写入数据 Delay1ms(); //等待数据稳定 LCD2004A_E = 1; //写入时序 Delay5ms(); //保持时间 LCD2004A_E = 0; } #else
void Lcd2004A_WriteData(BYTE dat) //写入数据 { LCD2004A_E = 0; //使能清零 LCD2004A_RS = 1; //选择写入数据 LCD2004A_RW = 0; //选择写入 LCD2004A_DATAPINS = dat; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改 Delay1ms(); //等待数据稳定 LCD2004A_E = 1; //写入时序 Delay5ms(); //保持时间 LCD2004A_E = 0; LCD2004A_DATAPINS = dat << 4; //写入低四位 Delay1ms(); //等待数据稳定 LCD2004A_E = 1; //写入时序 Delay5ms(); //保持时间 LCD2004A_E = 0; }
#endif
/******************************************************************************* * 函 数 名 : LcdInit() * 函数功能 : 初始化LCD屏 * 输 入 : 无 * 输 出 : 无
*******************************************************************************/ #ifndef LCD2004A_4PINS void Lcd2004A_Init() //LCD初始化子程序 { Lcd2004A_WriteCom(0x38); //开显示 Lcd2004A_WriteCom(0x0c); //开显示不显示光标 Lcd2004A_WriteCom(0x06); //写一个指针加1 Lcd2004A_WriteCom(0x01); //清屏 Lcd2004A_WriteCom(0x80); //设置数据指针起点 } #else
void Lcd2004A_Init() //LCD初始化子程序 { Lcd2004A_WriteCom(0x32); //将8位总线转为4位总线 Lcd2004A_WriteCom(0x28); //在四位线下的初始化 Lcd2004A_WriteCom(0x0c); //开显示不显示光标
Lcd2004A_WriteCom(0x06); //写一个指针加1 Lcd2004A_WriteCom(0x01); //清屏 Lcd2004A_WriteCom(0x80); //设置数据指针起点 }
#endif
//*************************************************************************
void Lcd2004A_SetWindow(BYTE x,BYTE y) //x: 行号row mumber,1:第一行,2:第二行, y:纵坐标clumn number { switch(x) { case 1: Lcd2004A_WriteCom(0x80+y); break; case 2: Lcd2004A_WriteCom(0xC0+y); break; case 3: Lcd2004A_WriteCom(0x94+y); break; case 4: Lcd2004A_WriteCom(0xD4+y); break; } }
//**************************************************************************** bit Lcd2004A_CheckBusy() {
register LCD2004A_State; LCD2004A_E = 1; //使能清零 LCD2004A_RS = 0; //选择读出数据 LCD2004A_RW = 1; //选择读出 Delay1ms(); //等待数据稳定 LCD2004A_State=LCD2004A_DATAPINS; LCD2004A_E = 0; return((bit)LCD2004A_State&0X80); }
//*********************************************************************************** void Lcd2004A_DisplayStringx(BYTE *D_String, BYTE x) //Display D_String 0~x charaters { BYTE i=0; while(i //************************************************************************************* void Lcd2004A_DisplayString(BYTE *D_String) //Display D_String { register i=0; while(D_String[i]!=0) { Lcd2004A_WriteData(D_String[i]); i++; } } //**************************************************************************** void Io_Init(BYTE n,BYTE x, BYTE y) { switch(n) { case 0: P0M1=x; P0M0=y; break; case 1: P1M1=x; P1M0=y; break; case 2: P2M1=x; P2M0=y; break; case 3: P3M1=x; P3M0=y; break; case 4: P4M1=x; P4M0=y; break; case 5: P5M1=x; P5M0=y; break; } } //********************************************************************************** void DisplayLongInt(DWORD x)//十进制显示整数子函数 { BYTE Tempchar[21]=\ DWORD y; BYTE i; i=1; y=x; while(y>=10) { y /=10; i++; } y=x; for(;i>0;i--) { Tempchar[i-1]='0'+y; y /=10; } Lcd2004A_DisplayString(Tempchar); } //LCD/LCM 2004A 204A 例程驅動源程序 #include \ DWORD TestData=4294967295; //设定要显示的20位整数 BYTE code TestByte[]=\设定要显示的字符 void main(void) { BYTE g; //变量需先定义后使用,先定义一个变量 Io_Init(0,0x00,0x00);//将P0口初始化为准双向IO,此行可注释掉,因STC IAP15W4K61S4上电复位为准双向IO Io_Init(4,0x00,0x00);//将P4口初始化为准双向IO,对STC IAP15W4K61S4此行必需. Lcd2004A_Init(); while(1) { Lcd2004A_SetWindow(1,0);// 设定显示位置在第一行第一个字符显示位置开始 Lcd2004A_DisplayString(TestByte); //由于TestByte[]总字符数超过了20个字符,而第三行的DDRAM地址是14~27H //所以剩余的字符会在第三行显示。 Lcd2004A_SetWindow(2,0);//设定显示数字位置在第二行第一个字符显示位置开始 DisplayLongInt(TestData); //显示10位整数,STC IAP15W4K61S4能处理的最大无符号整数为4294967295 Lcd2004A_SetWindow(4,0);//设定显示数字位置在第二行第一个字符显示位置开始 Lcd2004A_DisplayStringx(TestByte, 20);//显示字符串TestByte[]的前20个字符 for(g=0;g<200;g++) { Delay5ms(); } } }
正在阅读:
LCD2004 STC IAP154K61S4驱动程序及例程12-27
邮政经营服务会议局长讲话-工作报告上百度01-16
如何让proe自动生成零件明细表12-31
爱看书的小屁孩作文600字06-27
银行承兑汇票承兑业务从业人员资格试题题库(2012年版)09-28
c与c++面试题汇总05-14
党章的知识竞赛题库10-16
针灸治疗学试卷12-15
关于切实做好中秋节期间值班工作的通知03-16
宇舶手表官方维修售后服务中心04-12
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- IAP154K61S4
- 驱动程序
- LCD2004
- STC