找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

求助帖,4位LED數(shù)碼管顯示0-9999利用定時中斷單片機(jī)C程序

[復(fù)制鏈接]
ID:548551 發(fā)表于 2019-6-17 14:42 | 顯示全部樓層 |閱讀模式
首先感謝進(jìn)來看的朋友,表示感謝。 作為一名新手,在寫LED數(shù)碼管顯示的時候遇到了問題,所以特意來向您們請教的。我用的是單片機(jī)內(nèi)部中斷,一個中斷為4MS,我不想用延時函數(shù),延時讓系統(tǒng)內(nèi)部空轉(zhuǎn)不允許。下面的圖片是IO口設(shè)置情況,1-8是數(shù)碼管的數(shù)字顯示內(nèi)容,9-12是千位到個位。 我現(xiàn)在就是那個千位百位哪里不知道怎么寫。 不知道哪位大神能不能幫忙指導(dǎo)C程序思路。我借鑒一下。表示感謝!

哪位大佬能簡單的指導(dǎo)一下我啊,求個大致的思路 想靠自己的能力制作出來,提升自己的電子技術(shù)水平

IO口定義內(nèi)容

IO口定義內(nèi)容
回復(fù)

使用道具 舉報(bào)

ID:552614 發(fā)表于 2019-6-17 15:55 | 顯示全部樓層
首先進(jìn)行位選,就是選擇在哪個數(shù)碼管上顯示,然后是段選,呈現(xiàn)什么樣的字形。最基本要定義一個段選的數(shù)組
回復(fù)

使用道具 舉報(bào)

ID:332444 發(fā)表于 2019-6-17 16:16 | 顯示全部樓層
1=8就是段9-12就是位,假如你能點(diǎn)亮2位了,如法炮制就能點(diǎn)亮3位4位.
回復(fù)

使用道具 舉報(bào)

ID:517466 發(fā)表于 2019-6-17 16:31 | 顯示全部樓層
sbit bit1=P1^0;
sbit bit2=P1^1;
sbit bit3=P1^2;
sbit bit4=P1^3;
P0=千位數(shù)碼管筆段數(shù)據(jù);
bit1=0;//點(diǎn)亮數(shù)碼管千位
延時;
bit1=1;
P0=百位數(shù)碼管筆段數(shù)據(jù);
bit2=0;//點(diǎn)亮數(shù)碼管百位
延時;
bit2=1;
P0=十位數(shù)碼管筆段數(shù)據(jù);
bit3=0;//點(diǎn)亮數(shù)碼管十位
延時;
bit3=1;
P0=個位數(shù)碼管筆段數(shù)據(jù);
bit4=0;//點(diǎn)亮數(shù)碼管個位
延時;
bit4=1;
回復(fù)

使用道具 舉報(bào)

ID:207421 發(fā)表于 2019-6-17 20:50 | 顯示全部樓層
這種問題應(yīng)該百度,百度有視頻,原理圖,源程序,很好借鑒
提問應(yīng)該上至少傳個原理圖或源碼,草圖也行啊
不然大家猜不猜去,也浪費(fèi)時間.
回復(fù)

使用道具 舉報(bào)

ID:452821 發(fā)表于 2019-6-17 20:54 | 顯示全部樓層
不知道你用的是共陰數(shù)碼管還是共陽數(shù)碼管,先假設(shè)你是共陰的,那就把你所需要亮的那個數(shù)碼管的控制端為低電平,其余的為高,所以當(dāng)你要顯示個位的時候P1=0x07;//0111    類推,十位的時候P1=0x0b,百位0x0d,千位0x0e;所以你還需要對你要顯示的數(shù)字進(jìn)行分段,如1234分為顯示1,2,3,4;所以要做的就是P1=0x0e;顯示1;P1=0x0d;顯示2;P1=0x0b;顯示3;P1=0x07;顯示4;
就可以了。
回復(fù)

使用道具 舉報(bào)

ID:548551 發(fā)表于 2019-6-20 19:36 | 顯示全部樓層
xianfajushi 發(fā)表于 2019-6-17 16:16
1=8就是段9-12就是位,假如你能點(diǎn)亮2位了,如法炮制就能點(diǎn)亮3位4位.

這個我知道。我現(xiàn)在的問題就是點(diǎn)亮不了第二位。如果是單點(diǎn)一位數(shù)碼管我知道怎么點(diǎn)亮,現(xiàn)在我求助的是就是由一位到二位,二位到三位,三位到四位的過程和代碼。
回復(fù)

使用道具 舉報(bào)

ID:548551 發(fā)表于 2019-6-20 19:38 | 顯示全部樓層
charles11 發(fā)表于 2019-6-17 15:55
首先進(jìn)行位選,就是選擇在哪個數(shù)碼管上顯示,然后是段選,呈現(xiàn)什么樣的字形。最基本要定義一個段選的數(shù)組

首先謝謝您對我我的回復(fù)。 段選位選我知道,之前看了郭天祥的視頻,他用的是延時函數(shù),現(xiàn)在我不用延時函數(shù)。我直接用定時器來寫。單個的我會點(diǎn)亮。 也能累加,但是就是9到10以后的不知道怎么寫了。
回復(fù)

使用道具 舉報(bào)

ID:548551 發(fā)表于 2019-6-20 19:38 | 顯示全部樓層
lwh999995 發(fā)表于 2019-6-17 20:50
這種問題應(yīng)該百度,百度有視頻,原理圖,源程序,很好借鑒
提問應(yīng)該上至少傳個原理圖或源碼,草圖也行啊
...

好的。 我會注意的。謝謝提醒
回復(fù)

使用道具 舉報(bào)

ID:548551 發(fā)表于 2019-6-20 20:13 | 顯示全部樓層
尹子歸來 發(fā)表于 2019-6-17 20:54
不知道你用的是共陰數(shù)碼管還是共陽數(shù)碼管,先假設(shè)你是共陰的,那就把你所需要亮的那個數(shù)碼管的控制端為低電 ...

謝謝您的指導(dǎo),我用的是共陽數(shù)碼管,我就想讓他一秒的時間自動計(jì)數(shù)累加,由0-9999,到了9999清零,重新開始計(jì)數(shù)。關(guān)于如何實(shí)現(xiàn)由9變換到10.再由99變化100,這程序我不會還請您指導(dǎo)一下。謝謝
回復(fù)

使用道具 舉報(bào)

ID:505284 發(fā)表于 2019-6-21 00:27 來自手機(jī) | 顯示全部樓層
我建議你可以下載德飛萊開發(fā)資料程序參考一下,他的數(shù)碼管就是用16位定時器寫的,你可以參考一下
回復(fù)

使用道具 舉報(bào)

ID:483407 發(fā)表于 2019-6-21 07:21 | 顯示全部樓層
xqleft 發(fā)表于 2019-6-20 20:13
謝謝您的指導(dǎo),我用的是共陽數(shù)碼管,我就想讓他一秒的時間自動計(jì)數(shù)累加,由0-9999,到了9999清零,重新開 ...

你可以這樣來做:每4MS產(chǎn)生一次中斷,用一個累加的變量(比如K)來記錄進(jìn)入中斷的次數(shù)(不用0~9999,0~255就可以,類型為unsigned char,也不用清零),然后每次進(jìn)入中斷,K++;K對4求余;余數(shù)即為要點(diǎn)亮的位。
回復(fù)

使用道具 舉報(bào)

ID:332444 發(fā)表于 2019-6-21 18:01 | 顯示全部樓層
這里有點(diǎn)3位的例子點(diǎn)8位都沒問題http://www.torrancerestoration.com/bbs/dpj-157313-1.html
回復(fù)

使用道具 舉報(bào)

ID:786726 發(fā)表于 2020-6-23 11:53 | 顯示全部樓層
#include <reg52.h>

sbit DGT0=P2^3;
sbit DGT1=P2^2;
sbit DGT2=P2^1;
sbit DGT3=P2^0;

unsigned char code  LedChar[]={
        0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x90};
unsigned char LedBuff[4]={0x90,0x90,0x90,0x90};
unsigned char  flagls=0;
unsigned int cnt=0;
unsigned char i=0;
void main()
{
        unsigned int sec=9999;
       
        TMOD=0x01;//MOV TMOD,#01H
        TH0=0xFC;
        TL0=0x18;
  TR0=1;
        EA=1;
        ET0=1;
        while(1)
        {
                if(flagls==1)
                {
                        flagls=0;
                        sec--;
                        LedBuff[0]=LedChar[sec%10];
                        LedBuff[1]=LedChar[sec/10%10];
                        LedBuff[2]=LedChar[sec/100%10];
                        LedBuff[3]=LedChar[sec/1000%10];
                        if(sec==0)
                                sec=9999;
                }
        }
       
}
void InterruptTime0() interrupt 1
{
        TH0=0xFC;
        TL0=0x18;
        cnt++;
        if (cnt>=1000)
        {
                cnt=0;
                flagls=1;
        }
        P0=0xFF;
        switch (i)
        {
                case 0:DGT3=0;DGT2=0;DGT1=0;DGT0=1;i++;P0=LedBuff[0];break;
                case 1:DGT3=0;DGT2=0;DGT1=1;DGT0=0;i++;P0=LedBuff[1];break;
                case 2:DGT3=0;DGT2=1;DGT1=0;DGT0=0;i++;P0=LedBuff[2];break;
                case 3:DGT3=1;DGT2=0;DGT1=0;DGT0=0;i=0;P0=LedBuff[3];break;
        }
}
;;以上的代碼可以試一下,親測有效
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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