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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機延時程序怎么寫?

[復制鏈接]
跳轉到指定樓層
樓主
ID:72649 發表于 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燈亮。
以上代碼能不能實現這個功能。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:123289 發表于 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 就閃動了。

寫程序,要先構思如何達成目的,而后再開始寫代碼。
思路沒有,不正確,自己都解釋不通,程序如何寫得呢?
回復

使用道具 舉報

板凳
ID:161164 發表于 2022-11-15 10:51 | 只看該作者

回復

使用道具 舉報

地板
ID:72649 發表于 2022-11-15 17:29 來自觸屏版 | 只看該作者
yzwzfyz 發表于 2022-11-15 09:04
閃:你做不到:
1、LED3=!0,即=1,僅關而矣!!
2、閃是亮一斷時間,暗一段時間,如此不斷交替。你亮了 ...

謝謝指點
回復

使用道具 舉報

5#
ID:72649 發表于 2022-11-15 17:31 來自觸屏版 | 只看該作者
lkc8210 發表于 2022-11-15 10:51

謝謝指點,延時是否可以用定時器做
回復

使用道具 舉報

6#
ID:101869 發表于 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();
}
回復

使用道具 舉報

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

先謝謝了,功能沒有實現,接通電源,指示燈一個都不亮,開關動作不起作用。
回復

使用道具 舉報

8#
ID:101869 發表于 2022-11-16 08:33 來自觸屏版 | 只看該作者
hjx5548 發表于 2022-11-16 07:52
先謝謝了,功能沒有實現,接通電源,指示燈一個都不亮,開關動作不起作用。

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产免费va | 精品一级电影 | 久久国产精品久久久久 | 中国一级特黄视频 | 午夜伦理影院 | 亚洲视频在线播放 | 亚洲成人av | 欧美在线不卡 | 亚洲一区二区中文字幕在线观看 | 亚洲小说图片 | 国产精品一区三区 | 久久久片 | 欧美在线观看免费观看视频 | 国产精品久久久久久久久久久久午夜片 | 亚洲男人网 | 99精品视频在线观看免费播放 | 免费观看a级毛片在线播放 黄网站免费入口 | 成人免费在线播放视频 | 在线视频国产一区 | 久久久久一区二区 | 天天干天天草 | 福利视频二区 | 一区二区三区日 | 一级少妇女片 | 国产精品2 | 亚洲最新在线视频 | 草草在线观看 | 国产精品永久在线观看 | 日韩精品视频在线观看一区二区三区 | 日韩av免费在线观看 | 国久久| 久久av一区 | 国产精品久久久久一区二区三区 | 久久男女视频 | 99re热精品视频 | 精品国产欧美一区二区三区成人 | 手机在线一区二区三区 | 国产一区免费视频 | 欧美成人a∨高清免费观看 色999日韩 | 中文字幕在线三区 | 国产精品久久久久久亚洲调教 |