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

標題: 單片機延時程序怎么寫? [打印本頁]

作者: hjx5548    時間: 2022-11-15 01:13
標題: 單片機延時程序怎么寫?
main()

while(1)

if(KEY=0)
P10=0;
延時兩秒;
LED1=0;
延時一秒;
LED2=0;
if(KEY=0沒有變化)
則延時15分鐘;
LED3=!0;
LED1=1;LED2=1;

if(KEY=1)
LED1=1;
LED2=1;
LED4=0;


要求實現功能如下:1、如果開關沒有接通,LED1燈亮,延時兩秒后,LED2燈亮;如果15分鐘后,開關還是沒有接通,則LED3閃爍。LED1、LED2就熄滅。
2、只要開關接通,LED1、LED2就熄滅。LED4燈亮。
以上代碼能不能實現這個功能。
作者: yzwzfyz    時間: 2022-11-15 09:04
閃:你做不到:
1、LED3=!0,即=1,僅關而矣!!
2、閃是亮一斷時間,暗一段時間,如此不斷交替。你亮了多久,又暗了多久,交替了嗎?
教你定時的方法:
1、起動一個定時器,并使用之10ms中斷一次。
2、設置一個標記B_1S,它=1就表示時間到了,=0就表示時間未到。不用時清0,表示時間未到。
3、設置一個計時變量R_1S,開始設置成100,準備計時1S。
4、每次中斷,查看R_1S:
=0,表示:計時未開始,不需要計時。跳過。
<>0,表示計時進行中,就將R_1S-1。減到0時,就將B_1S置1,表示1S到了。未減到0時,1S未到,跳過。
5、主程序中:當需要計時時(開啟計時),就讓R_1S=100,1S計時就開始。
6、判斷B_1S,就知道1S是不是到了,B_1S=1時,就做你要做的事,做完后記得將B_1S清0,防止重再復做。
如果還需要2S、15M,如法炮制:B_2S、R_2S、B_15M、R_15M。簡單吧。
主程序中,延時一秒:IF 一秒,變成 IF B_1S=1,就成了。

閃動:就做一個0.5S的計時器,B_05S,R_05S。
同樣:當B_05=1時,就讓 LED3 = !LED3,再讓B_05=0,R_05=50,0.5S就再次計時開始了。這樣LED3 就閃動了。

寫程序,要先構思如何達成目的,而后再開始寫代碼。
思路沒有,不正確,自己都解釋不通,程序如何寫得呢?
作者: lkc8210    時間: 2022-11-15 10:51


作者: hjx5548    時間: 2022-11-15 17:29
yzwzfyz 發表于 2022-11-15 09:04
閃:你做不到:
1、LED3=!0,即=1,僅關而矣!!
2、閃是亮一斷時間,暗一段時間,如此不斷交替。你亮了 ...

謝謝指點
作者: hjx5548    時間: 2022-11-15 17:31
lkc8210 發表于 2022-11-15 10:51

謝謝指點,延時是否可以用定時器做
作者: 非凡科技    時間: 2022-11-15 18:59
幫人幫到底 目前這個原因閑得蛋疼 給你寫好了,我也是菜雞,見笑了,我用STC給你寫的  用的定時器實現你的功能


#include "STC15F104E.H"  //單片機頭文件
#define u16 unsigned int //宏定義無符號整型數據
#define u8 unsigned char //宏定義無符號字符型數據

sbit key_sr = P3 ^ 4;
sbit LED_1 = P3 ^ 5;
sbit LED_2 = P3 ^ 0;
sbit LED_3 = P3 ^ 1;
sbit LED_4 = P3 ^ 2;
u8 key_flag = 0;
void SYSTEM_INIT()
{
    P3M1 = 0x00;
    P3M0 = 0x27; // P3(雙雙推雙雙推推推)
    LED_1 = 1;
    LED_2 = 1;
    LED_3 = 1;
    LED_4 = 1;
}
void key_scan()
{
    static u8 cnt = 0;
    if (key_sr)
    {
        cnt = 0;
        key_flag = 0;
    }
    else if (!key_flag)
    {
        cnt++;
        if (cnt > 200)
        {
            key_flag = 1;
        }
    }
}
void LED_serve()
{
    static u8 ms50_cnt = 0;
    static u8 min_cnt = 0;  //分鐘計數
    static u8 min2_cnt = 0; // 2分鐘計時
    static u8 blink_flag = 0;
    static u8 blink_cnt = 0;
    if (!blink_flag)
    {
        if (!key_flag) //開關斷開
        {
            LED_1 = 0;
            LED_4 = 1;
        }
        if (!LED_1 && LED_2) //兩秒后點亮LED2
        {
            if (++min2_cnt >= 40) //兩秒計時到
            {
                min2_cnt = 0;
                LED_2 = 0;
            }
        }
        if (!LED_2)
        {

            if (++ms50_cnt >= 200) // 10秒
            {
                ms50_cnt = 0;
                min_cnt++;
            }
            if (min_cnt >= 90) // 900秒=15分
            {

                blink_flag = 1; //閃燈標志
            }
        }
    }
    if (key_flag) //開關接通
    {
        ms50_cnt = 0;
        min_cnt = 0;
        blink_flag = 0;
        LED_1 = 1;
        LED_2 = 1;
        LED_4 = 0;
    }
    if (blink_flag) //閃燈500毫秒一次
    {
        LED_1 = 1;
        LED_2 = 1;
        blink_cnt++;
        if (blink_cnt <= 10)
        {
            LED_3 = 0;
        }
        else
            LED_3 = 1;
        if (blink_cnt >= 20)
        {
            blink_cnt = 0;
        }
    }
    else
    {
        blink_cnt = 0;
        LED_3 = 1;
    }
}
void Timer0Init(void) // 50毫秒@11.0592MHz
{
    AUXR &= 0x7F; //定時器時鐘12T模式
    TMOD &= 0xF0; //設置定時器模式
    TL0 = 0x00;   //設置定時初始值
    TH0 = 0x4C;   //設置定時初始值
    TF0 = 0;      //清除TF0標志
    TR0 = 1;      //定時器0開始計時
    EA = 1;
    ET0 = 1;
}

/***************主程序****************/
void main()
{
    SYSTEM_INIT();
    Timer0Init();

    while (1)
    {
        key_scan();
    }
}

void timer0() interrupt 1
{
    LED_serve();
}

作者: hjx5548    時間: 2022-11-16 07:52
非凡科技 發表于 2022-11-15 18:59
幫人幫到底 目前這個原因閑得蛋疼 給你寫好了,我也是菜雞,見笑了,我用STC給你寫的  用的定時器實現你的功能 ...

先謝謝了,功能沒有實現,接通電源,指示燈一個都不亮,開關動作不起作用。
作者: 非凡科技    時間: 2022-11-16 08:33
hjx5548 發表于 2022-11-16 07:52
先謝謝了,功能沒有實現,接通電源,指示燈一個都不亮,開關動作不起作用。

檢查硬件  這個我用開發板實驗很正常




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产精品久久久久久久久久久免费看 | 亚洲精品久久久久中文字幕欢迎你 | 久久成人久久 | 久在线| 日本高清视频在线播放 | 欧美久久久久久久 | av免费看片| 久久99精品久久久久久国产越南 | 蜜桃在线播放 | 久久国内| 国产精品视频久久久 | 免费毛片www com cn | 天天干天天操天天射 | www.亚洲一区二区三区 | 亚洲国产精品视频一区 | 最新国产在线 | 国产成人精品一区二区三区 | 狠狠综合久久av一区二区老牛 | 超碰男人天堂 | 日韩一区二区在线免费观看 | 中文字幕精品一区 | 国产情侣啪啪 | 亚洲成人自拍 | 国产精品久久久久一区二区 | 日日干夜夜操天天操 | 日本午夜网站 | 91精品久久久久久久久99蜜臂 | 国产精品色一区二区三区 | 夜久久| 亚洲国产日本 | 九九综合九九 | 三级视频在线观看 | 三级成人在线 | 国产精品高潮呻吟久久 | 久久久国产一区二区三区 | 91精品久久久 | 亚洲国产精品一区 | 精品中文字幕一区二区三区 | 亚洲性视频 | 日韩av一区在线观看 | 亚洲精品中文字幕av |