[STC MCU学習]高度な周辺機器とプロジェクト第3章:包括的なプロジェクト-温度アラーム

【朱さんのコース概要侵入】
 

冬休み中にこのコースを更新しますので、お楽しみに!

最初の部分、章リスト

シングルチップマイコンのプロジェクトの2.4.1。一般的な知識
小型シングルチップ・プロジェクトに2.4.2。はじめに
2.4.3。プロジェクトの確立とフレームワーク構築
2.4.4。最初のモジュールのシリアルポート
2.4.5。DS18B20移植1
2.4.6。DS18B20移植2
2.4 .7。問題解決とLCD1602移植2.4.8
。温度測定とLCD1602ジョイント調整2.4.9。DS1302
移植とジョイントデバッグ
2.4.10。構造を使用して時間の読み取りと書き込みを実現する
12.4.11。構造を使用して読み取りと書き込みの時間の実現22.4.12
。時間表示のデバッグ
2.4.13。時間書き込み機能のパッケージ化
2.4.14。ブザーのパッケージ化とデバッグ
12.4.15ブザーのパッケージ化とデバッグ
22.4.16
。ブザー周波数設定の問題解決2.4.17。ステッパーモーターの移植とデバッグ
2.4.18。ボタンの移植とデバッグ
2.4.19。ボタンピンの競合の解決
2.4.20。赤外線の移植とデバッグ
2.4。 21.プロジェクト関数の並べ替えと定義
2.4.22。LCD1602はボタン制御カーソルの移動と点滅を
実現します12.4.23.LCD1602はボタン制御カーソルの移動と点滅を
実現します22.4.24.LCD1602はボタン制御カーソルの移動と点滅を実現します32.4.25
。 LCD1602は、ボタン制御カーソルの移動と点滅を実現します
42.4.26。プログラムフローの並べ替えと基本的な表示機能の実現
2.4.27
バグの検索と解決2.4.28。問題を解決するためのデバッグの増加
2.4.29。デジタル加算および減算調整機能の
分析2.4.30。時間加算および減算調整機能の実現
12.4.31。時間加算および減算機能の完全な実現2


第二部、章の紹介

2.4.1。シングルチップマイクロコンピュータプロジェクトの
    常識このセクションでは、シングルチッププロジェクト開発の常識的な内容をマクロの観点から説明し、次にこのプロジェクトの足がかりと目標について説明します。
2.4.2。
    小さなシングルチップマイクロプロジェクトの概要このセクションでは、小さなプロジェクトの具体的な計画と手順について詳しく説明し、私たちが何を作りたいのか、どのように行うのか、途中でどのような問題が発生するのか、そして学習後にどのような助けになるのかを全員に知らせます。そして意味。
2.4.3。プロジェクトの確立とフレームワークの構築
    このセクションでは、標準化されたプロジェクトプロジェクトを確立し、組織構造を標準化し
ます。2.4.4。最初のモジュール-シリアルポート
    このセクションでは、シリアルコードを移植し、
2.4.5をデバッグおよびカプセル化します。DS18B20移植1
    このセクションでは、
ds18b20センサーのコードを移植し、テストとパッケージ化を実行します2.4.6.DS18B20移植2
    このセクションでは、引き続きds18b20センサーのコードを移植し、テストとパッケージ化を行います
2.4.7。問題解決とLCD1602移植
    このセクションは前のセクション用ですシリアルポートの出力問題を分析し、lcd1602を移植し、パッケージングとテストを実行します。2.4.8
。温度測定とLCD1602共同調整    
    このセクションでは、温度モジュールとLCD1602表示モジュールを共同でデバッグし、最終的にLCDでのリアルタイム温度表示を実現します。
2.4.9。DS1302の移植と共同デバッグ
    このセクションでは、DS1302のドライバーの移植を開始します。時間をカプセル化するために、C言語で構造を紹介します。
2.4.10。構造を使用して時間の読み取りと書き込みを実現する1.
    このセクションでは、構造のカプセル化に基づいて時間の読み取りと表示の機能を記述し始めます。
2.4.11。構造を使用して読み取りと書き込みの時間を実現する2
    このセクションは、LCD1602の前のセクションの完了時間の表示を継続します。プログラミングの詳細が多数あります。
2.4.12。時間表示の
    デバッグこのセクションでは、プログラムをデバッグおよび検証し、BCDコードおよび16進変換のコードを追加します。
2.4.13。時間書き込み関数の    
    カプセル化このセクションでは、主にDS1302に時間を書き込むコードをカプセル化します。将来の時間の最終調整機能では、これらの書き込み関数を使用します
。2.4.14。ブザー1のカプセル化とデバッグ
    このセクション主に元のコードを移植し、コアコードを理解してテストするために、ブザーのドライバーの移植を開始します。
2.4.15。
    ブザーのカプセル化とデバッグ2    このセクションは、前のセクションから続き、ブザーの操作インターフェイスをカプセル化し、外部から呼び出すために使用可能なインターフェイスをカプセル化します。
2.4.16。ブザー周波数の設定の問題が解決されました。
    このセクションでは、ブザー周波数の設定が成功しないという問題を調査して解決します。
2.4.17。ステッパーモーターの移植とデバッグ
    このセクションでは、ステッパーモータードライブを移植し、将来の警報装置として使用するためにカプセル化します。
2.4.18。キーの移植とデバッグ
    このセクションでは、4 * 4マトリックスキーボードを移植してデバッグし、キー値を取得してLCD1602に表示します。
2.4.19。
    ボタンピンの競合の解決このセクションでは、ボタンピンの競合の問題を解決し、ボタンAPIを完全にデバッグします
2.4.20。赤外線の移植とデバッグ
    このセクションでは、赤外線リモートコントロールを移植してデバッグするか、割り込みモードを使用します達成しました。
2.4.21。プロジェクト機能の分類と定義
    このセクションでは、製品によって実装される機能を定義し、実装の詳細を明確に分析して、後続のハンズオン
2.4.22を容易にします。LCD1602は、ボタン制御カーソルの移動と点滅を実現します1
    このセクションでは、ボタンを使用してカーソル移動と点滅を制御する機能の実現を開始します。このセクション主にSCMプロジェクトの階層化された知識について話しました。
2.4.23。LCD1602はボタン制御カーソルの移動と点滅を実現します2
    このセクションは前のセクションから続き、ボタン制御カーソルの移動と点滅機能、主にモード調整機能の実現を実現し続けます。
2.4.24。LCD1602は、ボタン制御カーソル移動と点滅を実現します。3
    このセクションは、前のセクションから継続して、ボタン制御カーソル移動と点滅機能、主にカーソル移動の実現を実現します。
2.4.25。LCD1602はボタン制御カーソルの移動と点滅を実現します4    
    このセクションは前のセクションから続き、主にデバッグと遅延影響テストのために、ボタン制御カーソルの移動と点滅機能を実現し続けます。
2.4.26。プログラムフローの並べ替えと基本的な表示機能の実現
    このセクションでは、プログラムフローを明確に並べ替え、温度と時間の表示を追加します。
2.4.27。バグの発見と解決
    このセクションでは、前のセクションで追加した関数のロジックを分析および修正して、プログラムのプロセス全体をより正確にします。
2.4.28。問題を解決するためのデバッグの追加
    このセクションでは、バグの検出、問題の解決、および機能の実装のためのシリアルデバッグを追加します。
2.4.29。デジタル加算および減算調整機能の分析
    このセクションでは、カーソルで選択した数値に1を加算および減算する機能の実現を開始します。このセクションでは、温度の加算および減算に焦点を当てます
。2.4.30。時間の加算および減算調整機能は、1
    を実現します。選択した数値の1を加算および減算する機能。このセクションでは、時間の加算および減算に焦点を当てます。
2.4.31。時間加算および減算機能が完全に実現されています2
    このセクションでは、スイッチケースを使用して時間加算および減算機能を再実装し、温度アラーム機能を追加します
    

    
パート3、教室の記録

2.4.1。シングルチップマイクロコンピュータプロジェクトの
常識2.4.1.1、業界の常識
(1)シングルチップマイクロコンピュータ製品の主な産業:小型家電製品、モノのインターネット端末機器など、複雑でない機能を必要とし、大画面ディスプレイを必要とせず、ほとんどのヒューマンマシンインターフェイスはボタン(機械式)です。タイプ、容量性タッチタイプ)、長期の信頼性の高い操作が必要です。
(2)製品開発には、製品定義(製品マネージャー)+外観、構造設計(構造エンジニアなど)+電子ハードウェア(ハードウェアエンジニア)+ソフトウェア設計(ソフトウェアエンジニア)が含まれます
(3)一般的な手順:スキームを選択した後、最初にスキームを使用しますベンダーが提供する開発ボードは、ハードウェア接続とコア機能のソフトウェア開発に使用され、独自のハードウェアボードの移植と設計(コンポーネントの送信、コンポーネントの購入、はんだ付けの回収など)、および移植とデバッグが行われます。
2.4.1.2。ソリューションの選択
(1)業界での経験
(2)使い慣れた使い慣れたソリューションを選択する
(3)より専門的な方向性のための方向指向ソリューションを選択する
(4)開発効率、コスト、パフォーマンスの拡張、および安定した供給
2.4.1.3などの商品、このコースの位置付けと思考
(1)学習は知識と能力構築のためであり、プロジェクトの実施は製品指向です。
(2)このコースの目標は、手元にあるハードウェアリソースを最大限に活用し、実用的なプロジェクトを実行することです。主な目的は、より多くのプロジェクトソースコードとより複雑な関数を記述し、プログラミング能力、デバッグ能力、および制御能力。
(3)実際には、51が使用するプロジェクトはそれほど複雑ではありません。51のより大きなアプリケーションは、専用のSoC(容量性タッチIC、指紋認識ICなど)を作成することです。


2.4.2。小型シングルチップマイクロコンピュータプロジェクトの
概要2.4.2.1プロジェクト名:51個のシングルチップマイクロコンピュータに基づく温度アラーム
(1)メインコントロール:stc51;プログラミング言語:C言語;開発環境:Keil;主な機能:
(2)システムマンマシンインターフェース:ボタンとIR:変更時間
(3)1602画面に時間と温度が表示されます。温度が所定の値を超えると、ブザーとモーターの動作アラーム
2.4.2.2、ハードウェアリソース割り当て
    1602画面P0; P2 ^ 7; P2 ^ 5; P2 ^ 6;
    4 * 4ボタンP2
    シリアルポートP3.0P3.1
    IR(赤外線)P3.2
    センサーDS18B20 P3.7; DS1302 P3.4 P3.6
    ステッパーモーター(4線式バイポーラ)P1.0- P1.5
    ブザーP1.62.4.2.3
、プロジェクトプロセス
(1)基盤となるハードウェアモジュールオペレーティングライブラリの作成、移植、パッケージ化、テスト
(2)アプリケーションレイヤー機能の分類と定義
(3)各機能を1つずつ実装する、および共同デバッグ、機能が正常かどうかをテストします。
(4)実際のテストと使用、およびバグの解決と保守の継続。
3.4.2.4。いくつかのマイナーな問題
(1)プロジェクトで使用する必要があるいくつかの追加の知識(C言語構造など)、それが使用されるときに議論されます。体系的に話す方法はわかりませんが、それでも主に使用するためのものです。追加の学習が必要な場合は、追加の情報を探す必要があります。
(2)文法や形式に注意する
(3)授業を聞くのではなく、練習することがポイントです。


2.4.3。プロジェクトの確立とフレームワークの構築
2.4.3.1、プロジェクトプロジェクトの確立
(1)各フォルダーの確立
(2)Keilプロジェクトの確立
(3)cファイルとhファイルの作成とコンパイルの試行
2.4.3.2、ポート割り当てのチェックと確認
(1 )主にP2ポートを決定する
(2)フォローアップのアイデア:基礎となるドライバーを1つずつ配線してデバッグし、問題     が発生した場合
    1602画面P0; P1 ^ 4; P1 ^ 5; P1 ^ 6;
    4 * 4ボタンP2
シリアルポートP3を調整してみてください。 0 P3.1
    IR(赤外線)P3.2
    センサーDS18B20 P3.7; DS1302 P3.4 P3.5 P3.6
    ステッパーモーター(4線式バイポーラ)P1.0-P1.3
    ブザーP1.7


2.4.4。最初のモジュール-シリアルポート
2.4.4.1、移植、デバッグ、および基本機能の確認
(1)ドライバーソースコードの移植
(2)テスト
2.4.4.2、パッケージ
(1)パッケージとは
(2)パッケージの下部インターフェイスの練習
(3) )プラス説明ヘッダー


2.4.5_6。DS18B20移植1_2の
問題:double t = 25.4;シリアルポートを使用して25.4をシリアルポートアシスタントに出力し、シリアルポートアシスタントを表示するには、
バイナリモードとテキストモードの2つの表示モードがあります。textメソッドが最も直感的ですが、シリアルポートを介して送信する必要があるのは、doubleではなく、intではなく、ASCII文字列です。
つまり、25.4を表示する場合は、uart_send_string( "25.4");を取得する
ため、次のことができる関数が必要です。ダブルタイプtは対応する文字列に変換され、表示のためにシリアルポートに送信されます。
この関数を取得するにはどうすればよいですか。方法1:自分で書く;方法2:ライブラリ関数を使用する


2.4.7。問題解決とLCD1602移植
2.4.7.1、前のセクション
2.4.7.2の問題分析と解決策のアイデア、LCD1602移植とパッケージング
1602画面P0; P2 ^ 5; P2 ^ 6; P2 ^ 7;


2.4.8。温度測定とLCD1602の共同調整


2.4.9 .DS1302移植と共同デバッグ2.4.9.1
、DS1302移植
2.4.9.2、時間データのカプセル化
(1)時間=年+月+日+時間+分+秒+曜日なので、時間は複雑です変数(温度と比較して単純な変数です)
(2)C言語は、複雑な変数を処理するための構造の文法スキルを提供します
(3)構造タイプと構造変数の2つの概念を明確に区別します
(4)この文法を構造化します使用する場合のルーチンがあります。最初のステップは構造タイプを定義すること、2番目のステップはタイプを使用して構造変数を生成する、3番目のステップは構造変数を使用する(実際には、構造変数にラップされたコンテンツを使用する)


2.4.10_11。構造を使用して1_2の読み取りと書き込みの時間を実現します


2.4.12。時間表示のデバッグ
2.4.12.1。プログラムのデバッグ方法
(1)最初の最も重要なステップは、問題を特定することです
(2)2番目のステップは、コードを変更し、効果を確認してから、変更します。

C言語でのビット操作については、「Ms。ZhuYoupeng EmbeddedLinuxコアコース」のパート4および「C言語の高度なトピック」のパート2を参照してください。


2.4.13。タイムライト機能のパッケージ


2.4.14。ブザーのパッケージ化とデバッグ1


2.4.15。ブザー2のパッケージ化とデバッグ


2.4.16。ブザー周波数の設定の問題が解決されました


2.4.17。ステッパーモーターの移植とデバッグ
配線:
P1.0-A-
P1.1-A +
P1.2-B-
P1.3-B +


2.4.18。キーの移植とデバッグ

    
2.4.19。キーピンの競合の解決

    1602画面P0; P2 ^ 5; P2 ^ 6; P2 ^ 7;
    4 * 4ボタンP1
    シリアルポートP3.0P3.1
    IR(赤外線)P3.2
    センサーDS18B20 P3.7; DS1302 P3.4 P3.5P3。 6
    ステッパーモーター(4線式バイポーラ)P2.0-P2.3
    ブザーP2.4


2.4.20。赤外線の移植とデバッグ
ステップ1:割り込みを使用して赤外線受信をデコードし、
2番目のステップを完了します。赤外線受信の中断が長すぎるため、他のモジュールと競合しやすくなります。実行する方法?解決策は
、(割り込みisrではなく)外部で遅延し、割り込みではなく、赤外線データのフレームを受信することです。
困難と問題はどこにあり
ますか1。中断しますか?赤外線リモートコントロール信号は非同期であるため、割り込み
2で処理する必要がありますが、受信時間が長すぎて割り込みに入れることができないため、割り込みで受信を開始し、外部に渡して受信作業全体を行います。
3.正確な遅延機能の実現は、外部で行う場合の鍵です。遅延方式は使用できませんが、タイマーを使用して
最終的な要約を実現します。実際、非常に複雑で面倒です。


2.4.21。プロジェクト機能の
組み合わせと定義2.4.2.1.1機能計画
(1)デフォルトで時間と温度
を表示する(2)温度しきい値の表示と調整
(3)温度がしきい値を超えた後のアラーム
(4)時間調整
(5)拡張機能:アラームクロック
2.4.2.2、詳細実現
(1)時間と温度の表示形式
T:23.6-37.9
20170423-162312
(2)LCD1602に表示するときにカーソルをセットすると、通常モードと調整モードの2つのモードになります。通常モードではカーソル表示はありませんが、調整モードではカーソルが表示されます。カーソルが点滅するグリッドが調整対象のグリッド内容です。
(3)ボタンにはモード切り替えボタン(たとえば、キー値が0に定義されているボタン)があり、デフォルトは通常モードです。1回押すと調整モードに切り替わり、次に押すと通常モードに戻ります。
(4)調整モードでのカーソルの動きはキーによって異なります。上下左右の4つのキーがあります。
(5)カーソルが特定のグリッド上にあるときに、+または-ボタンを押すと、1を加算して1を減算することによって数値が処理されます。
(6)ハードウェアアラームクロック、ソフトウェアアラームクロック


2.4.22。LCD1602は、ボタン制御カーソルの移動と点滅を実現します1.
シングルチップマイクロコンピュータプロジェクトの階層化:
2層システム:ドライバ層、アプリケーション層
3層システム:下部ドライバ層、上部ドライバ層、およびアプリケーション層は
3つの層に分割されますシステム:ドライバーレイヤー、ミドルレイヤー、アプリケーションレイヤー


2.4.23。LCD1602は、ボタン制御カーソルの移動と点滅2を実現します。

C言語の2種類の反転
!論理反転
〜ビット単位反転〜0b1011 == 0b0100
x = !! y;

定義:keyValue = 1の場合、このボタンはモード調整ボタンとして定義されます。


2.4.24_25。LCD1602は、ボタン制御カーソルの移動と点滅3_4
ボタンの定義を実現します:左に2、上に3、右に4

絶対座標系、相対座標系


2.4.26。プログラムフローの並べ替えと基本的な表示機能の実現
2.4.26.1プログラムフローの並べ替え
(1)キー取得とその他のコードの合理的な配置
(2)1つのシングルチップマイクロコンピュータプログラムのみが1つのメインプログラムのみを持つことができ
ます2.4.26.2基本的な表示機能実現
(1)温度表示
(2)しきい値温度表示
(3)時間表示
(4)実現予定:しきい値温度調整


2.4.27。バグの発見と解決

プログラム操作ロジック:
1。モード調整ボタンを押したときに、通常モードから調整モードに変更した場合は、温度と時間の更新を停止し(この時点でLCD1602に表示されている内容は、現在表示されている内容です)、キーイベントに応答します。 (主に2種類、2、3、4ボタンでカーソル位置調整、5、6ボタンでカーソル位置数調整)
2。モード調整ボタンを押したとき、調整モードから通常モードに変更した場合次に、温度と時間の更新を復元し、ボタン2、3、4、5、6への応答を停止し、ボタン1のみに応答します。同時に、調整モードで行われた調整結果が有効である必要があります(たとえば、温度しきい値が変更された場合、温度しきい値を更新する必要があります。たとえば、時間調整を有効にするには、ds1302に書き込む必要があります)。


2.4.28。問題を解決するためにデバッグを増やします


2.4.29。デジタル加算および減算調整機能の分析


2.4.30。時間加算および減算調整機能の実現1

20170425153919-2


2.4.31。時間の加算と減算の機能が完全に実現されています2
ユーススイッチケース

51シングルチップマイクロメータのベアメタルプログラムでは、DS18B20のタイミング時間は遅延法で計算されますが、実際、これは
非定型のアプローチです。本当の主流のアプローチは
、タイミングを他のコードの影響を受けないように、タイマーを使用して正確なタイミングを実現することです(システムサイスティックはオペレーティングシステムでのタイミングに使用されます)。
ここで発生した問題は、ブザーのコードがメインプログラムの遅延機能に影響を与え、遅延が不正確になることです。
そのため、DS18B20が読み取る温度が間違っている場合があります。解決策は、タイマーを使用してDS18B20の遅延を実現することです。できる。

一般的な51シングルチップマイクロコンピュータプログラムはそれほど複雑ではありません。51はもともと数十年前のもので、単純なタスクを実行していました。
より複雑な設計にはSTM32を使用することをお勧めします。また、STM32も非常に安価で、費用対効果も高くなっています。

おすすめ

転載: blog.csdn.net/qq_27148893/article/details/111302179