⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd1602_parallel.c

📁 并行LCD1602液晶完整的驱动程序
💻 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 + -