基于80c51单片机自动温度测量AD转换报警按键程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include "reg51.h"
#include "KEY.h"
#include "SMG.h"
#include "Vol_Measure.h"
#include "X25045.h"
sbit KEY = P1^5;
uchar Channel=1; 默认通1
uchar SETTING=0; 系统状态标志
uchar SET_FLAG=0; 设置状态标志
按键功能函数
void Key_Func(void)
{
static uchar count=0;
char TH=0,TL=0; 山下限
switch(key_scan())
{
case 1 ESC键
{
SETTING=1; 系统进入设置状态
SET_FLAG=SET_TH; 默认设置上限
break;
}
case 2 Enter键
{
if(SETTING) 进入系统设置状态
{
count++;
switch(count)
{
case 1 SET_FLAG=SET_TL;break; 第一次设置上限
case 2 SETTING=0;count=0;break; 第二次退出设置
}
}
break;
}
case 3
{
if(SETTING) 进入系统设置
{
if(SET_FLAG==SET_TH) 上限设置
{
switch(Channel)
{
case 1
{
TH=Read_Data(TH1_Address,0);
TL=Read_Data(TL1_Address,0);
TH-=1; 上限减0.1V
if(THTL) 上限大于下限,则设置新上限
Write_Data(TH,TH1_Address,0);
break;
}
case 2
{
TH=Read_Data(TH2_Address,0);
TL=Read_Data(TL2_Address,0);
TH-=1; 上限减0.1V
if(THTL) 上限大于下限,则设置新上限
Write_Data(TH,TH2_Address,0);
break;
}
case 3
{
TH=Read_Data(TH3_Address,0);
TL=Read_Data(TL3_Address,0);
TH-=1; 上限减0.1V
if(THTL) 上限大于下限,则设置新上限
Write_Data(TH,TH3_Address,0);
break;
}
case 4
{
TH=Read_Data(TH4_Address,0);
TL=Read_Data(TL4_Address,0);
TH-=1; 上限减0.1V
if(THTL) 上限大于下限,则设置新上限
Write_Data(TH,TH4_Address,0);
break;
}
}
}
else if(SET_FLAG==SET_TL) 下限设置
{
switch(Channel)
{
case 1
{
TH=Read_Data(TH1_Address,0);
TL=Read_Data(TL1_Address,0);
TL-=1; 下限减0.1V
if(TL=0) 下限不小于零,则设置新下限
Write_Data(TL,TL1_Address,0);
break;
}
case 2
{
TH=Read_Data(TH2_Address,0);
TL=Read_Data(TL2_Address,0);
TL-=1; 上限减0.1V
if(TL=0) 下限不小于零,则设置新下限
Write_Data(TL,TL2_Address,0);
break;
}
case 3
{
TH=Read_Data(TH3_Address,0);
TL=Read_Data(TL3_Address,0);
TL-=1; 下限减0.1V
if(TL=0) 下限不小于零,则设置新下限
Write_Data(TL,TL3_Address,0);
break;
}
case 4
{
TH=Read_Data(TH4_Address,0);
TL=Read_Data(TL4_Address,0);
TL-=1; 下限减0.1V
if(TL=0) 下限不小于零,则设置新下限
Write_Data(TL,TL4_Address,0);
break;
}
}
}
}
else 退出系统设置
{
Channel--;
if(Channel1)
{
Channel=4;
}
Select_Channel(Channel);
}
break;
}
case 4
{
if(SETTING) 进入系统设置
{
if(SET_FLAG==SET_TH) 上限设置
{
switch(Channel)
{
case 1
{
TH=Read_Data(TH1_Address,0);
TL=Read_Data(TL1_Address,0);
TH+=1; 上限加0.1V
if(TH=50) 上限不大于5.0V,则设置新上限
Write_Data(TH,TH1_Address,0);
break;
}
case 2
{
TH=Read_Data(TH2_Address,0);
TL=Read_Data(TL2_Address,0);
TH+=1; 上限加0.1V
if(TH=50) 上限不大于5.0V,则设置新上限
Write_Data(TH,TH2_Address,0);
break;
}
case 3
{
TH=Read_Data(TH3_Address,0);
TL=Read_Data(TL3_Address,0);
TH+=1; 上限加0.1V
if(TH=50) 上限不大于5.0V,则设置新上限
Write_Data(TH,TH3_Address,0);
break;
}
case 4
{
TH=Read_Data(TH4_Address,0);
TL=Read_Data(TL4_Address,0);
TH+=1; 上限加0.1V
if(TH=50) 上限不大于5.0V,则设置新上限
Write_Data(TH,TH4_Address,0);
break;
}
}
}
else if(SET_FLAG==SET_TL) 下限设置
{
switch(Channel)
{
case 1
{
TH=Read_Data(TH1_Address,0);
TL=Read_Data(TL1_Address,0);
TL+=1; 下限减0.1V
if(TLTH) 下限小于上限,则设置新下限
Write_Data(TL,TL1_Address,0);
break;
}
case 2
{
TH=Read_Data(TH2_Address,0);
TL=Read_Data(TL2_Address,0);
TL+=1; 下限减0.1V
if(TLTH) 下限小于上限,则设置新下限
Write_Data(TL,TL2_Address,0);
break;
}
case 3
{
TH=Read_Data(TH3_Address,0);
TL=Read_Data(TL3_Address,0);
TL+=1; 下限减0.1V
if(TLTH) 下限小于上限,则设置新下限
Write_Data(TL,TL3_Address,0);
break;
}
case 4
{
TH=Read_Data(TH4_Address,0);
TL=Read_Data(TL4_Address,0);
TL+=1; 下限减0.1V
if(TLTH) 下限小于上限,则设置新下限
Write_Data(TL,TL4_Address,0);
break;
}
}
}
}
else 退出系统设置
{
Channel++;
if(Channel4)
{
Channel=1;
}
Select_Channel(Channel);
}
break;
}
default
break;
}
}
uchar key_scan(void)
{
static uchar key_state = 0;
static uchar key_input = 0;
uchar key_return = 0;
uchar key_press = 0;
P2=key_input;
switch(key_state)
{
case key_state_0 按键初始态。
{
key_input++; 扫描下一按键
if(KEY)
{
key_state = key_state_1;有键按下则转入按键确认状态。
key_input-=1; 若检测到按键按下,保持选中该按键}
break;
}
case key_state_1 按键确认态。
{
if(KEY)
{
key_state = key_state_2; 切换到按键释放状态
key_return = key_input+1;
}
else
{
key_state = key_state_0;按键抖动,切换到初始态
key_input++; 按键抖动,扫描下一按键
}
break;
}
case key_state_2 按键释放态。
{
if(!KEY)
{
key_state = key_state_0; 按键释放,切换到初始态。
key_input++; 按键释放,扫描下一按键
}
break;
}
}
if(key_input4)
{
key_input=0;
}
return key_return;
}。