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

標題: 關于單片機中斷那些事,數碼管閃爍過快 [打印本頁]

作者: lzt456    時間: 2021-7-26 12:41
標題: 關于單片機中斷那些事,數碼管閃爍過快
感覺進入中斷時間沒問題,但數碼管閃爍過快,代碼如下

#include <reg52.h>

sbit BEEP = P1^5; //跟中斷無關

bit flagls = 0;
unsigned char Ledbuf;
unsigned char T0RH = 0;
unsigned char T0RL = 0;
unsigned char code LedChar[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};

void ConfigTimer0(unsigned int ms)         //配置T0
{
         unsigned long tmp;

        tmp = 11059200/12;
        tmp = (tmp*ms)/1000;
        tmp = 65536 - tmp;
        T0RH = (unsigned char)(tmp >> 8);
        T0RL = (unsigned char)tmp;

        TMOD &= 0xf0;
        TMOD |= 0x01;
        TH0=T0RH;        
        TL0=T0RL;
        EA = 1;
        ET0 = 1;
        TR0 = 1;
}

void LedScan()         //在中斷中使用,每進中斷掃描一次
{
         P0 = 0x00;
        P2 = (P2&0xe3);
        P0 = Ledbuf;
}

void main()
{
         unsigned int i = 0;
        unsigned int sec = 0;
                  
        ConfigTimer0(1);        //設置定時器1ms

        for(i = 0; i < 50000; i++)
        {
                 BEEP = ~BEEP;
        }

        while(1)
        {
                if(flagls == 1)
                {
                        flagls = 0;
                        sec++;                                  //每次進入sec加1
                        Ledbuf = LedChar[9 - sec%10];
                }
        }
}

void InterruptTimer0() interrupt 1
{
         static unsigned int tmr1s = 0;

         TH0=T0RH;                           //設置斷點看進入時間          第一次0.00266602s,第二次 0.00367405, 相差0.001s左右,進入正常
        TL0=T0RL;

        tmr1s++;
        if(tmr1s >= 1000);           //1s時改變flagls
        {
                tmr1s = 0;
                flagls = 1;
        }

        LedScan();
}

$0WG4UH3Q@C4V5M{%`2Y6AT.png (137.56 KB, 下載次數: 46)

$0WG4UH3Q@C4V5M{%`2Y6AT.png

IMG_20210726_123409.jpg (6.21 MB, 下載次數: 40)

IMG_20210726_123409.jpg

作者: yzwzfyz    時間: 2021-7-26 13:30
你想達成的效果是什么?實際效又是什么呢?
作者: lzt456    時間: 2021-7-26 13:49
yzwzfyz 發表于 2021-7-26 13:30
你想達成的效果是什么?實際效又是什么呢?

想每秒數碼管改變一個數,實際上改變太快,肉眼分辨不了,就是數碼管每個led全亮
作者: lkc8210    時間: 2021-7-26 14:01
if(tmr1s >= 1000);           //1s時改變flagls
低級錯誤:多了個分號
作者: lzt456    時間: 2021-7-26 14:26
lkc8210 發表于 2021-7-26 14:01
if(tmr1s >= 1000);           //1s時改變flagls
低級錯誤:多了個分號

ok,我去試試
作者: lzt456    時間: 2021-7-26 14:28
lkc8210 發表于 2021-7-26 14:01
if(tmr1s >= 1000);           //1s時改變flagls
低級錯誤:多了個分號

ok,以解決,麻煩大家了




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1