LED のプラス極とマイナス極: 大きな赤旗 - マイナス極、小さな赤旗 - プラス極
回路図で抵抗/コンデンサの値を確認する方法:
例えば:
102 = 10 2 = 10 * 10 ^ 2 = 1000
473 = 47 3 = 47 * 10 ^ 3 = 47000
MCU は TTL 電源周波数を使用します: 高レベル (ロジック 1) 5V 低レベル (ロジック 0) 0V
MCU の電源がオンになると、デフォルトですべてのIO ポートが高レベルになります。
LED の一端は VCC (正極) に接続され、もう一端はチップの P20 ~ P27 ポートに接続され、P20 ~ P27 ポートはチップ内の P2 レジスタによってマッピングされます。レベルが低い場合は LED が消灯し、出力が低い場合は LED が点灯します。
最初の LED のみが点灯している場合、1111 1110
P2 レジスタの最下位ビットには値 0 が割り当てられ、ロー レベルが出力されます。これはコードでは 16 進数で表されます。
#include <REGX52.H>
void main(){
P2 = 0xfe; // 1111 1110
while(1){
}
}
MCU は main 関数を実行した後、再度 main を実行します。
Keil -> ターゲットのオプション -> 出力 -> hex ファイルの作成
HEX ファイル形式は、マイクロコントローラーにプログラムしてマイクロコントローラーによって実行できるファイル形式です。C またはアセンブリのソース ファイルは、IAR、KEIL などのさまざまなエディタを使用して HEX ファイルにコンパイルできます。
SCM システム周波数: 12MHz、1 秒あたり 100 万回の操作
STC-ISP によって生成された遅延メソッド -> ソフトウェア遅延計算ツール
#include <INTRINS.H>
void Delay500ms() //@12.000MHz
{
unsigned char i, j, k;
_nop_(); // 空语句,INTRINS.H中声明
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
マイコンでは int は 16 ビット (unsigned int: 0 ~ 65535 int: -32768 ~ 32767)
void Delayxms(unsigned int xms) // 指定延时时间ms
{
unsigned char i, j;
while(xms--){
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
各レジスタとそのビットは REGX52.H ヘッダー ファイルで定義されます。
sfr P2 = 0xA0;
/*------------------------------------------------
P2 Bit Registers
------------------------------------------------*/
sbit P2_0 = 0xA0;
sbit P2_1 = 0xA1;
sbit P2_2 = 0xA2;
sbit P2_3 = 0xA3;
sbit P2_4 = 0xA4;
sbit P2_5 = 0xA5;
sbit P2_6 = 0xA6;
sbit P2_7 = 0xA7;
独立したボタンは MCU の P30 ~ P33 ポートに接続されており、レジスタ P3 の最初の 4 ビットを使用してマップされ、ボタンを押すと 0、放すと 1 になります。
キーのデバウンス:
機械接点の弾性効果により、スイッチを閉じてもすぐに安定して接続されず、また、オフ時に突然切断されないため、スイッチを閉じて使用する際に一連の振動が発生します。切断されました。
キーをデバウンスするには 2 つの方法があります。
- ラインを追加し、このラインをこれらの回路に通していくつかのトリガーなどを実行し、いくつかの回路を通じて動作させ、このジッターでオーバーシュートを実行してから、マイクロコントローラーをクリックします。なんだか難しい!
- ソフトウェアでディレイ機能を実行し、このデバウンスを操作します。
独立したボタン制御 LED 表示バイナリ:
unsigned char
型変数を使用してレジスタを表現します。符号なし文字型 (1 バイト = 8 ビットで占有) は、8 ビットのバイナリ データにのみ対応します。
unsigned char p = 0;
while(1){
if(P3_1 == 0){
Delayxms(20);
while(P3_1 == 0);
Delayxms(20);
p++;
P2 = ~p;
}
}
ローカル変数の定義は関数の最初の行に配置する必要があり、メイン関数、for、while、if にも最初の行を配置する必要があります。ローカル変数の定義が最初の行に配置される必要がある限り、関数本体の行