1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于單片機控制數碼管閃爍問題 求思路

[復制鏈接]
跳轉到指定樓層
樓主
新手想請假一下各位大佬,要怎么樣才能做到讓數碼管其中一位以1Hz閃動,其他三位正常顯示,已經卡在這個步驟好多天了,是需要用到中斷定時器什么的嗎,希望大佬可以講一下具體思路

51hei截圖20191228223721.png (19.95 KB, 下載次數: 80)

51hei截圖20191228223721.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

來自 6#
ID:89515 發表于 2019-12-29 21:53 | 只看該作者
這個最好還是用中斷,因為有長延時容易造成程序時間阻塞!!!
思路:就兩個方向解決
1:控制數據線,掃描線不變。這個樓上有人已經說過就是沒點通而已,需要寫兩個函數,一個正常的掃描函數;另一個根據設置位的標志將相應位寫全1或全0關閉(取決于共陰還是共陽),兩個函數交叉調用即可。調用時間就是頻率,自己決定。如果要退出設置狀態,就只調用正常掃描的函數。
2:數據線不變,控制掃描線。同樣設置位標志決定哪一位閃爍,相應位位選線的開啟用閃爍周期決定,
比如前500MS開啟,后500MS關閉。其它的和正常掃描一樣。多申明一組變量來賦給位選,不要直接控制,這樣就很方便了。

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

沙發
ID:437615 發表于 2019-12-28 23:30 來自觸屏版 | 只看該作者
寫兩個顯示函數,把它們分開來顯示
回復

使用道具 舉報

板凳
ID:213173 發表于 2019-12-29 07:09 | 只看該作者
樓主只要搞清楚數碼管在什么條件下可以點亮,什么條件下不亮,再按0.5秒間隔交替提供這兩個條件不就成了?如果對閃動周期要求精確當然使用定時器中斷為佳。
回復

使用道具 舉報

地板
ID:676374 發表于 2019-12-29 12:43 | 只看該作者
wulin 發表于 2019-12-29 07:09
樓主只要搞清楚數碼管在什么條件下可以點亮,什么條件下不亮,再按0.5秒間隔交替提供這兩個條件不就成了? ...

大佬能說的再詳細一點嗎,看的有點懵= =
回復

使用道具 舉報

5#
ID:384312 發表于 2019-12-29 18:49 | 只看該作者
首先確定數碼管共陰還是共陽,然后確定位選和段選IO口,再考慮動態數碼管的消影,最后結合定時器完事
回復

使用道具 舉報

7#
ID:89515 發表于 2019-12-29 22:13 | 只看該作者
說明:以上兩種方法都是要先在中斷中設置閃爍標志的,閃爍標志是否有效  由是否進入設置狀態的標志決定。所以其實寫一個函數更方便,但是你必須先理解邏輯是什么樣的。
回復

使用道具 舉報

8#
ID:213173 發表于 2019-12-30 07:11 | 只看該作者
Rei 發表于 2019-12-29 12:43
大佬能說的再詳細一點嗎,看的有點懵= =

這是一個動態顯示的數碼管驅動程序
void display()
{
        static uchar i=0;//靜態變量
        P0=0x00;                        //消隱
        switch(i)        //送位碼
        {
                case 0: led138a=0;led138b=0;led138c=0; break;
                case 1: led138a=1;led138b=0;led138c=0; break;
                case 2: led138a=0;led138b=1;led138c=0; break;
                case 3: led138a=1;led138b=1;led138c=0; break;
                case 4: led138a=0;led138b=0;led138c=1; break;
                case 5: led138a=1;led138b=0;led138c=1; break;
                case 6: led138a=0;led138b=1;led138c=1; break;
                case 7: led138a=1;led138b=1;led138c=1; break;
        }
        P0=dis_buf;        //送段碼
        i++;
        i%=8;
}
在上述程序基礎改為鍵控逐位閃爍的數碼管驅動程序
void display()
{
        static uchar i=0;//靜態變量
        P0=0x00;                        //消隱
        switch(i)        //送位碼
        {
                case 0: led138a=0;led138b=0;led138c=0; break;
                case 1: led138a=1;led138b=0;led138c=0; break;
                case 2: led138a=0;led138b=1;led138c=0; break;
                case 3: led138a=1;led138b=1;led138c=0; break;
                case 4: led138a=0;led138b=0;led138c=1; break;
                case 5: led138a=1;led138b=0;led138c=1; break;
                case 6: led138a=0;led138b=1;led138c=1; break;
                case 7: led138a=1;led138b=1;led138c=1; break;
        }
        if(Twinkle==1 && key==i)//閃爍標志與鍵值條件符合
                        P0=0xff;        //保持消隱狀態
        else P0=dis_buf;        //送段碼,dis_buf[ ]顯示緩存數組
        i++;
        i%=8;
}
回復

使用道具 舉報

9#
ID:213173 發表于 2019-12-30 07:53 | 只看該作者
Rei 發表于 2019-12-29 12:43
大佬能說的再詳細一點嗎,看的有點懵= =

勘誤:
        if(Twinkle==1 && key==i)//閃爍標志與鍵值條件符合
                        P0=0x00;        //保持消隱狀態
        else P0=dis_buf;        //送段碼,dis_buf[ ]顯示緩存數組
回復

使用道具 舉報

10#
ID:130230 發表于 2019-12-30 16:52 | 只看該作者
定時器中斷
回復

使用道具 舉報

11#
ID:584814 發表于 2019-12-31 09:53 | 只看該作者
Rei 發表于 2019-12-29 12:43
大佬能說的再詳細一點嗎,看的有點懵= =

除了加分的那個思路,其他的很麻煩,貼程序的沒聽懂你的意思基本在忽悠。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表