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

📄 lcd1602c.c

📁 基于单片机的红外解码源码
💻 C
字号:
//使用举例(仅供参考)  
#include <reg52.h>     
//#include <intrins.h>
//#define lcdbus P3
sbit dc=P1^3; /*P1.3 LCD 的RS 21*/
sbit rw=P1^4; /*P1.4 LCD 的R/W 22*/
sbit cs=P1^5; /*P1.5 LCD 的E 25*/
sfr lcdbus=0xB0; /*p3 LCD 数据D0=P3.0*/
sfr ZW=0xA0; /*p2 LCD 数据D0=P3.0*/
sfr ZX=0x80; /*p0 LCD 数据D0=P3.0*/
unsigned int sys10mscounter;
unsigned char syslimitcounter;
char code path1[8]={0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f};/*自定义符号:横1*/
char code  path2[8]={0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00};/*自定义符号:横2*/
char code  pats1[8]={0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15};/*自定义符号:竖1*/
char code  pats2[8]={0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a};/*自定义符号:竖2*/

//extern void lcd_init(void);
//extern void lcd_string(char *strpoint); /*在当前显示位置显示LCD 字符串*/
//extern lcd();
void soft_nop(){}
void soft_10ms()/***********12MHZ 提供10MS 软件延时************/
{ 	register unsigned int i;
	//for(i=0;i<711;i++); // 12M
	for(i=0;i<1422;i++);  // 24M
}
void soft_20ms()/***********12MHZ 提供20MS 软件延时************/
{ 	soft_10ms();
	soft_10ms();
}

void delay2()
{ int i;
  i=3000;
  while(i--) soft_10ms();
}
void hard_10ms(unsigned int delaytime) /*基于10MS 的硬件延时*/
{ 	sys10mscounter=delaytime;
	//while(sys10mscounter);
	while(sys10mscounter--) soft_10ms();
}
unsigned char data lcdcounter;
bit lcdusing1,lcdusing2;
bit lcd_checkbusy()/*检查LCD 忙*/
{ 	register lcdstate;
	dc=0; /*dc=1为数据,=0为命令.*/
	rw=1; /*rw=1为读,=0为写.*/
	cs=1; /*cs=1选通.*/
	soft_nop();
	//lcdbus = 0xff;
	lcdstate=lcdbus;
	cs=0;
	return((bit)(lcdstate&0x80));
}
void lcd_wrcmd(unsigned char lcdcmd) /*写LCD 命令*/
{ 	lcdusing1=1;
	while(lcd_checkbusy());
	lcdbus=lcdcmd;
	dc=0; /*dc=1为数据,=0为命令.*/
	rw=0; /*rw=1为读,=0为写.*/
	cs=1; /*cs=1选通.*/
	soft_nop();
	cs=0;
	lcdbus=0xff;
	lcdusing1=0;
}
void lcd_moveto(char position) /*移动光标到指定位.0-79*/
{ 	register cmd=0x80;
	lcdcounter=position;
	if (position > 59)
		position += 0x18;
	else
	{ 	if (position > 39)position -= 0x14;
		else
		{ if (position > 19)position += 0x2c;
		}
	}
	cmd=cmd|position;
	lcd_wrcmd(cmd);
}
void lcd_wrdata(char lcddata) /*在当前显示位置显示数据*/
{ 	//char i;
	lcdusing2=1;
	while(lcd_checkbusy());
	if(lcdcounter==20){
		lcd_moveto(20);
		while(lcd_checkbusy());
	}
	if(lcdcounter==40){
	lcd_moveto(40);
	while(lcd_checkbusy());
	}
	if(lcdcounter==60){
		lcd_moveto(60);
		while(lcd_checkbusy());
	}
	if(lcdcounter==80){
		lcd_moveto(0);
		while(lcd_checkbusy());
		lcdcounter=0;
	} /*为通用而如此*/
	lcdcounter++;
	lcdbus=lcddata;
	dc=1; /*dc=1为数据,=0为命令.*/
	rw=0; /*rw=1为读,=0为写.*/
	cs=1; /*cs=1选通.*/
	soft_nop();
	cs=0;
	lcdbus=0xff;
	lcdusing2=0;
	cs=0;
}

void lcd_string(char *strpoint) /*在当前显示位置显示LCD 字符串*/
{ 	register i=0;
	while(strpoint[i]!=0){
		lcd_wrdata(strpoint[i]);
		i++;
	}
	cs=0;
}
void lcd_init()/*初始化*/
{ 	lcd_wrcmd(0x38); /*设置8 位格式,2 行,5*7*/
	lcd_wrcmd(0x0c); /*整体显示,关光标,不闪烁*/
	lcd_wrcmd(0x06); /*设定输入方式,增量不移位*/
	lcd_wrcmd(0x01); /*清除显示*/
	lcdcounter=0;
}
void lcd_cls()/*清除显示*/
{ 	lcd_wrcmd(0x01);
	lcdcounter=0;
}
void timer0(void) interrupt 1 /*T0 中断*/
{ 	//TH0=0xd8; /*12M,10ms*/
	//TL0=0xf6;
 	TH0=0xb1; /*24M,10ms*/
 	TL0=0xe0;

	TR0=1;
	if(sys10mscounter!=0)sys10mscounter--; /*定时器10ms*/
	if(syslimitcounter!=0)syslimitcounter--; /*定时器10ms*/
}

 
void initUart2(void)
{
 TMOD|=0x20;
 SCON=0x50;
 PCON|=0x80;
 TH1=0xf3;
 TL1=0xf3;
 TR1=1;
 ES=1;
}
void initTimer(void)
{
 TMOD=0x1;
 TH0=0xb1;
 TL0=0xe0;
}

void rs232(void) //interrupt 4
{ unsigned char j;
   if(RI){
	   RI=0;
	   j=SBUF;
	   SBUF = j;  	   
   }
   if(TI) {
       TI=0;
   }
}
/*
lcdiiiii()
{
	unsigned char j;
	IE=0;P0=0xff;P1=0xff;P2=0xff;P3=0xff; 初始化T
	ZW = 0x01;
	ZX = 0x80;

 	initTimer();
	initUart();
	
	lcd_init();soft_20ms();  
	TR0=1;	ET0=1;	EA=1; TI=0;
	lcd_init(); //全黑
	for(j=0;j<32;j++){lcd_wrdata(0xff);}	

}
test()
{
	unsigned char j;
	IE=0;P0=0xff;P1=0xff;P2=0xff;P3=0xff; //初始化T
	ZW = 0x01;
	ZX = 0x80;

 	initTimer();
	initUart();
	
	lcd_init();soft_20ms();  
	TR0=1;	ET0=1;	EA=1; TI=0;
	lcd_init(); //全黑
	for(j=0;j<32;j++){lcd_wrdata(0xff);}	

	ZW = 0xff;   ZX = 0x80;  //3
	

	while(1)
	{
	
		lcd_init(); 
		for(j=0;j<80;j++){lcd_wrdata(0xf0);}
		//ZX = 0xb0;
		//while(1);		
		hard_10ms(50);
		lcd_init(); 
		lcd_wrcmd(0x40);
		for(j=0;j<8;j++)lcd_wrdata(path1[j]);
		for(j=0;j<100;j++)lcd_wrdata(0);
		hard_10ms(50);
		lcd_init(); 
		lcd_wrcmd(0x40);
		for(j=0;j<8;j++)lcd_wrdata(path2[j]);
		for(j=0;j<100;j++)lcd_wrdata(0);
		hard_10ms(50);
		lcd_init(); 
		lcd_wrcmd(0x40);
		for(j=0;j<8;j++)lcd_wrdata(pats1[j]);
		for(j=0;j<100;j++)lcd_wrdata(0);
		hard_10ms(50);
		lcd_init(); 
		lcd_wrcmd(0x40);
		for(j=0;j<8;j++)lcd_wrdata(pats2[j]);
		for(j=0;j<100;j++)lcd_wrdata(0);
		hard_10ms(50);
		lcd_init();
		lcd_string("UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU");
		hard_10ms(50);
		lcd_init();
		lcd_string("QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ");
		hard_10ms(50);
		lcd_init();
		lcd_string("You are wellcome!   LCD Driver for51");
		hard_10ms(500);
	}
}
*/

⌨️ 快捷键说明

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