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

📄 initial.c

📁 使用51系列单片机(AT89S52)控制LCD(12864),全菜单化操作控制初始时间输入
💻 C
字号:
/*********************************************************************************************************                  
*                                     		initial service program
*                                       	QZhao,2007
*                                       	All Rights Reserved  
* File : initial.h
* By   : QZhao
* Contact : zq1987731@163.com
*********************************************************************************************************/

	sbit A138=P2^7;				//138片选
	sbit B138=P1^7;
	sbit C138=P1^6;

/*********************************************************************************************************
*                  
*                                     		8255相关定义
*
*********************************************************************************************************/
	
	sbit CS_8255=P1^0;

/*********************************************************************************************************  
*
*											键盘相关定义
*
*********************************************************************************************************/

	sbit K_SCAN=P1^4;			//读取键盘状态信息
	sbit K_CLK=P1^5;			//时钟信号
	uchar keynum=0;				//键值缓冲区,初值0

/*********************************************************************************************************  
*
*											LCD相关定义
*
*********************************************************************************************************/

	sbit LCD_E=P1^3;
	sbit LCD_RS=P3^3;
	char DIS_BUF[3]={0x20,0x20,0x20};
	uchar code ZQ[]=
	{
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	};

/*********************************************************************************************************  
*
*											DS1302相关定义
*
*********************************************************************************************************/
	
	#define DS1302_SEC_WR 	0x80		//秒
	#define DS1302_SEC_RD 	0x81
	#define DS1302_MIN_WR 	0x82		//分
	#define DS1302_MIN_RD 	0x83
	#define DS1302_HR_WR 	0x84		//时
	#define DS1302_HR_RD 	0x85
	#define DS1302_DATE_WR 	0x86		//日
	#define DS1302_DATE_RD 	0x87
	#define DS1302_MONTH_WR	0x88		//月
	#define DS1302_MONTH_RD	0x89
	#define DS1302_DAY_WR 	0x8A		//周
	#define DS1302_DAY_RD	0x8B
	#define DS1302_YEAR_WR 	0x8C		//年
	#define DS1302_YEAR_RD 	0x8D
	#define DS1302_CON_WR 	0x8E		//控制

	struct S_TIME
	{
		uchar SEC;			//00~59
		uchar MIN;			//00~59
		uchar HR;			//00-23
		uchar DATE;			//00-31
		uchar MONTH;		//01-12
		uchar DAY;			//01-07
		uchar YEAR;			//00-99
	}TIME={0x30,0x35,0x16,0x27,0x11,0x02,0x07};

	sbit DS1302_IO=P1^1;
	sbit DS1302_SCLK=P3^5;
	
	char DIS_BUF_D[7][2]={	{0x20,0x20},	//时间显示缓冲区
							{0x20,0x20},	
							{0x20,0x20},	
							{0x20,0x20},	
							{0x20,0x20},	
							{0x20,0x20},	
							{0x20,0x20}		};

/*********************************************************************************************************  
*
*											DS1820相关定义
*
*********************************************************************************************************/

	uchar tpl,tph;			// 温度值低位、高位字节 	
	sbit DQ=P3^2;			// 数据通信线DQ
	char DIS_BUF_T[9]={0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20};

/*********************************************************************************************************  
*
*											x5045相关定义
*
*********************************************************************************************************/
/*	
	#define WREN 	0x06 	//写允许
	#define WRDI 	0x04 	//写禁止
	#define RDSR 	0x05 	//读状态寄存器
	#define WRSR 	0x01 	//写状态寄存器
	#define READ 	0x03 	//读数据
	#define WRITE 	0x02 	//写数据

	#define	CLR_CS_5045		{A138=0;B138=1;C138=0;}	
	#define SETB_CS_5045	{A138=1;B138=1;C138=1;}
	#define NOP				{_nop_(); _nop_();}

	sbit SCK=P3^4;
	//so->8255_PC.6->R_PC(6)	
*/
/*********************************************************************************************************  
*
*											函数声明
*
*********************************************************************************************************/

	//8255相关
	bool W_8255(uchar x,uchar y);
	bit R_PC(uchar x);

	//key相关
	bool U_164(uchar x);
	uchar KEY_SCAN(void);

	//lcd相关
	bool LCD_initial(void);
	bool W_LCD(uchar x,uchar y);
	bool DIS_LCD(uchar x,uchar y,char *str,uchar z);
	bool GRAPH_POINT(uchar x,uchar y);
	bool GRAPH_BMP(uchar *str);
	bool LCDLineXy(uchar x,uchar y,uchar x1,uchar y1);
	bool CLEAR_HALF(void);		//clear half
	bool CLEAR_SCREEN(void);	//clear full
	//bool DIS_C_LCD(uchar x,uchar y,char z);
	//bool DIS_Z(uchar x);		//uchar-数值转ASC存入缓冲区

	//ds1302相关
	bool DS1302_initial(void);
	bool v_Set1302(void);		//初始时间设定
	bool v_Get1302(void);		//当前时间读取
	bool DIS_D_Z(void);			//时间类型数据转ASC存入缓冲区

	//ds1820相关
	bool TempConvert(void);		//温度转换开始
	bool DIS_T_Z(void);			//温度-数值转ASC存入缓冲区

	//menu相关
	bool FUN_MENU(uchar x);		//菜单(对应按键)功能服务函数
	bool fun1(void);
		bool fun1_1(void);
		bool fun1_2(void);
		bool fun1_3(void);
	bool fun2(void);
	bool fun4(void);
		bool fun4_0(void);
		bool fun4_1(void);

	//x5045相关
	uchar R5045(uint address);
	void W5045(uint address,uchar udata);

	//clock相关
	bool INDEX(uchar x,uchar y,uchar z);

/*********************************************************************************************************  
*
*											延时函数
*
*********************************************************************************************************/

	/* 延时t毫秒 */
	void delayms(uint t)
	{
		uint i;
		while(t--)
		{
			/* 对于11.0592M时钟,约延时1ms */
			for (i=0;i<125;i++)
			{}
		}
	}

/*********************************************************************************************************  
*
*											初始化函数
*
*********************************************************************************************************/
	void all_initial(void)
	{
		delayms(10);
		LCD_E=0;
		A138=1;
		B138=1;
		C138=1;
		W_8255(0x8A,1);			//控制字10001010
		W_8255(0x01,1);			//PC0置1(0,000,000,1),铃(0响)
		W_8255(0x03,1);			//PC1置1,DS1302复位
		W_8255(0x07,1);			//PC3置1,LCD背光(0点亮)
		LCD_initial();			//LCD初始化
		DS1302_initial();		//DS1302初始化
	}


⌨️ 快捷键说明

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