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

📄 lcd.h

📁 这是52单片机串口调试程序
💻 H
字号:
void mystrcpy(BYTE *str)
{
	BYTE i;
	for(i=0; i<16; i++)
		LCD_buf[i]=str[i];
}// Pass

void LCD_fillbuf(BYTE c)
{
	BYTE i;
	for(i=0; i<16; i++)
		LCD_buf[i]=c;
}// Pass

void LCD_delay(void)
{
	B_373_4=1;  B_373_4=0;							// send command data
	D373_3 |= LCD_E_MASK;   OUT_373_3			// LCD_E=1
	D373_3 &= ~LCD_E_MASK;  OUT_373_3			// LCD_E=0
	EA=1;
}// Pass

void LCD_sendcommand(BYTE m_s, BYTE command)
{
	if(m_s&1){	// Master
		EA=0;
		D373_3 |= LCD_CS1_MASK;						// LCD_CS1=1
		D373_3 &= ~(LCD_A0_MASK+LCD_CS2_MASK);	// LCD_CS2=0  LCD_A0=0
		OUT_373_3
		P0=command;  
		LCD_delay();
	}
	if(m_s&2){	// Slave
		EA=0;
		D373_3 |= LCD_CS2_MASK;						// LCD_CS2=1
		D373_3 &= ~(LCD_A0_MASK+LCD_CS1_MASK);	// LCD_CS1=0  LCD_A0=0
		OUT_373_3
		P0=command;  
		LCD_delay();
	}
}// Pass

void LCD_senddata(BYTE m_s, BYTE command)
{
	if(m_s&1){	// Master
		EA=0;
		D373_3 |= (LCD_CS1_MASK+LCD_A0_MASK);	// LCD_CS1=1  LCD_A0=1
		D373_3 &= ~LCD_CS2_MASK;					// LCD_CS2=0
		OUT_373_3
		P0=command;  
		LCD_delay();
	}
	if(m_s&2){	// Slave
		EA=0;
		D373_3 |= (LCD_CS2_MASK+LCD_A0_MASK);	// LCD_CS2=1  LCD_A0=1
		D373_3 &= ~LCD_CS1_MASK;					// LCD_CS1=0
		OUT_373_3
		P0=command;  
		LCD_delay();
	}
}// Pass

void LCD_setXaddr(BYTE m_s, BYTE x)
{
	LCD_sendcommand(m_s, 0xB8+x);
}// Pass

void LCD_setYaddr(BYTE m_s, BYTE y)
{
	LCD_sendcommand(m_s, 0x40+y);
}// Pass

void LCD_clearline(BYTE row)				// row=0/2/4/6
{
	BYTE i1,i2;
	for(i1=0; i1<2; i1++){
		LCD_setXaddr(3, row+i1);
		LCD_setYaddr(3, 0);
		for(i2=64; i2>0; i2--)
			LCD_senddata(3, 0);
	}
}// Pass

void LCD_clrscr(void)
{
	BYTE row;
	for(row=0; row<8; row+=2)
		LCD_clearline(row);
}// Pass

void LCD_writeline(BYTE line)
{
	WORD p;
	BYTE i,i1,i2,k1,k2,ch1;
	k1=k2=0;
	LCD_sendcommand(3, 0xC0);				// Set start line=0
	for(i1=0; i1<16; i1++){
		ch1=LCD_buf[i1];
		if(ch1==0xFF){							// 0xFF is NULL char,write nothing
			k1+=8;  k2=k1;
			continue;
		}
		if(ch1<0x80){	// Asc chars
			LCD_setXaddr(3, line);			// Set line 0
			Set_28F040_Page(1);
			p=0x2800+(ch1*16);				// ASC char in FLASH is A800-AFFF(2KB)
			for(i2=8; i2>0; i2--){
				if(k1<64){
					LCD_setYaddr(1, k1);
					LCD_senddata(1, Flash[p]);
				}else{
					LCD_setYaddr(2, k1-64);
					LCD_senddata(2, Flash[p]);
				}
				p++;  k1++;
			}
			LCD_setXaddr(3, line+1);		// Set line 1
			for(i2=8; i2>0; i2--){
				if(k2<64){
					LCD_setYaddr(1, k2);
					LCD_senddata(1, Flash[p]);
				}else{
					LCD_setYaddr(2, k2-64);
					LCD_senddata(2, Flash[p]);
				}
				p++;  k2++;
			}
		}else{			// Chinese chars
			i1++;
			p=(ch1-0xa1)*94+(LCD_buf[i1]-0xa1);
			i=p/1024;
			Set_28F040_Page(i);
			p=(p-(i*1024))*32;
			LCD_setXaddr(3, line);			// Set line 0
			for(i2=16; i2>0; i2--){
				if(k1<64){
					LCD_setYaddr(1, k1);
					LCD_senddata(1, Flash[p]);
				}else{
					LCD_setYaddr(2, k1-64);
					LCD_senddata(2, Flash[p]);
				}
				p++;  k1++;
			}
			LCD_setXaddr(3, line+1);		// Set line 1
			for(i2=16; i2>0; i2--){
				if(k2<64){
					LCD_setYaddr(1, k2);
					LCD_senddata(1, Flash[p]);
				}else{
					LCD_setYaddr(2, k2-64);
					LCD_senddata(2, Flash[p]);
				}
				p++;  k2++;
			}
		}
	}
}// Pass

void LCD_open(void)
{
	BYTE i;
	LCD_sendcommand(3, 0x3F);				// LCD reset
	LCD_sendcommand(3, 0xC0);				// LCD start line=0
	for(i=0; i<8; i+=2)						// LCD clear screen
		LCD_clearline(i);
}// Pass

void LCD_ShowStatus(void)
{
	BYTE i;
	BYTE code *F;
#ifdef	CHINESE
	BYTE code SHB_[]=" 上 班";
	BYTE code XIB_[]=" 下 班";
	BYTE code JBS_[]="加班上";
	BYTE code JBX_[]="加班下";
	BYTE code LSJ_[]=" 外 入";
	BYTE code LSC_[]=" 外 出";
#else
	BYTE code SHB_[]=" Work ";
	BYTE code XIB_[]=" Home ";
	BYTE code JBS_[]="tmp In";
	BYTE code JBX_[]="tmpOut";
	BYTE code LSJ_[]="ComeIn";
	BYTE code LSC_[]="Go out";
#endif
	for(i=0; i<9; i++)
		LCD_buf[i]=0xFF;
	switch(Sys_Stat){
		case SB:  F=SHB_; break;
		case XB:  F=XIB_; break;
		case JBS: F=JBS_; break;
		case JBX: F=JBX_; break;
		case LSJ: F=LSJ_; break;
		case LSC: F=LSC_; break;
	}
	for(i=9; i<16; i++){
		LCD_buf[i]=*F;
		F++;
	}
	LCD_writeline(2);
}// Pass

void LCD_ShowTime(void)
{
	BYTE i;
	HT1380_ReadTime();
	LCD_buf[0]=(Time_buf[2]>>4)+'0';
	LCD_buf[1]=(Time_buf[2]&0x0F)+'0';
	LCD_buf[2]=':';
	LCD_buf[3]=(Time_buf[1]>>4)+'0';
	LCD_buf[4]=(Time_buf[1]&0x0F)+'0';
	LCD_buf[5]=':';
	LCD_buf[6]=(Time_buf[0]>>4)+'0';
	LCD_buf[7]=(Time_buf[0]&0x0F)+'0';
	for(i=8; i<16; i++)
		LCD_buf[i]=0xFF;
	LCD_writeline(2);
}// Pass

void LCD_ShowRiqi(void)
{
	BYTE i;
#ifdef	CHINESE
	BYTE code XingQi[]={0xD2,0xBB,0xB6,0xFE,0xC8,0xFD,0xCB,0xC4,0xCE,0xE5,0xC1,0xF9,0xC8,0xD5};
	LCD_buf[0]=(Time_buf[4]>>4)+'0';  LCD_buf[1]=(Time_buf[4]&0x0F)+'0';	// 月
	LCD_buf[2]=0xD4;  LCD_buf[3]=0xC2;	// 月
	LCD_buf[4]=(Time_buf[3]>>4)+'0';  LCD_buf[5]=(Time_buf[3]&0x0F)+'0';	// 日
	LCD_buf[6]=0xC8;  LCD_buf[7]=0xD5;	// 日
	LCD_buf[8]=' ';
	LCD_buf[9]=0xD0;  LCD_buf[10]=0xC7;	// 星
	LCD_buf[11]=0xC6; LCD_buf[12]=0xDA;	// 期
	i=(Time_buf[5]-1)*2;
	LCD_buf[13]=XingQi[i];
	LCD_buf[14]=XingQi[i+1];
	LCD_buf[15]=' ';
#else
	BYTE code XingQi[]={'M','o','n','T','u','e','W','e','d','T','h','u','F','r','i','S','a','t','S','u','n'};
	LCD_buf[0]=LCD_buf[11]=LCD_buf[15]=' ';  LCD_buf[3]=LCD_buf[6]='/';
	LCD_buf[1]=(Time_buf[4]>>4)+'0';  LCD_buf[2]=(Time_buf[4]&0x0F)+'0';	// 月
	LCD_buf[4]=(Time_buf[3]>>4)+'0';  LCD_buf[5]=(Time_buf[3]&0x0F)+'0';	// 日
	LCD_buf[7]='2';  LCD_buf[8]='0';	// Year 20xx
	LCD_buf[9]=(Time_buf[6]>>4)+'0';  LCD_buf[10]=(Time_buf[6]&0x0F)+'0';// 年
	i=(Time_buf[5]-1)*3;
	LCD_buf[12]=XingQi[i];
	LCD_buf[13]=XingQi[i+1];
	LCD_buf[14]=XingQi[i+2];
#endif
	LCD_writeline(0);
}// Pass

void LCD_Show_Card_no(void)
{
	BYTE i,j;
	LCD_fillbuf(' ');
	for(i=0; i<7; i++){
		j=ID_Card_no[i]>>4;
		if(j<10)
			LCD_buf[i*2+1]=j+'0';
		else
			LCD_buf[i*2+1]=j+('A'-10);
		j=ID_Card_no[i]&0xF;
		if(j<10)
			LCD_buf[i*2+2]=j+'0';
		else
			LCD_buf[i*2+2]=j+('A'-10);
	}
	LCD_writeline(2);
}// Pass

void LCD_calc_User_id(void)
{
	WORD w;
	BYTE p;
	w=User_id;
	p=14;
	while(w>0){
		LCD_buf[p]=(w%10)+'0';
		p--;
		w=w/10;
	}
}// Pass

void LCD_Show_User(void)
{
	BYTE i;
	LCD_clearline(4);
	LCD_fillbuf(' ');
	for(i=0; i<8; i++)
		LCD_buf[i]=Flash[Flash_p+7+i];
	User_id=Flash[Flash_p+16]*256+Flash[Flash_p+15];
	LCD_calc_User_id();
	LCD_writeline(4);
}// Pass

⌨️ 快捷键说明

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