关于51单片机按键选择定时器中断不同时间的算法问题

weixin_41397331 2017-12-15 02:09:47
为什么不能实现选择温度传感器记录温度的时间,是算法的错,还是那里没有注意到!
欢迎各位大佬解惑!
感谢!
以下是部分代码:

#include "common.h"
#include "timer.h"
#include "display.h"
#include "ds18b20.h"
#include "ds1302.h"


/**********************
温度记录时间标志
**********************/
bit Ds18b20_1,Ds18b20_2,Ds18b20_3,Ds18b20_4;
/*********************
选择温度时间标志的中转数
*********************/
uchar Ds18b20_num=0;
/**********************
键盘扫描的标志位
*********************/
bit Key_S4,Key_S5,Key_S6,Key_S7;
/*********************
设置温度记录时间的数组
*********************/
uchar code S4_Data[4]={1,5,30,60};

uchar keyValue,Trg,Cont;
/**********************
S4按下次数
**********************/
uchar S4_number=0;
uchar j=1;
/**********************
S6按下次数
**********************/
uchar S6_number=0;
uchar z=0;
/**********************
键盘扫描函数
**********************/
uchar KeyScan()
{
static uchar k=0;
P3=0xff;
keyValue=P3^0xff;
Trg=keyValue&(keyValue^Cont);
Cont=keyValue;

switch(Trg)
{
case 0x01:
{k=1;break;}
case 0x02:
{
k=2;
z++;
if(z==11)
{z=1;}
S6_number=z-1;
break;
}
case 0x04:
{
k=3;
Ds1302_Reset();
break;
}
case 0x08:
{
k=4;
j++;
if(j==6)
{j=2;}
S4_number=j-2;
break;
}
}
return (k);
}
/************************
实现S4选择记录温度的时间
************************/
void S4Scan()
{
uchar S4Temp;

switch(S4_number)
{
case 0:
{
Ds18b20_num=1;
break;
}
case 1:
{
Ds18b20_num=2;
break;
}
case 2:
{
Ds18b20_num=3;
break;
}
case 3:
{
Ds18b20_num=4;
break;
}
default:
{
Ds18b20_num=5;break;
}
}
S4Temp=Ds18b20_num;
//选择不同时间的标志
if(S4Temp==1)
{Ds18b20_1=1;Ds18b20_2=0;Ds18b20_3=0;Ds18b20_4=0;}
else if(S4Temp==2)
{Ds18b20_1=0;Ds18b20_2=1;Ds18b20_3=0;Ds18b20_4=0;}
else if(S4Temp==3)
{Ds18b20_1=0;Ds18b20_2=0;Ds18b20_3=1;Ds18b20_4=0;}
else if(S4Temp==4)
{Ds18b20_1=0;Ds18b20_2=0;Ds18b20_3=0;Ds18b20_4=1;}
else
{Ds18b20_1=0;Ds18b20_2=0;Ds18b20_3=0;Ds18b20_4=0;;}
//执行不同时间记录温度的函数
if(Ds18b20_1)
{
if(TimeDelay1s)
{
TimeDelay1s=0;
ReadTemp();
TempFlash();
}
}
else if(Ds18b20_2)
{
if(TimeDelay5s)
{
TimeDelay5s=0;
ReadTemp();
TempFlash();
}
}
else if(Ds18b20_3)
{
if(TimeDelay30s)
{
TimeDelay30s=0;
ReadTemp();
TempFlash();
}
}
else if(Ds18b20_4)
{
if(TimeDelay60s)
{
TimeDelay60s=0;
ReadTemp();
TempFlash();
}
}
else
{;}
}
/************************
键盘控制函数
************************/
void KeyControl()
{
uchar keyData;
//键盘扫描 防抖程序
if(TimeDelay500ms_Key)
{
TimeDelay500ms_Key=0;
keyData=KeyScan();
if(keyData==4)
{Key_S4=1;Key_S5=0;Key_S6=0;Key_S7=0;}
if(keyData==3)
{Key_S4=0;Key_S5=1;Key_S6=0;Key_S7=0;}
if(keyData==2)
{Key_S4=0;Key_S5=0;Key_S6=1;Key_S7=0;}
if(keyData==1)
{Key_S4=0;Key_S5=0;Key_S6=0;Key_S7=1;}
}

//S4功能
if(Key_S4)
{
Disp_Dec[0]=8;
Disp_Dec[1]=8;
Disp_Dec[2]=8;
Disp_Dec[3]=8;
Disp_Dec[4]=8;
Disp_Dec[5]=10;
Disp_Dec[6]=S4_Data[S4_number]/10;
Disp_Dec[7]=S4_Data[S4_number]%10;
DisplayFlash();

}

//S5功能
else if(Key_S5)
{


Disp_Dec[0]=hour>>4;
Disp_Dec[1]=hour&0x0f;
Disp_Dec[2]=10;
Disp_Dec[3]=min>>4;
Disp_Dec[4]=min&0x0f;
Disp_Dec[5]=10;
Disp_Dec[6]=sec>>4;
Disp_Dec[7]=sec&0x0f;

DisplayFlash();

S4Scan();

}

//S6功能
else if(Key_S6)
{
Disp_Dec[0]=10;
Disp_Dec[1]=z/10;
Disp_Dec[2]=z%10;
Disp_Dec[3]=0;
Disp_Dec[4]=0;
Disp_Dec[5]=10;
Disp_Dec[6]=GetTemperature[S6_number]/10;
Disp_Dec[7]=GetTemperature[S6_number]%10;

DisplayFlash();
}

//S7功能
else if(Key_S7)
{
Disp_Dec[0]=11;
Disp_Dec[1]=11;
Disp_Dec[2]=11;
Disp_Dec[3]=11;
Disp_Dec[4]=11;
Disp_Dec[5]=10;
Disp_Dec[6]=0;
Disp_Dec[7]=1;
DisplayFlash();
}
else
{;}

}
...全文
382 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangyang524 2017-12-16
  • 打赏
  • 举报
回复
什么叫记录温度的时间?
weixin_41397331 2017-12-16
  • 打赏
  • 举报
回复
引用 1楼yangyang524 的回复:
什么叫记录温度的时间?
比如我按下s4 看按下s4几次 1次对应1s记录一次温度数据 2次对应5s记录一次温度数据

27,381

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧