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

📄 main.c

📁 数据采集系统的好参考资料,高精度的传感器采集系统
💻 C
📖 第 1 页 / 共 2 页
字号:
//-----------------------------------------------------------------------
//Copyright (c) 2006
//Author:	Wang Meng. 
//Version:	V1.0.  
//Date:		2006.9.13.
//Description:
//			LCD-----------P1(数据口)、P3.3、P3.4、P3.5(控制口)
//			DS12887-------P0(数据口)、P2.6(片选)
//			WAVE----------P2.4(发波)、P3.2(收波)
//			DS18B20-------P2.3(数据口)
//			KEY-----------P2.0(K2)、P2.1(K1)、P2.5(K3)、P2.7(K4)
//-------------------------------------------------------------------------
//头文件包含-----------------------------------------------------
#include<LCD.H>
#include<12887.H>
#include<DS18B20.H>
#include<WAVE.H>
#include<reg51.h>
//全局变量--------------------------------------------------------------
bit Ex0Flag=0;									//外部中断标志
bit AlarmFlag=0;								//定时中断标志

idata unsigned char Key=0;						//键值
idata unsigned char CurIndex=0;					//主菜单标号

idata unsigned char DisBuf;						//距离变量
idata unsigned char TempBuf;					//温度变量
idata unsigned char DateBuf[6]={6,9,7,4,2,0};	//时间日期变量
idata unsigned char AlarmBuf[3]={0};			//定时时间变量
idata unsigned char DateTbl[6]={2,6,10,0,4,8};	//时间在字符串中的位置

idata char Date[]="2006年09月08日";				//日期显示缓冲区
idata char Time[]="00:00:00";					//时间显示缓冲区
idata char Dis[]="测试距离:000mm";				//距离显示缓冲区
idata char Temp[]="温度:00^C";					//温度显示缓冲区
//系统函数声明--------------------------------------------------------
void FstGrap(void);								//显示开机画面函数
void ShowTime(void);							//显示时间函数
void ShowDate(void);							//显示日期函数
void ShowDis(void);								//显示距离函数
void ShowTemp(void);							//显示温度函数
void ShowDis(void);								//显示距离函数
void SetDate(void);								//设置时间日期函数
void SetClk(void);								//设置定时时间函数
unsigned char ReadKey(void);					//按键扫描函数			
void delay1(unsigned int t);					//延时函数
struct MENU{									//菜单结构体
	char code *name;								//菜单的名字
	void (*Fun)(void);}								//对应的函数指针
Menu[]={										//菜单结构体数组初始化
{"显示时间",ShowTime},
{"显示日期",ShowDate},
{"显示温度",ShowTemp},
{"检测距离",ShowDis},
{"设置时间日期",SetDate},
{"设置定时时间",SetClk}};
//主函数----------------------------------------------------------------
main()
{
	unsigned char i;
entry:	
	Lcd_init();							//系统初始化函数
	DS12887_init();
	Clr_grap();Scr_clr();
	delay1(5000);
	FstGrap();
	
	do{Key=ReadKey();}
	while(Key==0);
	Clr_grap();
	Scr_clr();
	while(1)
	{
		if(Key!=0)						//如果有间按下则进行相应的处理	
		{
			switch(Key)						//按键处理程序
			{
				case 1:							//确定键,执行相应的函数
					Menu[CurIndex].Fun();
					break;
				case 2:							//光标上移
					if(CurIndex++==5)
						CurIndex=0;
					break;
				case 3:							//光标下移
					if(CurIndex--==0)
						CurIndex=5;
					break;
		   		case 4:							//取消键,返回
					goto entry;
					break;
			}
						
			Scr_clr();						//重新绘制显示界面
			Set_addr(1,2);
			if(CurIndex<4)						//绘制前四个菜单
			{
				for(i=0;i<4;i++)
				{
					Set_addr(i+1,2);
					Write_str(Menu[i].name);
				}

				Set_addr(CurIndex+1,1);			//绘制光标
				Write_char(62);						
			}
			else
			{
				Set_addr(1,2);					//绘制后两个菜单
				Write_str(Menu[4].name);
				Set_addr(2,2);
				Write_str(Menu[5].name);
				
				Set_addr((CurIndex+1)%4,1);		//绘制光标
				Write_char(62);						
		   }
		}
	 	Key=ReadKey();
	 	if(AlarmFlag)								//如果闹铃开了,检测定时时间是否到了
	 	{
			Read_12887(DateBuf);
	 		if((AlarmBuf[0]==DateBuf[3])&&(AlarmBuf[1]==DateBuf[4])&&(AlarmBuf[2]==DateBuf[5]))
			{
				Scr_clr();
				delay1(5000);
				Set_addr(2,2);
				Write_str("定时时间到了");
				do{Key=ReadKey();}
				while(Key==0);
				Key=2;
			}
		}
	}
}
//中断函数-------------------------------------------------------
void extern0_ISR() interrupt 0
{
	EX0=0;TR0=0;//WAV=0;
	Ex0Flag=1;
}
//-----------------------------------底层函数声明--------------------------------------------------
//---------------------------------
//函数:void delay1(unsigned int t)
//声名:延时函数
//参数:延长时间
//---------------------------------
void delay1(unsigned int t)
{
	while(--t);
}
//--------------------------------
//函数:char* itoa(unsigned char c)
//功能:将数值转换成两位字符串
//参数:数值
//返回:字符串
//-------------------------------
char* itoa(unsigned char c)
{
	char str1[2];
	str1[0]=c/10+48;
	str1[1]=c%10+48;
	return(str1);
}
//------------------------------------------------
//函数:void ProcAlarm(void)
//功能:将定时时间添加到显示缓冲区字符中
//------------------------------------------------
void ProcAlarm(void)
{
	char *a;
	a=itoa(AlarmBuf[0]);					//时
	Time[DateTbl[3]]=a[0];Time[DateTbl[3]+1]=a[1];
	a=itoa(AlarmBuf[1]);					//分
	Time[DateTbl[4]]=a[0];Time[DateTbl[4]+1]=a[1];
	a=itoa(AlarmBuf[2]);					//秒
	Time[DateTbl[5]]=a[0];Time[DateTbl[5]+1]=a[1];
}
//---------------------------------------------------
//函数:void ProcTime(void)
//功能:将时间添加到显示缓冲区字符中
//---------------------------------------------------
void ProcTime(void)
{
	char *a;
	a=itoa(DateBuf[3]);					//时
	Time[DateTbl[3]]=a[0];Time[DateTbl[3]+1]=a[1];
	a=itoa(DateBuf[4]);					//分
	Time[DateTbl[4]]=a[0];Time[DateTbl[4]+1]=a[1];
	a=itoa(DateBuf[5]);					//秒
	Time[DateTbl[5]]=a[0];Time[DateTbl[5]+1]=a[1];
}
//----------------------------------------------------
//函数:void ProcDate(void)
//功能:将日期添加到显示缓冲区字符中
//----------------------------------------------------
void ProcDate(void)
{
	char *a;
	a=itoa(DateBuf[0]);					//年
	Date[DateTbl[0]]=a[0];Date[DateTbl[0]+1]=a[1];
	a=itoa(DateBuf[1]);					//月
	Date[DateTbl[1]]=a[0];Date[DateTbl[1]+1]=a[1];
	a=itoa(DateBuf[2]);					//日
	Date[DateTbl[2]]=a[0];Date[DateTbl[2]+1]=a[1];
}
//---------------------------------被主函数调用的函数定义--------------------------------------
//---------------------------------------------
//函数:unsigned char ReadKey(void)
//功能:按键扫描程序
//返回:返回按键值
//---------------------------------------------
unsigned char ReadKey(void)
{
   	unsigned char KeyValue,a,i;
   	char code keytbl[]={0x02,0x01,0x20,0x80};
   	P2=P2|0xa3;         
   	KeyValue=P2;
   	KeyValue=~KeyValue;
   	KeyValue=KeyValue&0xa3;
   	if(!KeyValue) return(0);
   	delay1(1000);
   	P2=P2|0xa3;
   	KeyValue=P2;
   	KeyValue=~KeyValue;
   	KeyValue=KeyValue&0xa3;
   	if(!KeyValue) return(0);
   	do{a=P2|~0xa3;}
   	while(a!=0xff);
   	for(i=0;i<4;i++)
   		if(KeyValue==keytbl[i])
   			return(i+1);
}
//------------------------------------------------------------
//函数:void ShowTime(void)
//功能:在液晶上显示时间
//------------------------------------------------------------

⌨️ 快捷键说明

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