找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3528|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

小白再次幫友求助 “4位數(shù)據(jù)管,從0000到9999,每0.5s增加1”程序設(shè)計(jì)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
“4位數(shù)據(jù)管,從0000到9999,每0.5s增加1”程序設(shè)計(jì)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:214905 發(fā)表于 2017-6-26 20:20 | 只看該作者
大概是這樣的,開定時(shí)器1,工作方式1,初值設(shè)置到50毫秒一中斷,if判斷十次中斷進(jìn)行一次處理
斷選和位選分成兩個(gè)數(shù)組,這個(gè)具體就看你的硬件怎么連接的了,然后int個(gè)數(shù),在每十次中斷里將它+1,分別取這個(gè)數(shù)的千百十個(gè)位,對(duì)應(yīng)數(shù)組元素送入段選。
開定時(shí)器0,2毫秒一中斷,中斷中進(jìn)行動(dòng)態(tài)顯示
回復(fù)

使用道具 舉報(bào)

板凳
ID:211467 發(fā)表于 2017-6-26 22:17 | 只看該作者
不許用開定時(shí)器0了吧?
回復(fù)

使用道具 舉報(bào)

地板
ID:123289 發(fā)表于 2017-6-26 22:36 | 只看該作者
本帖最后由 yzwzfyz 于 2017-6-26 22:58 編輯

開啟T0中斷,每4ms中斷一次。
設(shè)置一個(gè)變量R_9999(0-9999)做計(jì)數(shù)用。用法:每0.5秒R_9999+1。
設(shè)置一個(gè)掃描計(jì)數(shù)器R_SC(=0-3)。用法:每次T0中斷R_SC+1,當(dāng)R_SC=4時(shí)回0。
設(shè)置一個(gè)0.5秒計(jì)時(shí)器R_05(=0-124)。用法:每次T0中斷,R_05+1,R_05=125時(shí)回0。

每次T0中斷依序做以下動(dòng)作:

自動(dòng)+1:
1、R_05+1,當(dāng)R_05=125時(shí)做以下動(dòng)作(否則不處理):
   1.1、R_05=0;
   1.2、R_9999+1。
掃描顯示:
2、R_SC+1(為切換顯示指明顯示位),如果R_SC=4則回0(只有4個(gè)LED),再做以下動(dòng)作(無論R_SC=?):
  2.1、根據(jù)R_SC的值,取R_9999之中的一個(gè)位(R_SC:0-3各對(duì)應(yīng)個(gè)、十、百、千位)放入A中;
  2.2、將A進(jìn)行譯碼(事先做一個(gè)表10個(gè)字節(jié):對(duì)應(yīng)LED段碼顯示0-9的段表達(dá)明暗的字節(jié)形式);
  2.3、關(guān)閉4個(gè)LED;(以下改變顯示內(nèi)容時(shí)不會(huì)出現(xiàn)錯(cuò)字閃動(dòng));
  2.4、將譯碼后的A值通過IO口送到LED的8個(gè)段顯示上(只用七段就夠了,因?yàn)橐殃P(guān)斷,所以這時(shí)無顯示,也就無所畏對(duì)錯(cuò));
  2.5、接通顯示的這個(gè)LED(三個(gè)關(guān)閉一個(gè)開通,這時(shí)才正式顯示一個(gè)LED,完成掃描顯示一位)。

如果自己還不會(huì)寫,也不想自己寫,就改行吧。
回復(fù)

使用道具 舉報(bào)

5#
ID:164602 發(fā)表于 2017-6-27 07:24 | 只看該作者
看看我編的程序?qū)Σ粚?duì)。對(duì)應(yīng)的電路如圖。
#include<reg51.h>

#define smg P0

sbit a=P2^2;
sbit b=P2^3;          
sbit c=P2^4;

unsigned char code xs[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char i=0,t=0;
unsigned int j=0;

void Delay(unsigned char c);
void play(void);
void TimeConfig();

void main(void)
{
        TimeConfig();
        t=10;
        smg=0x00;
        while(1)
        {       
                if (i>=10)
                {
                        j++;
                }
                if (j==9999)
                {
                        j=0;
                }
                        play();
        }               
}

void play(void)
{
        c=1;b=0;a=0;
        smg=xs[j/1000];
        Delay(t);
        smg=0x00;
        Delay(t);

        c=0;b=1;a=1;
        smg=xs[(j%1000)/100];
        Delay(t);
        smg=0x00;
        Delay(t);

        c=0;b=1;a=0;
        smg=xs[(j%100)/10];
        Delay(t);
        smg=0x00;
        Delay(t);

        c=0;b=0;a=1;
        smg=xs[(j%10)/1];
        Delay(t);
        smg=0x00;
        Delay(t);
}

void Delay(unsigned char c)
{
    unsigned char b;
    for(c;c>0;c--)
        for(b=10;b>0;b--);
}

void TimeConfig()
{
    TMOD = 0x01;
    TH0 = 0x3c;         //設(shè)置初始值,定時(shí)50ms
    TL0 = 0xb0;
    EA = 1;                 //總中斷開啟
    ET0 = 1;         //定時(shí)器0中斷開啟
    TR0 = 1;         //啟動(dòng)定時(shí)器0
}

void Time0() interrupt 1//定時(shí)器0中斷服務(wù)函數(shù)
{
        TH0 = 0x3c;         //重裝初值
    TL0 = 0xb0;
        i++;
}


1.jpg (60.96 KB, 下載次數(shù): 48)

1.jpg

2.jpg (17.4 KB, 下載次數(shù): 44)

2.jpg
回復(fù)

使用道具 舉報(bào)

6#
ID:164602 發(fā)表于 2017-6-27 11:11 | 只看該作者
剛才發(fā)的程序,有一點(diǎn)錯(cuò)誤!抱歉!
就是這里:
  if (i>=10)
                {
                        j++;
                }
應(yīng)該加一句:
  if (i>=10)
                {
                        j++;
                       i=0;
                }
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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