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から、0xf9、0xA4の、0xb0、0x99、0x92、0x82と、0xf8、0x80を、0x90を}。 無効表示(無効) { IF(MODE == 0)// デフォルトでゼロに初期化MODE、ディスプレイ学生数 { スイッチ(I) { ケース 0:P0 = seven_seg [xuehaoの%10 ]; = P1の0x04の、BREAK ; //はビット ケース 1:P0 = seven_seg [xuehao / 10%10 ]; 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); // 次に、ない作業 } }