📄 main._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 + -