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

QQ登錄

只需一步,快速開始

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

笨鳥先飛之四位十進(jìn)制數(shù)顯最大值9999

[復(fù)制鏈接]
ID:23261 發(fā)表于 2010-4-28 15:22 | 顯示全部樓層 |閱讀模式

/*
這是個(gè)四位數(shù)10進(jìn)制數(shù)碼顯示程序,最大可顯示9999,因?yàn)?位通常最大數(shù)只能到255,利用兩位最大十進(jìn)數(shù)99,小于3位數(shù)255,可以
正常顯示.設(shè)計(jì)想法就利用兩對(duì)兩位數(shù)值的遞加來實(shí)現(xiàn)最大數(shù)顯9999的值.當(dāng)然可以參考這個(gè)做更多位的.可以做成10進(jìn)制秒表,不過
我中斷停留程序還沒學(xué),就這些吧.希望有人能幫忙多提見解.
*/
#include"reg52.h"
#include"intrins.h"
#define uint unsigned int
#define uchar unsigned char
sbit duan=P2^6;
sbit wei=P2^7;
uchar temp1,temp2,aa,qian,bai,shi,ge;
void delay(uint z);
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66 ,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void display(uchar qian,uchar bai,uchar shi,uchar ge);
void init();
void main()

 init(); //中斷初始化
 while(1)
/*步驟四,就是段顯值遞加程序設(shè)計(jì),如下*/ 
{
  if(aa==20)  //相當(dāng)于顯數(shù)亮停留的時(shí)間必須小于一個(gè)周期256,否則將數(shù)顯將一直亮0000,不懂解釋的對(duì)不對(duì)
    {   
   aa=0;  //這個(gè)為什么要初值,如果不初值那會(huì)顯數(shù)將很快跳過
   temp1++;
   
   if(temp1==100)
      {
     temp1=0;
     temp2++;
     if(temp2==100)  
      {
       temp2=0;       
      
                }
 
    } 
    
   qian=temp2%100/10;  //取十位位值
   bai=temp2%10;   //取個(gè)位位值
   shi=temp1%100/10;
   ge=temp1%10;
    }   
          
  display(qian,bai,shi,ge);  //載入位顯位置
 }
}

void delay(uint z) //延時(shí)函數(shù)
{
 uint x,y;
 for(x=z;x>0;x--)
  for(y=30;y>0;y--);
}

void display(uchar qian,uchar bai,uchar shi,uchar ge) //位顯位置函數(shù)組 
/*步驟一,首先我們應(yīng)該要做的就是讓哪四個(gè)位顯能顯示,如下*/
{
        duan=1;
  P0=table[qian];
  duan=0;
  P0=0xff;
  wei=1;
  P0=0xfe;
  wei=0;
  delay(1);

        duan=1;
  P0=table[bai];
  duan=0;
  P0=0xff;
  wei=1;
  P0=0xfd;
  wei=0;
  delay(1);

  duan=1;
  P0=table[shi];
  duan=0;
  P0=0xff;
  wei=1;
  P0=0xfb;
  wei=0;
  delay(1);

  duan=1;
  P0=table[ge];
  duan=0;
  P0=0xff;
  wei=1;
  P0=0xf7;
  wei=0;
  delay(1);
}

void init()  //步驟二,中斷請(qǐng)求初始函數(shù)組

 wei=0;
 duan=0;
 temp1=0;
 temp2=0;
 TMOD=0x01;
 TH0=0xfe;
 TL0=0xfe;
 EA=1;
 ET0=1;
 TR0=1; 
}

void timer0() interrupt 1 //步驟三,中斷次數(shù),相當(dāng)于中斷時(shí)間
{
 TH0=0xfe;
 TL0=0xfe;
 aa++; 
}

[此貼子已經(jīng)被作者于2010-4-28 16:28:47編輯過]
回復(fù)

使用道具 舉報(bào)

ID:14556 發(fā)表于 2010-8-28 15:37 | 顯示全部樓層

學(xué)習(xí)學(xué)習(xí),謝謝啦

回復(fù)

使用道具 舉報(bào)

ID:448852 發(fā)表于 2018-12-28 21:50 | 顯示全部樓層
贊一個(gè),好。
回復(fù)

使用道具 舉報(bào)

ID:57570 發(fā)表于 2019-2-10 01:23 來自手機(jī) | 顯示全部樓層
可以用unsigned int數(shù)組的
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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