久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2437|回復: 5
打印 上一主題 下一主題
收起左側

請教單片機1-9小時定時程序怎樣加啟動和停止?

[復制鏈接]
跳轉到指定樓層
樓主
試著寫了單片機程序,但不知如何加人啟動和停止,定時器TR0為什么不能被其它函數調用呢?


#include <REGX52.H>
#include<intrins.h>
#include"Delay.h" //延時函數申明
unsigned char tem_key=0; //按鍵+次數
unsigned char tem_min;//1分
unsigned char tem; //中間變量
unsigned char        timing_time; //定時時間
sbit key=P1^0; //按鍵定義
sbit LED=P1^1; //定時工作指示

unsigned char smgxs[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//數碼管編碼

void Key()  //按鍵函數
{
        if(key==0)
         {
                 Delay(20);
                 while(key==0);
                 Delay(20);
                 tem_key++;
               
         if(tem_key>=10)  //0-9值循環
                {
                        tem_key=0;
                }
                 tem=tem_key;
                 timing_time=(tem*60); //顯示值*60分鐘
        }
}
void T0Init(void)                //50毫秒@11.0592MHz
{
        TMOD=0x01;                //設置定時器模式
        TL0 = 0x00;                //設置定時初始值
        TH0 = 0x4C;                //設置定時初始值
        TF0 = 0;        //清除TF0標志
        ET0=1;
        EA=1;
        TR0 = 1;                //T0開始計時
}
void Timer0_Rountiue() interrupt 1 //中斷程序
{
        unsigned char tem_ms;
        unsigned int tem_s; //1秒
        TL0 = 0x00;                //重裝初始值
        TH0 = 0x4C;                //重裝初始值
        tem_ms++;
        if(tem_ms==20)
        {
                tem_s++; //秒
                tem_ms=0;
                LED=~LED;
        }
        if(tem_s==3600)
        {
                tem_min++;  //分
                tem_s=0;
        }
}
void main()
{
        T0Init(); //T0初始化
        while(1)
        {
                Key();
                P0=smgxs[tem_key]; //顯示送P0
                if(timing_time==tem_min) //時間到
                {
                        tem_min=0; //時間到清零
                        //執行程序。。。
                }
        }
}

75行加上定時器沒起作用,開機就執行程序了,是什么原因?








分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:140644 發表于 2023-9-20 12:08 | 只看該作者
比較啊==  >=  <=
回復

使用道具 舉報

板凳
ID:123289 發表于 2023-9-21 09:14 | 只看該作者
先畫個邏輯框圖,理理思路,而后再寫程序。
回復

使用道具 舉報

地板
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  //停止
                        //可以清除定時之類的
                }
        }
}

*/
回復

使用道具 舉報

5#
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秒
回復

使用道具 舉報

6#
ID:195496 發表于 2023-9-28 08:33 | 只看該作者
很簡單,按鍵控制一個變量,再去判斷是否啟動定時,關定時后,重按啟動,清除原來的計時值,重啟定時器,不難
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天堂中文在线视频 | 午夜视频一区 | 亚洲性天堂 | 天天色小说 | 国产黄色免费 | 国产又色又爽又黄又免费 | 天天草天天干 | 亚洲一级二级三级 | 日韩中文一区 | 日本黄色视屏 | 一区二区欧美日韩 | 宅男噜噜噜66一区二区 | 伊人av综合 | 天天操天天插 | 欧美一区二区在线观看 | 狠狠躁夜夜躁人爽 | 欧美日韩激情 | 黄色一级网站 | 看av| 精品国产99久久久久久宅男i | 中国美女乱淫免费看视频 | 午夜网站在线观看 | 黄网在线免费观看 | 欧美在线天堂 | 精品视频国产 | 国产成人免费视频 | 精品视频久久 | 免费毛片在线 | 日韩一级大片 | 黄色一级生活片 | 成人激情视频网 | 五月婷婷色 | 日韩在线高清 | 成人在线免费视频观看 | 成人做爰免费视频免费看 | 欧美一区二区三区视频 | 69免费视频 | 欧美综合视频 | 一级大片免费看 | 四虎影视av| 亚洲三级小说 |