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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3314|回復: 11
收起左側

初學定時中斷做了個時鐘,顯示數字為何一直閃?請教各位了!

  [復制鏈接]
ID:686778 發表于 2020-2-5 22:40 | 顯示全部樓層 |閱讀模式
程序如下:

#include<reg52.h>

unsigned char i=0;
unsigned int c = 0;

unsigned char code table[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99,
                                                        0x92, 0x82, 0xf8, 0x80, 0x90};

void delay(unsigned int ms)  //延遲函數
{
        unsigned int a;
        unsigned int b;
        for (a = ms; a > 0; a--)
        {
                for (b = 121; b > 0; b--);
        }
}

void dsnumber() //數碼二極管顯示函數
{
        unsigned int b;
       
        b = c;
        P2 = 0xfe;      //第一個數碼管亮
        b  = b/600%6;   //計算十分位的數值
        P0 = table[b];  //
        delay(10);                 //延遲

        b = c;
        P2 = 0xfd;      //第二個數碼管亮
        b  = b/60%10;   //計算分位的數值
        P0 = table[b];  //
        delay(10);                 //延遲

               
        b = c;
        P2 = 0xfb;      //第三個數碼管亮
        b  = b/10%6;    //計算十秒位的數值
        P0 = table[b];  //
        delay(10);                 //延遲

       
        b = c;
        P2 = 0xf7;      //第四個數碼管亮
        b  = b%10;       //計算秒位的數值
        P0 = table[b];         //
        delay(10);                 //延遲
    P0=0xff;
       
}


void InitTimer0(void)
{
    TMOD = 0x01;//計數器狀態選擇
        TH0 = 0x4C;//計數初值,11.0592M晶振
    TL0 = 0x00;//計數初值
    EA = 1;//EA為 中斷開關,不需硬件中斷時可以不寫。
    ET0 = 1;//ET0為0或不寫默認為0時,計數器溢出TF0=1,不產生中斷,需要軟件清除。為1時引發中斷同時硬件清0標志位。
    TR0 = 1;//計數開始
       
}

void main(void)
{
   InitTimer0();//重復上面的中斷
        while(1)
        dsnumber();
       
}

void Timer0Interrupt(void) interrupt 1
{

        i++;
        TH0 = 0x4C;
    TL0 = 0x00;
        if  (i==20) /* 50ms定時中斷,20次為1S */
        {
                c++;
                i=0;
               
        }
       
}

回復

使用道具 舉報

ID:437615 發表于 2020-2-5 23:04 來自手機 | 顯示全部樓層
閃的話一般是因為51單片機速度比較慢,數碼管刷新的速度跟不上
回復

使用道具 舉報

ID:686778 發表于 2020-2-5 23:43 | 顯示全部樓層
還有個問題,顯示延時的時間,是否影響時鐘的準確性,需要在定時中斷中減去或者說補償一下嗎?
回復

使用道具 舉報

ID:235200 發表于 2020-2-6 00:16 | 顯示全部樓層
你要明白數碼管閃的原因是每一位數碼管點亮至下一位點亮的時間問題,程序中用了delay(10);   //延遲作為每一位數碼管的顯示時間,顯然不符合要求,程序中4位數碼管顯示,其延時時間應控制在4.5ms左右,與定時計數器作為中斷沒有關系(因顯示不是用定時計數器定時)
回復

使用道具 舉報

ID:213173 發表于 2020-2-6 06:27 | 顯示全部樓層
數碼管動態顯示周期不宜大于20ms,否則會閃爍。4位數碼管每位顯示延時應不大于5ms,樓主使用10ms延時時間太長。
回復

使用道具 舉報

ID:332444 發表于 2020-2-6 07:23 | 顯示全部樓層
數碼管延時值調整試看
回復

使用道具 舉報

ID:587810 發表于 2020-2-6 09:11 來自手機 | 顯示全部樓層
你可以試著改一下延時時間
回復

使用道具 舉報

ID:462827 發表于 2020-2-7 01:07 | 顯示全部樓層
數碼管動態掃描一般間隔不要太長,2ms左右就好,另外還需要消影。
回復

使用道具 舉報

ID:686778 發表于 2020-12-2 21:10 | 顯示全部樓層
顯示延時由delay(10)改為delay(1)就好了,不閃了。謝謝以上各位!
回復

使用道具 舉報

ID:853361 發表于 2020-12-2 21:18 | 顯示全部樓層
delay(unsigned int ms)這個函數延時明顯不夠

評分

參與人數 1黑幣 +20 收起 理由
admin + 20

查看全部評分

回復

使用道具 舉報

ID:782419 發表于 2020-12-3 09:44 | 顯示全部樓層
多位數碼管顯示一般是動態刷新,你在顯示函數中用延時的想法有問題!
建議在網上找一些關于動態數碼管動態顯示的教程參考學習學習。
回復

使用道具 舉報

ID:767811 發表于 2020-12-3 14:35 | 顯示全部樓層
這種問題,我一般遇到的話會先檢查數碼管是不是選錯了,例如共陰極用成了共陽極
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费在线观看一区二区三区 | 日本不卡一区 | 日韩一级精品视频在线观看 | 国产毛片久久久久久久久春天 | 久久大陆 | 成人免费视频 | 国产日韩亚洲欧美 | 国产不卡一区在线观看 | 少妇午夜一级艳片欧美精品 | 最新一级毛片 | 精品一区二区三 | 国产亚洲欧美在线 | 一区二区在线不卡 | 亚洲欧美日韩在线不卡 | 涩涩片影院 | 天天插天天操 | 国产高清精品一区二区三区 | 91网在线播放 | 欧美一级电影免费观看 | 欧美精品成人一区二区三区四区 | 一区二区在线 | 国产激情视频 | 国产精品国产精品国产专区不片 | 操人网站 | 欧美精品a∨在线观看不卡 欧美日韩中文字幕在线播放 | 成人在线免费看 | 不卡一区 | 日韩在线中文字幕 | 最新一级毛片 | 逼逼网 | 成人福利网 | 在线视频国产一区 | 在线视频91 | 电影91久久久| 91精品国产91久久久久久最新 | 久久久一区二区 | 亚洲国产精品视频 | 福利视频二区 | www.9191.com| 亚州中文 | 成人国产精品免费观看视频 |