(1)LED

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 1110P2 レジスタの最下位ビットには値 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 つの方法があります。

  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 にも最初の行を配置する必要があります。ローカル変数の定義が最初の行に配置される必要がある限り、関数本体の行

おすすめ

転載: blog.csdn.net/Falling_Asteroid/article/details/130736508