標(biāo)題: 8數(shù)碼管實(shí)現(xiàn)秒表控制 [打印本頁(yè)]

作者: super951    時(shí)間: 2012-5-20 21:38
標(biāo)題: 8數(shù)碼管實(shí)現(xiàn)秒表控制
/**********************************************************************************
*  標(biāo)題:                            8數(shù)碼管實(shí)現(xiàn)秒表控制8數(shù)碼管實(shí)現(xiàn)秒表控制                                                 *
*                                           淘寶夢(mèng)飛電子工作室                                                                        *
*                                                    *
***********************************************************************************
*       按鍵start 開(kāi)始計(jì)時(shí)
*       按鍵stop  停止
*       按鍵reset 復(fù)位
*       最多計(jì)時(shí)60分鐘
***********************************************************************************/


#include <reg51.h> 
#include <intrins.h>

sbit start=P1^0;
sbit stop=P1^1;
sbit reset=P1^2;

unsigned char CNT=0;
 
//此表為 LED 的字模, 共陰數(shù)碼管 0-9  - 
unsigned char code   Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};  //段碼控制

//此表為8個(gè)數(shù)碼管位選控制, 共陰數(shù)碼管 1-8個(gè)  - 
unsigned char code   dispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};    //位選控制   查表的方法控制

/************主函數(shù)**********************/ 
main()
{  
 unsigned char ms_10,sec,min;
   unsigned int LedOut[10];     //變量定義
   unsigned char i,j;

   ms_10=0;
 sec=0;
 min=0;


 //定時(shí)器及中斷初始化
    TMOD=0x02;  //定時(shí)器0,選擇工作方式2-8位自動(dòng)重裝
  TH0=0x9C;   /*采用定時(shí)器計(jì)時(shí),12MHz晶振下,計(jì)數(shù)初值=256-100=156 (0x9C)*/
  TL0=0x9C;   //定時(shí)100us
     ET0=1; //定時(shí)器0開(kāi)中斷
     EA=1; //開(kāi)總中斷
  TR0=0;//計(jì)時(shí)器不工作

  while(1)
  {  
    
    if(!start) TR0=1;    //計(jì)時(shí)器工作
  if(!stop)  {TR0=0;}
    if(!reset) {TR0=0; CNT=0;  ms_10=0; sec=0; min=0; break;}

    if(CNT>99) 
      {CNT=0;
      ms_10++;//每過(guò)100*100us=0.01秒,ms_10累加一次 
    if(ms_10>99)
       {
       ms_10=0;
     sec++;
     if(sec>59)
        {
       sec=0;
       min++;
       if(min>59) min=0;
      }
     }
     }  


    //將計(jì)數(shù)值Time 轉(zhuǎn)化為時(shí)間,存儲(chǔ)到Ledout中;
   LedOut[0]=Disp_Tab[min/10%10];//分
     LedOut[1]=Disp_Tab[min%10];//分
     LedOut[2]=0x40; 
     LedOut[3]=Disp_Tab[sec/10%10];  //秒 
   LedOut[4]=Disp_Tab[sec%10];  //秒
     LedOut[5]=0x40;
     LedOut[6]=Disp_Tab[ms_10/10%10];     //0.01秒
     LedOut[7]=Disp_Tab[ms_10%10];           //0.01秒  

   //輸出到數(shù)碼管上
  for( i=0; i<9; i++) 
  {  
   P0 = LedOut;
   P2 = dispbit;   //使用查表法進(jìn)行位選   
   for(j=0;j<100;j++);
   }
  
  }   
} 

 


void Timer0(void) interrupt 1    
{
 CNT++;  
}

 

 

使用八位數(shù)碼管顯示,實(shí)現(xiàn)秒表程序。無(wú)鎖存,直接控制。

 





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1