找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

请教单片机1-9小时定时程序怎样加启动和停止?

查看数: 2428 | 评论数: 5 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2023-9-20 11:53

正文摘要:

试着写了单片机程序,但不知如何加人启动和停止,定时器TR0为什么不能被其它函数调用呢?

回复

ID:195496 发表于 2023-9-28 08:33
很简单,按键控制一个变量,再去判断是否启动定时,关定时后,重按启动,清除原来的计时值,重启定时器,不难
ID:213173 发表于 2023-9-27 20:25
此2变量要加关键字static 为静态或声明全局变量,否则会乱套。
void Timer0_Rountiue() interrupt 1 //中断程序
{
        static unsigned char tem_ms;
        static unsigned int tem_s; //1秒
ID:642276 发表于 2023-9-27 12:10
/*
uint8        time10ms_count = 0;
uint8        time1s_count = 0;
bit                time10ms_flag = 0;
bit                time1s_flag = 0;
定时中断函数  //1ms进入一次
{
        if(++time10ms_count>10)
        {
                time10ms_count = 0;
                time10ms_flag = 1;                //10ms标志
                if(++time1s_count>100)
                {
                        time1s_count = 0;
                        time1s_flag = 1;        //1s标志
                }
        }
}
uint8        key_value = 0;
uint8        key_count = 0;
bit         key_flag = 0;
按键判断函数  //10ms跑一次
{
        if(!key)
        {
                if(key_count<100)
                {
                        if(++key_count>100)
                        {
                                key_count = 100;
                                key_flag = !key_flag;                //长按启动 暂停标志
                        }                       
                }
        }
        else
        {
                if(key_count>2&&key_count<50)                //按下时间大于20ms小于500ms判断为点击
                {
                        if(++key_value>9)                //键值加加
                                key_value = 0;
                }
                key_count = 0;               
        }
}
uint8 time = 0;
uint16 time_count = 0;
uint8        time_s = 0;
定时时间函数  //1s跑一次
{
        if(key_value==time)
        {
                ;
        }
        else
        {
                time_s = 0;                //重新计时
                time = key_value;        //赋值定时
        }
        if(time>0)               
        {
                if(++time_count>3600)
                {
                        time_count = 0;
                        if(++time_s>=time)
                        {
                                time_s = 0;        //定时时间到

                        }
                }
        }
}

void main()
{
        while(1)
        {
                if(time10ms_flag)
                {
                        time10ms_flag = 0;
                        按键判断函数 ; //10ms跑一次
                }
                if(time1s_flag)
                {
                        time1s_flag = 0;
                        if(key_flag)                //启动
                                定时时间函数 ; //1s跑一次
                        else  //停止
                        //可以清除定时之类的
                }
        }
}

*/
ID:123289 发表于 2023-9-21 09:14
先画个逻辑框图,理理思路,而后再写程序。
ID:140644 发表于 2023-9-20 12:08
比较啊==  >=  <=

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表