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

📄 lcd1602.c

📁 16f88控制lcd1602显示源码
💻 C
字号:
#include <pic.h>
#include <stdio.h>
#include <string.h>
#define LcdRs		RA2
#define LcdRw		RA3
#define LcdEn  	    RA4
#define  DBPort 	PORTB		
#define _nop_()     asm("nop")
__CONFIG(0X2F50);
volatile unsigned int Count=0;
volatile unsigned char TempBuffer[10];
bank1 volatile unsigned char name[]="The 1602LCD Test",
name1[]="GO:       by XuF";
//内部等待函数**************************************************************************
void interrupt TMR(void)
{
	#asm
		CLRWDT
	#endasm
	TMR2IF=0;
}
void delay(unsigned int n)
{
	unsigned int j;
	for(j=0;j<n;j++);
}
void IntToStr(unsigned int t, unsigned char *str, unsigned char n) 
{
	unsigned char a[5]; 
	char i, j;                                 	
	a[0]=(t/10000)%10;         //取得整数值到数组         	
	a[1]=(t/1000)%10;                                     	
	a[2]=(t/100)%10;                                      	
	a[3]=(t/10)%10;                                       	
	a[4]=(t/1)%10;  
	for(i=0;i<5;i++)
	{
		*str=a[i]+'0';
		str++;
	}
	*str='\0';
	str=str-5;
	if(*str=='0')
	{
		*str=' ';
		str++;
		if(*str=='0')
		{
			*str=' ';
			str++;
			if(*str=='0')
			{
				*str=' ';
				str++;
				if(*str=='0')
				{
					*str=' ';
					str++;
					if(*str=='0')
					{
						*str=' ';
						str++;
					}
				}
			}
		}
	}
	/*for(i=0; i<5; i++)         //转成ASCII码              	
		a[i]=a[i]+'0';                                    	
	for(i=0; a[i]=='0' && i<=3; i++);                     	
	for(j=5-n; j<i; j++)       //填充空格                 	
		{ *str=' ';  str++; }                             	
	for(; i<5; i++)                                       	
		{ *str=a[i]; str++; }  //加入有效的数字           	
	*str='\0'; */
} 
unsigned char LCD_Wait(void)
{
	LcdRs=0;
	LcdRw=1;	
	_nop_();
	LcdEn=1;	
	_nop_();
	LcdEn=0;
	return DBPort;		
}
//向LCD写入命令或数据************************************************************
#define LCD_COMMAND			0      // Command
#define LCD_DATA			1      // Data
#define LCD_CLEAR_SCREEN	0x01      // 清屏
#define LCD_HOMING  		0x02      // 光标返回原点
void LCD_Writedata(unsigned char input)
{
	LcdRs=1;
	LcdRw=0;
	LcdEn=0;
	_nop_();
	DBPort=input;	
	_nop_();
	LcdEn=1;		
	_nop_();
	LcdEn=0;		
	_nop_();
	delay(1000);	
}
void LCD_Writecommand(unsigned char input)
{
	LcdRs=0;
	LcdRw=0;
	LcdEn=0;
	_nop_();
	DBPort=input;	
	_nop_();
	LcdEn=1;		
	_nop_();
	LcdEn=0;		
	_nop_();
	delay(1000);	
}

//设置显示模式************************************************************
#define LCD_SHOW			0x04    //显示开
#define LCD_HIDE			0x00    //显示关	  

#define LCD_CURSOR			0x02 	//显示光标
#define LCD_NO_CURSOR		0x00    //无光标		     

#define LCD_FLASH			0x01    //光标闪动
#define LCD_NO_FLASH		0x00    //光标不闪动

void LCD_SetDisplay(unsigned char DisplayMode)
{
	LCD_Writecommand(0x08|DisplayMode);	
}

//设置输入模式************************************************************
#define LCD_AC_UP			0x02
#define LCD_AC_DOWN			0x00      // default

#define LCD_MOVE			0x01      // 画面可平移
#define LCD_NO_MOVE			0x00      //default

void LCD_SetInput(unsigned char InputMode)
{
	LCD_Writecommand(0x04|InputMode);
}
void LCD_Initial()
{
	LcdEn=0;
	delay(1500);
	LCD_Writecommand(0x38);           //8位数据端口,2行显示,5*7点阵
	LCD_Writecommand(0x38);
	LCD_Writecommand(0x38);
	LCD_Writecommand(0x38);
	//LCD_Writecommand(0x08);//显示关
	//LCD_Writecommand(0x01);//清屏
	//LCD_Writecommand(0x06);//AC递增, 画面不动
	//LCD_Writecommand(0x0c);//开启显示, 无光标
    LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);    //开启显示, 无光标
	LCD_Writecommand(LCD_CLEAR_SCREEN);   //清屏
	LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);       //AC递增, 画面不动
}

//************************************************************************
void GotoXY(unsigned char x, unsigned char y)
{
	if(y==0)
		LCD_Writecommand(0x80|x);//写地址
	if(y==1)
		LCD_Writecommand(0x80|(x+0x40));
}
void Print(unsigned char *str)
{
	while((*str)!='\0')
	{
		LCD_Writedata(*str);
		str++;
	}
}
void systeminitial()
{
	OSCCON=0X62;
	OSCTUNE=0X00;
	OPTION=0X1F;
	CMCON=0X07;
	//CCPR1L=0;
	//PR2=255;
	//TMR2=0X00;
	//T2CON=0X0C;
	//PORTB=0X00;
	TRISB=0X00;
	PORTA=0X00;
	TRISA=0X00;
	ANSEL=0X00;
	PIR1=0;
	PIE1=0;
	INTCON=0;
	//WDTCON=0X00;
}
void main()
{
	systeminitial();
	LCD_Initial();
	GotoXY(0,0);
	Print(name);
	GotoXY(0,1);
	Print(name1);
	while(1)
	{
		IntToStr(Count++,&TempBuffer[0],5);
		GotoXY(3,1);
		Print(&TempBuffer[0]);
		delay(1000);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -