欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1719|回復(fù): 4
收起左側(cè)

單片機控制LED請問延時除了累減嵌套循環(huán),還有什么好方法沒?

[復(fù)制鏈接]
ID:575020 發(fā)表于 2019-8-11 20:23 | 顯示全部樓層 |閱讀模式
我想做個點亮led燈1秒,暗10秒,循環(huán)10次程序停止,網(wǎng)上找了一些程序拼湊而成,我是新手還沒入門呢,x的10次循環(huán)不知道怎么退出,延時循環(huán)一直用累減循環(huán),會不會浪費cpu(mcu)資源、減少壽命,浪費電池電量。還有網(wǎng)上查的1s=1000000us,實測是255000us。
下面的程序,x的10次循環(huán)怎么退出啊,想運行10次就讓單片機休息,停止工作,怕一直工作下去累壞了,后面加了return 0程序出錯,while循環(huán)還不會寫。

#include<reg52.h>

sbit LED0=P1^0;
void Delay_1s();
void Delay_10s();
unsigned int i,j,k;

void delay_1s()
{
   for(i=95;i>0;i--)
   for(j=26;j>0;j--)
   for(k=46;k>0;k--);
}

void delay_10s()
{
   unsigned int i,j,k;
   for(i=73;i>0;i--)
   for(j=249;j>0;j--)
   for(k=63;k>0;k--);
}

void main (void)
{
    int x;
    for (x=1; x<=10; x++)
  {
  LED0=0;
  Delay_1s();
  LED0=1;
  Delay_10s();
  }

}

回復(fù)

使用道具 舉報

ID:328014 發(fā)表于 2019-8-12 02:01 | 顯示全部樓層
定時器有空閑的話可以用定時器 不過程序麻煩點
回復(fù)

使用道具 舉報

ID:213173 發(fā)表于 2019-8-12 05:56 | 顯示全部樓層
想按精確時間循環(huán)10次程序停止需要使用定時器。
MCU是累不死的,讓MCU處于休眠狀態(tài)節(jié)約電池電量是可行的。
此類簡單程序在論壇很好找。
回復(fù)

使用道具 舉報

ID:123289 發(fā)表于 2019-8-12 12:04 | 顯示全部樓層
你所能理解的方式都是最笨最糟糕的方法。
沙發(fā)、板櫈的說法是正解。
回復(fù)

使用道具 舉報

ID:579053 發(fā)表于 2019-8-12 17:39 | 顯示全部樓層
用定時器,比如一秒產(chǎn)生一次定時器中斷,在中斷中讓LED燈亮,再定義兩個全局變量,LED_cnt,count_cnt。LED_cnt是為了讓燈亮一秒暗10秒,cnt用來循環(huán)10次退出。
例子:
void TIM3_UPD_OVF_IRQHandler (void)//定時器3中斷服務(wù)函數(shù)
{
        static LED_cnt = 0,count_cnt = 0;
        if(!LED_cnt)
        {
                LED = 1;//亮燈
                count_cnt ++;//計數(shù)一次
        }
        else LED = 0;//關(guān)燈
        LED_cnt ++;
        if(LED_cnt == 10) LED_cnt = 0;
        if(0,count_cnt == 10) TIM3_SR1 = 0x00;//關(guān)定時器
}
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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