|
- /**********
- 功能:秒表
- MCU : STC89C52 11.0592MHz
- 編譯器: Keil C51 V4.22
- 描述: 精確度1ms,曹老師要求為接通開關K1開始計時;接通開關K2暫停計時并顯示。
- 作者:NCUT_glx
- *********/
- #include"reg52.h"
- typedef unsigned char UINT8;
- typedef unsigned int UINT16;
- UINT16 Num;
-
- #define DataPort P0
- sbit LE1 = P2^2; //duan
- sbit LE2 = P2^3; //wei
- sbit K1 = P2^4;
- sbit K2 = P2^5;
- UINT8 code DuanMa[ ] = { 0x3F,0x06,0x5B,0x4F,
- 0x66,0x6D,0x7D,0x07,
- 0x7F,0x6F };
- UINT8 code WeiMa[] = { 0xFE,0xFD,0xFB,0xF7,
- 0xEF,0xDF,0xBF,0x7F };
- UINT8 StorageData[8];
- void DelayMs( UINT16 Ms )
- {
- UINT8 i;
-
- while (Ms--)
- {
- for ( i = 0; i < 114; i++ );
- }
- }
- void chushihua(void)
- {
- TMOD |= 0x01;
- TH0 = (65536-917)/256;
- TL0 = (65536-917)%256;
- ET0 = 1;
- EA = 1;
- TR0=1;
- }
- void TIMER1(void) interrupt 1
- {
- TH0 =(65536-917)/256;
- TL0 =(65536-917)%256;
- Num++;
- if (Num==10000)
- {
- Num==0;
- }
- StorageData[ 0 ] = DuanMa[ Num / 1000 ];
- StorageData[ 1 ] = DuanMa[ ( Num % 1000 ) / 100 ];
- StorageData[ 2 ] = DuanMa[ ( ( Num % 1000 ) % 100 ) / 10 ];
- StorageData[ 3 ] = DuanMa[ ( ( Num % 1000 ) % 100 ) % 10 ];
- }
- void Display( UINT8 FirstBit, UINT8 Num )//UINT8 FirstBit:要顯示的位;UINT8 Num:要顯示的數碼管的位數
- {
- UINT8 i;
- for( i = 0; i < Num; i++ )
- {
- DataPort=0;
- LE1 = 1;
- LE1 = 0;
-
- DataPort = WeiMa[ i + FirstBit ];
- LE2 = 1;
- LE2 = 0;
-
- DataPort = StorageData[ i ];
- LE1 = 1;
- LE1 = 0;
-
- DelayMs(1);
- }
- }
- void main (void)
- {
- chushihua();
- if(K1==0)
- {
- while(1)
- {
- if (K2==0)
- {
- TR0=0;
- }
- Display( 2, 4 );
- }
- }
- }
-
-
復制代碼
|
|