デジタル、ボタン、タイマーアプリ

3つのキー、3つのデジタルを備えた8051ストップウォッチのデザイン、。ボタンは、開始、一時停止するために使用されている
学生の数、デジタル時間表示を表示します。開始後3つの学生番号の後に表示します。スタートボタンを押した後、ディスプレイ0.00 0.01
周波数秒から0.00刻み、一時停止中に一時停止ボタンを押したときの循環後に9.99に増加、一時停止を押して、再びインクリメントし続ける
ループ。ディスプレイ学生番号にボタンを押すと、学生番号が表示されます。

1、シミュレーション回路:

 

 

 2.プログラミング:

(1)ディレクトリ構造:

 

 

 (2)主な機能:

書式#include <reg52.h> 
書式#include <display.c> 
書式#include <key.c> 
符号なし整数CP。
無効表示(無効)。
無効キー(無効)。
/ * タイマ0中断服务函数* / 
無効 timer0_isr(無効)割り込み1
{
    TH0は =(65535 - 2000)/ 256 ;          // リロード初期値 
    TL0 =(65535 - 2000)%256 ;          // リロード初期値 
    CP ++;     // 2msの2000年代表、LSは1000ミリ秒= 
    IF(MODE == 2) = CP 0 ; // プレス一時停止ボタン、モードが2である
    {
         IF(CP> = 5// 0.01sでの
    {
         CP = 0 ;
        Xiaoshu ++ ;
    }
    IF(Xiaoshu> = 100// Lsに
    {
        Xiaoshu = 0 ; ++;                          // 秒1 
        閃光=〜フラッシュ;
    }
    IF(SEC> = 10)秒= 0 ;               // 10Sへ
    }
    
    P0 = 0xffで
    ディスプレイ();                  //は、機能表示を呼び出します
}

/ * ******タイマ0の初期化機能******* * / 
無効 Timer0_Init(無効
{
    TMOD = は0x01 ;                      // T0作業1。 
    TH0である=(65535 - 2000)/ 256 ;          // マシン充填オーバーフローパルスカウント2000割り込み開始 
    TL0 =(65535 - 2000)%256 
    EA = 1 ;    // 開くグローバル割り込み 
    ET0 = 1 ;    // 割り込みオープンT0 
    TR0 = 1 ;     // タイマーを開始
}

/ * *****主な機能******* * / 
無効メイン()
{
    
    timer0_init();                  // コールtimer0_init割り込み機能

    一方、1 
    {
        
        キー();                          // ファンクションキーを呼び出し     
    }
    
    
}

(3)表示機能:

表示モードに対応して異なる値(学校第二表示OR)

#include <reg52.h> 
符号なしチャー I、J、xuehao = 113、xiaoshu = 0、秒= 0 、フラッシュ、モード。
符号なしchar型コードseven_seg [ 10 ] = { 0xc0から0xf90xA4の0xb00x990x920x82と0xf80x80を0x90を}。  
無効表示(無効
{
      IF(MODE == 0// デフォルトでゼロに初期化MODE、ディスプレイ学生数
      {
         スイッチ(I)
        {
            ケース 0:P0 = seven_seg [xuehaoの%10 ]; = P1の0x04のBREAK ; //はビット
            ケース 1:P0 = seven_seg [xuehao / 1010 ]; P1の= 0×02 ; BREAK ; // 10 
            ケース 2:P0 seven_seg = [xuehao / 100 ]; P1の= は0x01 ; BREAK ; // 
        }
        I ++ ;
        もし(I> = 3)iは= 0 
      }
        
      もし(モード== 1 
      {
        スイッチ(J)
        {
            ケース 0:P0 = seven_seg [xiaoshuの%10 ]; P1 = 0x04を休憩;
            ケース 1:P0 = seven_seg [xiaoshu / 10 ]; P1 = 0×02 ; 休憩;
            ケース 2:P0 = seven_seg [秒] - (0x7Fを |フラッシュ); P1 = 0×01 ; 休憩;
        }
        J ++ ;
        もし(J> = 3)J = 0 
      }
        
      もし(モード== 2 
      {
        スイッチ(J)
        {
            ケース 0:P0 = seven_seg [xiaoshuの%10 ]; P1 = 0x04を休憩;
            ケース 1:P0 = seven_seg [xiaoshu / 10 ]; P1 = 0×02 ; 休憩;
            ケース 2:P0 = seven_seg [秒] - (0x7Fを |フラッシュ); P1 = 0×01 ; 休憩;
        }
        J ++ ;
        もし(J> = 3)J = 0 
      }
}

(4)キー:

キーの主な役割は、表示を行い、対応する機能表示モードの値を変更することによって、そのモードを変更することです

書式#include <reg52.h> 
SBITキー1 = P2 ^ 3。 ; // スタート 
SBIT KEY2 = P2 ^ 4。 ; // 一時停止 
SBIT KEY3 = P2 ^ 5。 ; // ショー学生数 
符号なしchar型のMODEを、
 無効ディレイ(符号なしint型の X)// 遅延機能が実装短い遅延(プログラムを実行することにより、不正確な、累積回数遅延時間)
{
     一方(x-- )。
}

無効キー(無効// 使用キーが効率的な方法を押され
、{
     IF(キー1 == 0// 起動キー(キーが押されている場合)
    {
        ディレイ(400);               // デバウンス
        IF(キー1 == 0// OKボタンが本当に押された場合、デバウンス後の
        {
            モード = 1 
        }
        一方、(KEY1 == 0); // その後、作業は、しばらく行われていません
    }
    
    IF(KEY2 == 0// 一時停止
    {
        遅延(400)。              // 消抖
        場合(KEY2 == 0 
        {
            モード = 2 
        }
        一方、(KEY2 == 0); // 次に、ない作業
    }
    
    IF(KEY3 == 0// 学生番号を表示します
    {
        遅延(400)。              // 消抖
        場合(KEY3 == 0 
        {
            モード = 0 ;
        }
        一方、(KEY3 == 0); // 次に、ない作業
    }
}

おすすめ

転載: www.cnblogs.com/zhai1997/p/12127749.html