📄 lcd1602_parallel.c
字号:
/*=============================1602液晶驱动程序============================
程序名称:1602液晶驱动程序
版 本:Agni 07-SV开发板
作 者:蓝极风电子技术
日 期:2007.10.28
注:(1):主芯片AT89S52使用11.0592M晶振,1602上下屏液晶
(2):Keil uV3 3.30编译运行通过
(3):本例程在 Agni 07-SV 开发板平台上成功运行通过
(4):蓝极风电子技术网版权所有,只供学习参考,不得应用于商业用途.
(5):更多学习资源浏览:(http://www.bluepw.com 或 http://www.bluepw.cn)
============================================================================*/
#include<at89x52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define Data_lcd P0
sbit LCM_RS=P1^0;
sbit LCM_RW=P1^1;
sbit LCM_E=P1^2;
uchar code dig[]={"0123456789"};
void delay(uint);
void lcd_wait(void);
/*****************************延时K*1ms,12.000mhz**************************/
void delay(uint k)
{
uint i,j;
for(i=0;i<k;i++)
{
for(j=0;j<60;j++);
}
}
/***************************写数据/指令到ICM子函数*************************/
void Write(uchar X,uchar WCLCM)
{
lcd_wait();
Data_lcd=WCLCM;
if(X==0)
{
LCM_RS=0;LCM_RW=0; // 选中指令寄存器
}
else if(X==1)
{
LCM_RS=1;LCM_RW=0; // 选中数据寄存器
}
LCM_E =1;
_nop_();_nop_(); _nop_();
LCM_E =0;
}
/*****************************lcm内部等待函数*****************************/
void lcd_wait(void)
{
Data_lcd=0xff;
LCM_E =1;
LCM_RS=0;
LCM_RW=1;
_nop_();_nop_();_nop_();
while(Data_lcd&0x80)
{
LCM_E =0;
_nop_();_nop_();
LCM_E =1;
_nop_();_nop_();
}
LCM_E =0;
}
/******************************LCM初始化子函数***************************/
void Init_lcd()
{
uchar c;
delay(500);
Data_lcd=0;
delay(15);
for(c=0;c<3;c++) //三次显示模式设置,不检测忙信号
{
Data_lcd=0x38;
LCM_RS=0; // 选中指令寄存器
LCM_RW=0; // 写模式
LCM_E =1;
_nop_(); _nop_(); _nop_();
LCM_E =0;
delay(5);
}
Write(0,0x38); //8bit数据传送,2行显示,5*7字型,检测忙信号
Write(0,0x08); //关闭显示,检测忙信号
Write(0,0x01); //清屏,检测忙信号
Write(0,0x06); //显示光标右移设置,检测忙信号
Write(0,0x0c); //显示屏打开,光标不显示,不闪烁,检测忙信号
}
/* ************* 函数 Show() 对外来数据进行处理 **************************/
/************** 第一行:0x80--0x8f; 第二行:0xc0--0xcf********************/
void Show(uchar address,uchar L,uchar STR1[])
{
uchar i;
Write(0,address); for(i=0;i<L;i++) Write(1,STR1[i]);
}
/*************纯阿拉伯数字显示,参数入口:Show_dig(地址,数字)***********
void Show_dig(uchar address,uint number)
{
uchar buffer[8];
uchar j,k;
uchar i=0;
Write(0,address);
do{ //此子程序可以用,请看说明书
buffer[i++]=number%10;
number=number/10;
j=i;
}while(number!=0);
for(k=j;k>0;k--)
{
Write(1,dig[buffer[k-1]]);
}
}
******************************主函数************************************/
void main(void)
{
Init_lcd();
Write(0,0x01); //清显示屏
Show(0x80,16,"www.bluepw.com ");
Show(0xc0,16,"2007.11.04 Sun ");
//Show_dig(uchar address,uint number)
while(1);
}
/***************************** end *************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -