经典的KEILC51LCD16024总线驱动+中文注释程序.docx
- 文档编号:3327231
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:13
- 大小:17.32KB
经典的KEILC51LCD16024总线驱动+中文注释程序.docx
《经典的KEILC51LCD16024总线驱动+中文注释程序.docx》由会员分享,可在线阅读,更多相关《经典的KEILC51LCD16024总线驱动+中文注释程序.docx(13页珍藏版)》请在冰点文库上搜索。
经典的KEILC51LCD16024总线驱动+中文注释程序
/******************************************************************************
经典的KEIL_C51_LCD1602_4总线驱动+中文注释程序
文件名:
1602.c
cpu:
STC12C5A32S2晶振频率:
11.0592Mhz
编程者:
BG1EQ@TOM.COM
2011-8-25测试通过
*******************************************************************************
LCD1602实际硬件连接:
LCM_RS-----P2^0;//1602定义引脚
LCM_RW-----P2^1;
LCM_E-----P2^7;
LCM_DB0-----P0.0
LCM_DB1-----P0.1
LCM_DB2-----P0.2
LCM_DB3-----P0.3
LCM_DB4-----P0.4
LCM_DB5-----P0.5
LCM_DB6-----P0.6
LCM_DB7-----P0.7
*******************************************************************************/
#include
#include
#include
//#include
#include"4bitlcm1602.h"//包含delay头文件
#include"delay.h"//包含delay头文件
#defineucharunsignedchar
#defineuintunsignedint
//------硬件端口定义--------------------------------
//------函数(声明)--------------------------------
voidsys_init(void);//系统初始化函数(声明)
/******************************************************************************************
*函数名称:
主程序
*功能描述:
******************************************************************************************/
main()//主程序入口
{
//LCMInit();//初始化LCD
sys_init();//系统初始化
while
(1)
{//主程序循环(开始)
LCD_cls();//清屏
DisplayListChar(0,0,"MONITORV1.0");//第1行显示
DisplayListChar(0,1,"APPLYINCHINA");//第2行显示
Delay400Ms();
Delay400Ms();
Delay400Ms();
Delay400Ms();
Delay400Ms();
LCD_cls();//清屏
DisplayListChar(0,0,"BG1EQ@TOM.COM");//第1行显示
DisplayListChar(0,1,"2011Y08M25D");//第2行显示
Delay400Ms();
Delay400Ms();
Delay400Ms();
Delay400Ms();
Delay400Ms();
LCD_cls();//清屏
DisplayOneChar(0,0,'0');//显示字符
DisplayOneChar(1,0,'1');//显示字符
DisplayOneChar(2,0,'2');//显示字符
DisplayOneChar(3,0,'3');//显示字符
DisplayOneChar(4,0,'4');//显示字符
DisplayOneChar(5,0,'5');//显示字符
DisplayOneChar(6,0,'6');//显示字符
DisplayOneChar(7,0,'7');//显示字符
DisplayOneChar(8,0,'8');//显示字符
DisplayOneChar(9,0,'9');//显示字符
DisplayOneChar(10,0,'0');//显示字符
DisplayOneChar(11,0,'-');//显示字符
DisplayOneChar(12,0,'+');//显示字符
DisplayOneChar(13,0,'=');//显示字符
DisplayOneChar(14,0,'#');//显示字符
DisplayOneChar(15,0,'$');//显示字符
Delay400Ms();
Delay400Ms();
Delay400Ms();
Delay400Ms();
Delay400Ms();
LCD_cls();//清屏
DisplayOneChar(0,1,'A');//显示字符
DisplayOneChar(1,1,'B');//显示字符
DisplayOneChar(2,1,'C');//显示字符
DisplayOneChar(3,1,'D');//显示字符
DisplayOneChar(4,1,'E');//显示字符
DisplayOneChar(5,1,'F');//显示字符
DisplayOneChar(6,1,'G');//显示字符
DisplayOneChar(7,1,'H');//显示字符
DisplayOneChar(8,1,'I');//显示字符
DisplayOneChar(9,1,'J');//显示字符
DisplayOneChar(10,1,'K');//显示字符
DisplayOneChar(11,1,'L');//显示字符
DisplayOneChar(12,1,'M');//显示字符
DisplayOneChar(13,1,'N');//显示字符
DisplayOneChar(14,1,'O');//显示字符
DisplayOneChar(15,1,'P');//显示字符
Delay400Ms();
Delay400Ms();
Delay400Ms();
Delay400Ms();
Delay400Ms();
}//主程序循环结束返回
}
/******************************************************************************************
*函数名称:
sys_init
*功能描述:
系统初始化
******************************************************************************************/
voidsys_init()
{
Delay400Ms();//上电后延时,让LCD1602进入稳定状态,
LCMInit();//初始化LCD1602
}
以上是C51主程序
以下是C51模块化4BITLCM1602.H函数程序
/*--------------------------------------------------------------------------
4BITLCM1602.H
4位总线驱动LCD1602头文件
--------------------------------------------------------------------------*/
#ifndef__4BITLCM1602_H__
#define__4BITLCM1602_H__
/*******************************************************************************/
//#include
//#include
//#include
//#include
#defineucharunsignedchar
#defineuintunsignedint
//------硬件端口定义--------------------------------
sbitLCM_RS=P2^0;//1602定义引脚
sbitLCM_RW=P2^1;
sbitLCM_E=P2^7;
sbitLCD7=P0^7;
sbitLCD6=P0^6;
sbitLCD5=P0^5;
sbitLCD4=P0^4;
ucharbdatalcdbuff;//声明,全局的、可以位寻址的变量
sbitlcd_buff7=lcdbuff^7;
sbitlcd_buff6=lcdbuff^6;
sbitlcd_buff5=lcdbuff^5;
sbitlcd_buff4=lcdbuff^4;
sbitlcd_buff3=lcdbuff^3;
sbitlcd_buff2=lcdbuff^2;
sbitlcd_buff1=lcdbuff^1;
sbitlcd_buff0=lcdbuff^0;
//------函数(声明)--------------------------------
voidLCMInit(void);//LCM屏初始化
voidR_BF();//读忙标志BF
voidw_com(ucharcom);//写指令函数
voidw_cdata(void);//写数据函数
voidWriteDataLCM(unsignedcharWDLCM);//LCM屏写数据函数(声明)
voidLCD_cls(void);//LCM屏清屏
voidDisplayOneChar(unsignedcharX,unsignedcharY,unsignedcharDData);
voidDisplayListChar(unsignedcharX,unsignedcharY,unsignedcharcode*DData);
/******************************************************************************************
*函数名称:
WriteDataLCM
*功能描述:
LCM写数据
******************************************************************************************/
voidWriteDataLCM(ucharWDLCM)
{
R_BF();
lcdbuff=WDLCM;
LCM_RS=1;
LCM_RW=0;
w_cdata();//这里写入字符码
}
/******************************************************************************************
*函数名称:
DisplayListChar
*功能描述:
按指定位置显示一串字符,原来的遇到空格0x20就不显示
*函数说明:
******************************************************************************************/
voidDisplayListChar(ucharX,ucharY,ucharcode*DData)
{
ucharListLength,j;//定义局部变量
ListLength=strlen(DData);//读取字符串长度
X&=0xF;//限制X不能大于15
Y&=0x1;//限制Y不能大于1
if(X<=0xF)//X坐标应小于0xF
{
for(j=0;j { DisplayOneChar(X,Y,DData[j]);//显示单个字符 X++; } } } /****************************************************************************************** *函数名称: DisplayOneChar *功能描述: 按指定位置显示一个字符 *函数说明: ******************************************************************************************/ voidDisplayOneChar(ucharX,ucharY,ucharDData) { X&=0xF;//限制X不能大于15 Y&=0x1;//限制Y不能大于1 if(Y)X|=0x40;//如果Y是“1”,则合成显示第二行时地址码+0x40; X|=0x80;//合成的、显示位置码,指令码: 1Yxxxxxx(B) w_com(X);//写入地址码,X数据包含字符的显示位置 WriteDataLCM(DData);//写入数据码,要显示的字符数据 } /****************************************************************************************** *函数名称: LCMInit *功能描述: LCM初始化 *函数说明: LCM初始化 ******************************************************************************************/ voidLCMInit(void) { w_com(0x2c);//功能设置为: 四位数据总线 w_com(0x01);//清屏 w_com(0x06);//设置显示输入模式(AC指针自加1,显示不移位) w_com(0x0c);//显示开/关设置(设置显示、光标和闪烁开关) } /****************************************************************************************** *函数名称: R_BF *功能描述: 读忙标志BF *函数说明: 读忙标志BF *******************************************************************************************/ voidR_BF() { LCD7=1;//BF端口在DB7,置LCD7为“1”等待测试本端口电平 LCM_RS=0; LCM_RW=1; LCM_E=1;//RS=0;RW=1;E=1表示读忙标志BF while(LCD7);//若内部操作位BF忙CPU就等待BF不忙才能操作 LCM_E=0; } /****************************************************************************************** *函数名称: w_com *功能描述: 写命令 *函数说明: 主要用来初始化一些设置显示、输入模式、显示开关、光标、移位、功能、地址 *******************************************************************************************/ voidw_com(ucharcom) { R_BF(); lcdbuff=com; LCM_RS=0; LCM_RW=0; w_cdata(); } /****************************************************************************************** *函数名称: w_cdata *功能描述: 写命令的公共 *函数说明: 四位数据总线,每发送一字节,先发送高四位,再发送低四位 *******************************************************************************************/ voidw_cdata(void) { //-----写命令的高4位 LCD7=lcd_buff7; LCD6=lcd_buff6; LCD5=lcd_buff5; LCD4=lcd_buff4; LCM_E=1; _nop_(); LCM_E=0; _nop_(); _nop_(); //-----写命令的低4位 LCD7=lcd_buff3; LCD6=lcd_buff2; LCD5=lcd_buff1; LCD4=lcd_buff0; LCM_E=1; _nop_(); LCM_E=0; } /****************************************************************************************** *函数名称: LCD_cls *功能描述: LCM清屏 *******************************************************************************************/ voidLCD_cls(void) { w_com(0x01);//清屏 } #endif 以下是C51模块化DELAY.H函数程序 /*-------------------------------------------------------------------------- DELAY.H 延时函数头文件 --------------------------------------------------------------------------*/ #ifndef__DELAY_H__ #define__DELAY_H__ #defineucharunsignedchar #defineuintunsignedint //------函数(声明)-------------------------------- voidDelay400Ms(void);//延时400mS函数(子程序) /****************************************************************************************** *函数名称: Delay400Ms *功能描述: 400ms延时 ******************************************************************************************/ voidDelay400Ms(void) { ucharTempCycA=30;//1周期MPU用30,12周期MPU用5 uintTempCycB; while(TempCycA--) { TempCycB=7269; while(TempCycB--); }; } #endif
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 经典 KEILC51LCD16024 总线 驱动 中文 注释 程序