LCD1602显示屏滚动例程

main.c

/**************************************************************************************
注意事项:
根据自己使用的LCD1602是否带有转接板,如果带有转接板的即为4位,需在LCD.H头文件中
将宏#define LCD1602_4PINS打开,我们这里使用的LCD1602是8位,所以默认将该宏注释。	
	
接线说明:(开发攻略每个实验章节内的实验现象都有对应的接线图说明)
参考LCD1602实验																		  
***************************************************************************************/

#include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器
#include "lcd.h"

typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;

u8 a[16]="perchin designed";		 //第一行显示
u8 b[27]="welcome to the world of mcu";	 //2行显示

void delay(u16 i)  //当i=1,大约延时10us
{
	while(i--);
}

void LCD_Display(void)
{
	u8 i;

	LcdWriteCom(0x00+0x80);	  //第一行显示
	for(i=0;i<16;i++)
	{
		LcdWriteData(a[i]);	
	}
	LcdWriteCom(0x40+0x80);	 //2行显示
	for(i=0;i<27;i++)
	{
		LcdWriteData(b[i]);
	} 
	LcdWriteCom(0x07);	 //每写一个数据屏幕就要右移一位,就相对于数据来说就是左移了;
	
	while(1)
	{	
		LcdWriteCom(0x00+0x80);
		for(i=0;i<16;i++)
		{
			LcdWriteData(a[i]);
			delay(30000);	//如果不加这条延时语句的话滚动会非常快。
		}
	}
}

/*******************************************************************************
*            : main
* 函数功能		   : 主函数
*              : 
*              : 
*******************************************************************************/
void main(void)
{

	LcdInit();
	
	while(1)
	{
		LCD_Display();
	}				
}

LCD.C

#include "lcd.h"

/*******************************************************************************
*            : Lcd1602_Delay1ms
* 函数功能		   : 延时函数,延时1ms
*              : c
*              : 
*              : 该函数是在12MHZ晶振下,12分频单片机的延时。
*******************************************************************************/
  
void Lcd1602_Delay1ms(uint c)   //误差 0us
{
    uchar a,b;
	for (; c>0; c--)
	{
		 for (b=199;b>0;b--)
		 {
		  	for(a=1;a>0;a--);
		 }      
	}
    	
}

/*******************************************************************************
*            : LcdWriteCom
* 函数功能		   : 向LCD写入一个字节的命令
*              : com
*              : 
*******************************************************************************/
void LcdWriteCom(uchar com)	  //写入命令
{
	LCD1602_E = 0;     //使能
	LCD1602_RS = 0;	   //选择发送命令
	LCD1602_RW = 0;	   //选择写入
	
	LCD1602_DATAPINS = com;     //放入命令
	Lcd1602_Delay1ms(1);		//等待数据稳定

	LCD1602_E = 1;	          //写入时序
	Lcd1602_Delay1ms(5);	  //保持时间
	LCD1602_E = 0;
}

/*******************************************************************************
*            : LcdWriteData
* 函数功能		   : 向LCD写入一个字节的数据
*              : dat
*              : 
*******************************************************************************/		   
 
void LcdWriteData(uchar dat)			//写入数据
{
	LCD1602_E = 0;	//使能清零
	LCD1602_RS = 1;	//选择输入数据
	LCD1602_RW = 0;	//选择写入

	LCD1602_DATAPINS = dat; //写入数据
	Lcd1602_Delay1ms(1);

	LCD1602_E = 1;   //写入时序
	Lcd1602_Delay1ms(5);   //保持时间
	LCD1602_E = 0;
}

/*******************************************************************************
*          : LcdInit()
* 函数功能		 : 初始化LCD屏
*            : 
*            : 
*******************************************************************************/		   
void LcdInit()						  //LCD初始化子程序
{
 	LcdWriteCom(0x38);  //开显示
	LcdWriteCom(0x0c);  //开显示不显示光标
	LcdWriteCom(0x06);  //写一个指针加1
	LcdWriteCom(0x01);  //清屏
	LcdWriteCom(0x80);  //设置数据指针起点
}


LCD.H

#include

#define uchar unsigned char

#define uint unsigned int

#define LCD1602_DATAPINS P0
sbit LCD1602_E=P2^7;
sbit LCD1602_RW=P2^5;
sbit LCD1602_RS=P2^6;

/**********************************
函数声明
**********************************/
/*51单片机12MHZ时钟下的延时函数*/
void Lcd1602_Delay1ms(uint c);   //误差 0us
/*LCD1602写入8位命令子函数*/
void LcdWriteCom(uchar com);
/*LCD1602写入8位数据子函数*/	
void LcdWriteData(uchar dat)	;
/*LCD1602初始化子程序*/		
void LcdInit();						  

你可能感兴趣的:(LCD1602显示屏滚动例程)