应该用一个标志位,如果你这种是普通的按键,即按下时是低电平,松开时是高电平的,大概这样写,在main声明一个变量,作为标志位
char Flag;
然后按键按下时,直到d起按键才改变Flag的状态。
if(!Key)
{
while(!Key);
Flag=~Flag;
}
if(Flag)
{
time = hour100 + min;
ShowTest(time);
delay();
}
else
{
gettempts();
display(t);
}
把这个放在while(1)中,就可以了。
希望我的回答对你有帮助,有什么问题欢迎一起探讨。
晶振频率Fosc=12MHz,则机械周期 T=12/Fosc=1us;程序中 的 自加(++)、自减(--) 的执行周期为1个机械周期,即1us;
若为 理想状态,则delay(500000)的时间应该是:500000×1us=500ms;
但是,编译软件 要把 函数调用、for 语句转换成 机器指令,这是需要一定周期的,周期长短 视不同的编译软件 而有所不同,目前也没人对这个 转换差别 做过 专业的考量,故LZ 的问题,没有确切 的答案,只能 是告诉 你,大于某个时间;如例子 的答案是 大于 500ms,但大到什么程度,不知道,不过可以从 软件中 单步调试 中 得到。
union
{
//这个是共用体,定义的这两个成员共用内存中的一块区域
uchar
fc[2];
uint
fi;
}frecy;//定义了一个共用体变量frecy,定义时要特别注意末尾的分号
//定义测频率的函数,返回数据类型为uint,C语言中无此数据类型,有可能是你用#define自定义的
uint
freq(void)
{
ulint
f;
TR0=1;
//启动T0
TR1=1;
while(cnt<20);
cnt=0;
TR0=0;
TR1=0;
frecyfc[0]=TH1;//为共用体变量frecy中的成员数组赋值fc[0]是此数组的第一个元素
frecyfc[1]=TL1;//同上,fc[1]是此数组的第二个元素
f=frecyfi;//把frecyfi的值赋值给f变量,由于这里是共用体,所以frecyfi的值会是recyfc[0]、recyfc[1]的组合,具体是怎样的,得要看uchar、uint数据类型占用内存字节的情况
TH0=-(46802/256);//除法运算后取相反数
TL0=-(46802%256);//未余运算后取相反数
TH1=0x00;//赋值 *** 作,0x00是十六进制数
TL1=0x00;
return
f;//返回值
}
//如还有疑问可以给我留言,发详细的完整代码我们来讨论
以上就是关于单片机C语言编程问题。怎么实现按键切换两个子程序啊。。(时钟和温度)全部的内容,包括:单片机C语言编程问题。怎么实现按键切换两个子程序啊。。(时钟和温度)、请教关于单片机C语言中用while延时的问题、求解这个C语言子程序什么意思等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)