单片机C语言编程问题。怎么实现按键切换两个子程序啊。。(时钟和温度)

单片机C语言编程问题。怎么实现按键切换两个子程序啊。。(时钟和温度),第1张

应该用一个标志位,如果你这种是普通的按键,即按下时是低电平,松开时是高电平的,大概这样写,在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语言子程序什么意思等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9613416.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存