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

📄 main._c

📁 用ICCAVR所写的温度采集函数
💻 _C
字号:
#include "iom128v.h"
#include "MyMacro.h"
#include "macros.h"

#pragma interrupt_handler Key:2

extern void Delay(unsigned int);	
extern void ShutWatchDog(void);	
extern void Show_LCD(void);
extern void Show_Temp(void);
extern void Show_Time_Scale(void);
extern void LCD_mode(void);
extern void PC_mode(void);
extern void OTG_mode(void);

unsigned char Pressed_Key=ERROR;
unsigned char MCUState=LCD_DISPLAY;
unsigned char FormerState=LCD_DISPLAY;
unsigned char TimeScale=0;
float Temperature=0;
unsigned int SavedNum=0;

void Key()
{
 unsigned char i;
 
 ShutWatchDog();

 Delay(10);	   //延时10ms再读入数据
 i=PIND|0xf0; //取输入值
 switch(i)
 {
  case 0xf7	  :			 Pressed_Key=UP;
  case 0xfb	  :			 Pressed_Key=MENU;
  case 0xfc	  :			 Pressed_Key=DOWN;
  case 0xfe	  :			 Pressed_Key=BACK;
  default  	  :			 Pressed_Key=ERROR;
 }

//下面根据输入的键值改变单片机的工作状态标志变量 
  switch(MCUState)
  {
  case WORKING	  :
  	   switch(Pressed_Key)
  	   {
   	   case MENU	:	{FormerState=MCUState; 	MCUState=LCD_DISPLAY;  TimeScale=0;}	//一旦进入主菜单立即清零TimeScale,前面设置的时间间隔作废
   	   default		:	;						//出现异常情况保持当前状态不变
   		} 
  case LCD_DISPLAY:
  	   switch(Pressed_Key)
  	   {
   	   case UP		:	{FormerState=MCUState; 	MCUState=OTG_HOST;}
   	   case MENU	:	{FormerState=MCUState; 	MCUState=SAVE_DATA_YES;}
	   case DOWN	:	{FormerState=MCUState; 	MCUState=PC_DISPLAY;}
	   case BACK	:	{FormerState=MCUState; 	MCUState=WORKING;}
	   default		:	;
	   }
  case PC_DISPLAY :
  	   switch(Pressed_Key)
  	   {
   	   case UP		:	{FormerState=MCUState; 	MCUState=LCD_DISPLAY;}
   	   case MENU	:	{FormerState=MCUState; 	MCUState=0;}//待定
	   case DOWN	:	{FormerState=MCUState; 	MCUState=OTG_HOST;}
	   case BACK	:	{FormerState=MCUState; 	MCUState=WORKING;}
	   default		:	;
	   }
  case OTG_HOST		:
  	   switch(Pressed_Key)
  	   {
   	   case UP		:	{FormerState=MCUState; 	MCUState=PC_DISPLAY;}
   	   case MENU	:	{FormerState=MCUState; 	MCUState=0;}//待定
	   case DOWN	:	{FormerState=MCUState; 	MCUState=LCD_DISPLAY;}
	   case BACK	:	{FormerState=MCUState; 	MCUState=WORKING;}
	   default		:	;
	   }
  case SAVE_DATA_YES:
  	   switch(Pressed_Key)
  	   {
   	   case UP		:	{FormerState=MCUState; 	MCUState=SAVE_DATA_NO;}
   	   case MENU	:	{FormerState=MCUState; 	MCUState=TIME_SCALE;  TimeScale=5;}//进入TIME_SCALE状态前把TimeScale初始化为5
	   case DOWN	:	{FormerState=MCUState; 	MCUState=SAVE_DATA_NO;}
	   case BACK	:	{FormerState=MCUState; 	MCUState=LCD_DISPLAY;}
	   default		:	;
	   }
  case SAVE_DATA_NO :
  	   switch(Pressed_Key)
  	   {
   	   case UP		:	{FormerState=MCUState; 	MCUState=SAVE_DATA_YES;}
   	   case MENU	:	{FormerState=MCUState; 	MCUState=WORKING;}
	   case DOWN	:	{FormerState=MCUState; 	MCUState=SAVE_DATA_YES;}
	   case BACK	:	{FormerState=MCUState; 	MCUState=LCD_DISPLAY;}
	   default		:	;
	   }
  case TIME_SCALE	:
	   switch(Pressed_Key)
  	   {
   	   case UP		:	{if(TimeScale<60)
	   					 TimeScale+=5;	 		//TimeScale的上限为60S,下限为5S
						 else
						 TimeScale=60;
						 }
   	   
	   case MENU	:	{FormerState=MCUState; 	MCUState=WORKING;}
	   case DOWN	:	{if(TimeScale>5)
	   					 TimeScale-=5;
						 else
						 TimeScale=5;
						 }
	   
	   case BACK	:	{FormerState=MCUState; 	MCUState=SAVE_DATA_YES;}
	   default		:	;
	   }
   }
   
   //根据MCUState 决定当前LCD的显示,在此区分 初始显示 和 刷新显示
   switch(MCUState)
  {
  case WORKING	   	:		Show_Temp();
  case TIME_SCALE	:		Show_Time_Scale();
  default			:				;
  }
   
   //根据中断后的状态显示液晶,初始显示过的,在此刷新显示
   Show_LCD();
}
 
 
void main()
{
 
 //键盘接法为PD3-UP		  PD2-MENU	   PD1-DOWN		PD0-BACK
 
// 正式使用时打开这段代码,设置键盘
 /*
 SEI();	 		   		   	//在SREG中打开全局中断
 PORTD=0xff;
 DDRD=0x00;					//四个中断配置为输入
 EIFR=0xff;					//外部中断标志寄存器清零
 EICRA=0x00;				//四个外部中断全部配置为低电平触发中断
 EIMSK=0x0f;				//打开外部中断3~0
 */			
 
 /*正式使用时打开这段代码
 Show_LCD();				//初始化LCD自动显示主菜单
 switch(MCUState)			//进入相应的工作模式函数
 {
  case WORKING	   	:LCD_mode();
  case 				:PC_mode();
  case				:OTG_mode();
 }
 */

  Delay(1);	
// SaveTemp(); 
 LCD_mode();
 }

⌨️ 快捷键说明

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