標題: 秒表可以連續(xù)走到9999秒 [打印本頁]

作者: 不倒翁.WZT    時間: 2016-11-29 11:06
標題: 秒表可以連續(xù)走到9999秒
秒表可以連續(xù)走到9999秒,到9999秒自動復位到0,重新計時可以按復位鍵或停止鍵。本程序經(jīng)過上板實驗,完全可靠。

  1. #include<reg51.h>
  2. #define GPIO_DIG   P0
  3. #define GPIO_PLACE P1
  4. unsigned char code DIG_PLACE[4] = {0xfe,0xfd,0xfb,0xf7};//,0xef,0xdf,0xbf,0x7f};//位選控制   查表的方法控制
  5. unsigned char code DIG_CODE[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  6. unsigned char DisplayData[8]; //用來存放要顯示的8位數(shù)的值
  7. unsigned char Time;                        //用來存放定時時間
  8. unsigned int Second;
  9. /*********************使用數(shù)碼管顯示*******************/
  10. void DigDisplay()
  11. {
  12.         unsigned char i;
  13.         unsigned int j;
  14.         for(i=0; i<8; i++)
  15.         {
  16.                 GPIO_PLACE=DIG_PLACE[i];         //發(fā)送位選
  17.                 GPIO_DIG=DisplayData[i];   //發(fā)送段碼
  18.                 j=10;                                                           //掃描間隔時間設(shè)定
  19.                 while(j--);        
  20.                 GPIO_DIG=0x00;             //消隱
  21.         }
  22. }
  23. /*********************配置定時器************************/
  24. void Timer0init(void)
  25. {
  26.         TMOD=0x01;     //定時器0選擇工作方式1
  27.   TH0 =(65536-49550)/256;         //設(shè)置初始值,定時50MS
  28.   TL0 =(65536-49550)%256;
  29.   EA  =1;           //打開總中斷
  30.   ET0 =1;                 //打開定時器0中斷
  31.   TR0 =1;                 //啟動定時器0        
  32. }
  33. /**********************主函數(shù)***************************/
  34. void main(void)
  35. {         
  36.   Timer0init();  
  37.   while(1)   
  38.   {
  39.     if(Second>9999)
  40.     {
  41.       Second=0;
  42.     }
  43.     DisplayData[0]=DIG_CODE[(Second)/10000];
  44.     DisplayData[1]=DIG_CODE[(Second)%1000/100];
  45.     DisplayData[2]=DIG_CODE[(Second)%100/10];
  46.     DisplayData[3]=DIG_CODE[(Second)%10];
  47.     DigDisplay();

  48.   }                                
  49. }
  50. /*******************定時器0中斷函數(shù)**********************/                  
  51. void Timer0() interrupt 1
  52. {
  53.         TH0=(65536-49550)/256; //設(shè)置初始值
  54.         TL0=(65536-49550)%256;
  55.         Time++;
  56.         if(Time==40)  //控制秒時間長短
  57.         {
  58.                 Second++;
  59.                 Time=0;
  60.         }
  61. }
復制代碼



作者: wuyibin2003    時間: 2016-11-29 14:10
雖然不需要 但是還是要感謝樓主的奉獻精神
作者: ljx199    時間: 2016-11-29 14:24
非常好
作者: zl2168    時間: 2016-11-29 14:43
本帖最后由 zl2168 于 2016-11-29 14:47 編輯

實例93  99.9秒秒表


Proteus仿真一下,確認有效。
實例95 99.9秒秒表.rar (38.86 KB, 下載次數(shù): 12)
以上摘自張志良編著《80C51單片機仿真設(shè)計實例教程——基于Keil CProteus》清華大學出版社ISBN 978-7-302-41682-1,內(nèi)有常用的單片機應(yīng)用100案例,用于仿真實驗操作,書中電路和程序設(shè)計有詳細說明,電路與程序真實可靠可信可行,程序語句條條有注解。
若需99.99秒,硬件電路增加一位595。軟件程序增加0.01s10ms)計數(shù)器,并修改相應(yīng)計數(shù)顯示程序。
另外,顯示也可改成I/O口直接驅(qū)動。







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