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

📄 lcd.h

📁 本源代码是一个51单片机控制pcf8563时钟日历芯片的源代码
💻 H
字号:
#ifndef	_LCD_H 				// 防止LCD.h被重复引用
#define	_LCD_H

#include <reg52.h>
#include <intrins.h>
#include "common.h"
typedef unsigned char BYTE;
typedef unsigned int WORD;
typedef bit BOOL ;

void delay(BYTE ms)
{							// 延时子程序
	BYTE i;
	while(ms--)
	{
		for(i = 0; i< 250; i++)
		{
			_nop_();
			_nop_();
			_nop_();
			_nop_();
			
		}
	}
}
BOOL lcd_bz()
{							// 测试LCD忙碌状态
	BOOL result;
	rs = 0;
	rw = 1;
	ep = 1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	result = (BOOL)(P0 & 0x80);
	ep = 0;
	return result;	
}

lcd_wcmd(BYTE cmd)
{							// 写入指令数据到LCD
	while(lcd_bz());
	rs = 0;
	rw = 0;
	ep = 0;
	_nop_();
	_nop_();	
	P0 = cmd;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	ep = 1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	ep = 0;		
}

lcd_pos(BYTE pos)
{							//设定显示位置
	lcd_wcmd(pos | 0x80);
}

lcd_wdat(BYTE dat)	
{							//写入字符显示数据到LCD
	while(lcd_bz());
	rs = 1;
	rw = 0;
	ep = 0;
	P0 = dat;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	ep = 1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	ep = 0;	
}

lcd_init()
{							//LCD初始化设定
	lcd_wcmd(0x3c);			//
	delay(1);
	lcd_wcmd(0x0c);			//
	delay(1);
	lcd_wcmd(0x06);			//
	delay(1);
	lcd_wcmd(0x01);			//清除LCD的显示内容
	delay(1);
}
/*----------------------------------------------------------------------------------
  液晶显示函数:lcd_display()&&char_display()
----------------------------------------------------------------------------------*/
void lcd_display(uchar pos,uchar *dis)
{   
	uchar *p;
    lcd_pos(pos);
	p=dis;
	while(*p!=0)
	{lcd_wdat(*p);
	 p++;
	}
}
void char_display(uchar pos,uchar val)
{
 lcd_pos(pos);
 lcd_wdat(val);
}
/*----------------------------------------------------------------------------------
  年显示函数: year_display()
----------------------------------------------------------------------------------*/
void year_display(uchar *rbuf)
{ 
   uchar gw,sw;
   gw=(rbuf[5]&0x0f)+0x30;
   sw=((rbuf[5]>>4)&0x0f)+0x30;
   char_display(0x03,sw);
   char_display(0x04,gw);
   char_display(0x05,0x2e);
}
/*----------------------------------------------------------------------------------
  月显示函数: mon_display()
----------------------------------------------------------------------------------*/
void mon_display(uchar *rbuf)
{
   uchar gw,sw;
   rbuf[4]=rbuf[4]&0x1f;
   gw=(rbuf[4]&0x0f)+0x30;
   sw=((rbuf[4]>>4)&0x0f)+0x30;
   char_display(0x06,sw);
   char_display(0x07,gw);
   char_display(0x08,0x2e);
}
/*----------------------------------------------------------------------------------
  日显示函数: day_display()
----------------------------------------------------------------------------------*/
void day_display(uchar *rbuf)
{
   uchar gw,sw;
   rbuf[2]=rbuf[2]&0x3f;
   gw=(rbuf[2]&0x0f)+0x30;
   sw=((rbuf[2]>>4)&0x0f)+0x30;
   char_display(0x09,sw);
   char_display(0x0a,gw);
}
/*----------------------------------------------------------------------------------
  星期显示函数: week_display()
----------------------------------------------------------------------------------*/
void week_display(uchar *rbuf)
{
   rbuf[3]=rbuf[3]&0x07;
   switch(rbuf[3])
   {
   case 0x00:lcd_display(0x0c,Sun);break;
   case 0x01:lcd_display(0x0c,Mon);break;
   case 0x02:lcd_display(0x0c,Tue);break;
   case 0x03:lcd_display(0x0c,Wed);break;
   case 0x04:lcd_display(0x0c,Thu);break;
   case 0x05:lcd_display(0x0c,Fri);break;
   case 0x06:lcd_display(0x0c,Sat);break;
   default:break;
   }
}
/*----------------------------------------------------------------------------------
  小时显示函数: hour_display()
----------------------------------------------------------------------------------*/
void hour_display(uchar *rbuf)
{
   uchar gw,sw;
   rbuf[1]=rbuf[1]&0x3f;
   gw=(rbuf[1]&0x0f)+0x30;
   sw=((rbuf[1]>>4)&0x0f)+0x30;
   char_display(0x4a,sw);
   char_display(0x4b,gw);
   char_display(0x4c,0x3a);
}
/*----------------------------------------------------------------------------------
  分显示函数:min_display()
----------------------------------------------------------------------------------*/
void min_display(uchar *rbuf)
{   
    uchar gw,sw;
	rbuf[0]=rbuf[0]&0x7f;
	gw=(rbuf[0]&0x0f)+0x30;
    sw=((rbuf[0]>>4)&0x0f)+0x30;
    char_display(0x4d,sw);
    char_display(0x4e,gw);
}
/*----------------------------------------------------------------------------------
  整体时间显示函数:time_display()
----------------------------------------------------------------------------------*/
void time_display(uchar *rbuf)
{ 
  char_display(0x01,0x32);
  char_display(0x02,0x30);
  year_display(rbuf);
  mon_display(rbuf);
  week_display(rbuf);
  day_display(rbuf);
  hour_display(rbuf);
  min_display(rbuf);
}
/*----------------------------------------------------------------------------------
  报警时间显示函数:alarm_display()
----------------------------------------------------------------------------------*/
void alarm_display(uchar *abuf)
{ switch(AlarmCount)
  {case 0:abuf[AlarmCount]&=0x7f;break;
   case 1:abuf[AlarmCount]&=0x3f;break;
   case 2:abuf[AlarmCount]&=0x3f;break;
   case 3:abuf[AlarmCount]&=0x07;break;
   default:break;
  }  
  data1=(abuf[AlarmCount]&0xf0)>>4;   //十位
  data2=abuf[AlarmCount]&0x0f;        //个位
  char_display(0x42,data1+0x30);
  char_display(0x43,data2+0x30);
}


#endif

⌨️ 快捷键说明

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