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

📄 lcd1602.c

📁 PIC单片机的一些资料 学习单片机的朋友欢迎下载一定有用的哦
💻 C
字号:
/*********************************************
 example program for PIC download board
 16F877A @3.6864MHz
 test LCD 1602
 www.mcufan.com
*********************************************/
#include	<pic.h>
#define LCD_E_SET           PORTB |= 0x20     //PB5
#define LCD_E_CLR           PORTB &= ~0x20
#define LCD_RS_SET          PORTB |= 0x10			//PB4
#define LCD_RS_CLR          PORTB &= ~0x10
__CONFIG(WDTDIS & HS & LVPDIS & DEBUGDIS);
unsigned char line1[16],line2[16];
const unsigned char cgram1[64]={0x00,0x1f,0x12,0x09,0x1f,0x11,0x01,0x0f,
0x1e,0x04,0x04,0x08,0x1f,0x01,0x00,0x1e,
0x02,0x03,0x06,0x05,0x04,0x09,0x09,0x12,
0x00,0x1c,0x04,0x08,0x10,0x18,0x04,0x07,
0x04,0x04,0x04,0x04,0x1f,0x09,0x09,0x09,0x00,0x1f,0x01,0x02,0x04,0x04,0x04,0x1f,
0x11,0x19,0x06,0x04,0x06,0x0b,0x12,0x10,0x04,0x04,0x04,0x04,0x04,0x04,0x14,0x08};//爱好


void delay5ms()
{
	unsigned int i;
	for (i=0;i<4000;i++)
	;
}

void delay50us()
{
	register int i;
	for (i=0;i<100;i++)
	;
}

wr_com_8(unsigned char comm)
{
		unsigned char pb;
		LCD_E_CLR;
		LCD_RS_CLR;
 	 
		LCD_E_SET;
		pb=PORTB;
//		pb=pb&0x0F;
//		pb +=comm&0xF0;
		pb=pb&0xF0;
		pb +=comm&0x0F;
		PORTB =pb;
		LCD_RS_CLR;
 		 
		LCD_E_CLR;
}

wr_data_8(unsigned char dat)
{
		unsigned char pb;
		LCD_E_CLR;
		LCD_RS_CLR;
  
		LCD_RS_SET;
 	 
		LCD_E_SET;
		pb=PORTB;
		pb=pb&0xF0;
		pb +=dat&0x0F;
		PORTB =pb;

  		LCD_E_CLR;
		LCD_RS_CLR;
 	 
}


wr_com(unsigned char comm)
{
		unsigned char i;
		unsigned char pb;
		i=(comm>>4)&0x0f;//i=comm&0xf0;
		LCD_E_CLR;
		LCD_RS_CLR;
 	 
		LCD_E_SET;
		pb=PORTB;
		pb=pb&0xF0;
		pb +=i&0x0F;
		PORTB =pb;

		
		LCD_RS_CLR;
	 
		LCD_E_CLR;

		LCD_E_SET;
		i=comm&0x0f;
		pb=PORTB;
		pb=pb&0xF0;
		pb +=i&0x0F;
		PORTB =pb;


		LCD_E_CLR;
		LCD_RS_CLR;
		 
}

wr_data(unsigned char dat)
{
		unsigned char i;
		unsigned char pb;
		i=(dat>>4)&0x0f;
		LCD_E_CLR;
		LCD_RS_CLR;
		 
		LCD_RS_SET;
		 
		LCD_E_SET;
		
		pb=PORTB;
		pb=pb&0xF0;
		pb +=i&0x0F;
		PORTB =pb;

  		LCD_E_CLR;

  		i=dat&0x0f;
  		LCD_E_SET;
  		
  		pb=PORTB;
		pb=pb&0xF0;
		pb +=i&0x0F;
		PORTB =pb;

		LCD_E_CLR;
		LCD_RS_CLR;
		 
}


unsigned char rd_bf()
{

}
	
void init()
{
	
	
	unsigned char in,i;
	
//	DDRB  |= 0xFF;  // Set SCK, MOSI & SS PB1,2,3 as outputs
  //PORTB &= 0x5F;  // clear bits MOSI, & SCK
	
	
	wr_com_8(0x03);
	delay5ms();
	wr_com_8(0x03);
	delay5ms();
	wr_com_8(0x03);
	delay5ms();
	
	delay5ms();
/*	wr_com(0x01);
	delay5ms();
	
	delay5ms();
	wr_com(0x06);
	delay5ms();
	
	delay50us();	*/
	wr_com(0x28);
	delay50us();
	
	delay50us();
	wr_com(0x0c);
	delay50us();
	
	delay50us();
	
	wr_com(0x40);		
	delay50us();
	
	delay50us();
	for(i=0;i<64;i++)
	{
		wr_data(cgram1[i]);		//display "0"
		delay50us();
	
	}
}

	
/*系统各输入输出口初始化子程序*/
void		initial_port()
{
	TRISB=0x00;			/*B口设置为输出*/
	INTCON=0x00;			/*关闭所有中断*/

}	



display_162()
{
			unsigned char in,i;
		wr_com(0x80);		
		delay50us();
		delay50us();
		for(i=0;i<16;i++)
		{
			wr_data(line1[i]);		//display "0"
			delay50us();

		}

		delay50us();
		wr_com(0xc0);
		delay50us();

		delay50us();
		for(i=0;i<16;i++)
		{
			wr_data(line2[i]);		//display "0"
			delay50us();

		}
}
main()
{
	unsigned char in,i,da;
	delay5ms();
	initial_port();		
	init();	

	while(1)
	{
				line1[0]=0x20;
				line1[1]=0;		//display "爱好"
				line1[2]=1;
				line1[3]=4;
				line1[4]=5;
				line1[5]=0x20;
				line1[6]=0;		//display "爱好"
				line1[7]=1;
				line1[8]=4;
				line1[9]=5;
				line1[10]=0x20;
				line1[11]=0;		//display "爱好"
				line1[12]=1;
				line1[13]=4;
				line1[14]=5;
				line1[15]=0x20;
				
				line2[0]=0x20;
				line2[1]=2;		//display "爱好"
				line2[2]=3;
				line2[3]=6;
				line2[4]=7;
				line2[5]=0x20;
				line2[6]=2;		//display "爱好"
				line2[7]=3;
				line2[8]=6;
				line2[9]=7;
				line2[10]=0x20;
				line2[11]=2;		//display "爱好"
				line2[12]=3;
				line2[13]=6;
				line2[14]=7;
				line2[15]=0x20;
			
				display_162();	
	}
}

⌨️ 快捷键说明

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