LCD2004 STC IAP154K61S4驱动程序及例程
更新时间:2024-03-12 03:45: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驱动程序及例程03-12
竣工图编制及归档要求10-28
继续教育语文数学作业 - 图文05-12
斜井进正洞挑顶施工方案08-09
ENAL-TDR使用手册 - 图文09-11
数学一级学科硕士研究生培养方案05-09
创维电视电子说明书02-11
我听见农民劳作的声音作文600字07-10
友谊之桥作文600字06-26
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- IAP154K61S4
- 驱动程序
- LCD2004
- STC
- 人生要避开的26个心灵陷阱
- 外贸企业出口退税100问
- 材料成形基础-复习题2013
- 最新(五四学制)七年级数学(上册)期末复习检测题(含
- Jboss瘦身和调优
- 王凤仪《不怨人》语录全部内容
- 2104年度第一学期四年级语文教学计划
- 优品课件之第四课《了解基本国策与发展战略》活动教学建议
- 通信工程费用编审人员申报操作指南更新版 - 图文
- 软件工程导论-期末题库(完整版)
- 岳麓版高中历史必修二复习提纲特别全 细致
- 浅析中国海外代购的兴起与发展
- XX三年级品德与社会下册期中试卷(含答案)
- 财政学大学期末考试总结
- 高频变压器真空含浸
- 四年级数学学科期末考试质量分析报告
- 互联网金融 - 图文
- 建设工程安全文明施工大检查自查自纠报告
- 神奇瑰丽的文化旅游胜地
- 447.姜堰市城区污水处理施工组织设计