找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1138|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

單片機使用定時器中斷控制LED先200ms閃爍三次,再500ms閃爍三次,再200ms....

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1130312 發(fā)表于 2024-8-12 17:02 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
要求使單片機的定時器中斷控制LED先200ms閃爍三次,再500ms閃爍三次,再200ms閃爍三次,跪求一下思路
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:1109793 發(fā)表于 2024-8-13 07:32 | 只看該作者
弄個計數(shù)器,每50毫秒++,然后在計數(shù)器==2時反轉(zhuǎn)輸出,==4再反轉(zhuǎn),然后==6再反轉(zhuǎn),……==10再反轉(zhuǎn),==15再反轉(zhuǎn)……
回復(fù)

使用道具 舉報

板凳
ID:364201 發(fā)表于 2024-8-13 08:03 | 只看該作者
定義三個變量就可以了
回復(fù)

使用道具 舉報

地板
ID:137736 發(fā)表于 2024-8-13 11:33 | 只看該作者
定義三個變量,在定時器中斷中累加。主程序循環(huán)判定三個變量,到時間清零并反轉(zhuǎn)LED電平。
回復(fù)

使用道具 舉報

5#
ID:1130484 發(fā)表于 2024-8-13 21:58 | 只看該作者
本帖最后由 xing_121 于 2024-8-14 20:01 編輯

思路:設(shè)個變量j,j為Led閃爍的次數(shù),將j平分,每部分為6,即不管200ms還是500msLed都會閃爍三次(亮燈加上滅燈為一次),然后定義i,為200ms和500ms的時間標(biāo)志位,每次輪完一次大周期,記得要清零,不過j不能等于0,因為j是從1開始計的。

#include <reg52.h>

sbit Led = P2^0;

/*********
函 數(shù) 名:void Timer0Init(void)
函數(shù)功能:初始化
參    數(shù):none
返    回:none
**********/
void Timer0Init(void)                //1毫秒@12.000MHz
{
        TMOD &= 0xF0;                //設(shè)置定時器模式
        TMOD |= 0x01;                //設(shè)置定時器模式
        TL0 = 0x18;                //設(shè)置定時初始值
        TH0 = 0xFC;                //設(shè)置定時初始值
        TF0 = 0;                //清除TF0標(biāo)志
        TR0 = 1;                //定時器0開始計時
        ET0 = 1;
        EA = 1;
}

void main()
{
        Timer0Init();
        while(1);
}

/**********
函 數(shù) 名:void Timer0() interrupt 1
函數(shù)功能:
參    數(shù):none
返    回:none
*********/
void Timer0() interrupt 1  //1ms
{
        static unsigned char j=1;
        static unsigned int i;
        
        TL0 = 0x18;                //設(shè)置定時初始值
        TH0 = 0xFC;                //設(shè)置定時初始值
        if(j <= 6)
        {
                if(++i >= 200)
                {
                        i = 0;
                        j++;
                        Led =~ Led;
                }
        }
        else
        {
                if(++i >= 500)
                {
                        i = 0;
                        j++;
                        Led =~Led;
                }
        }
        if(j > 12)
        {
                j = 1;
        }
}
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表