エレクトリックコンペティションに参加したくてシングルチップマイコンSTC89C52RC(A51)に出会いました
STC89C52RC ピンの機能
1 電源:
①VCC - チップ電源、+5V に接続;
②VSS - グランド端子;
2. クロック: XTAL1、XTAL2 -入力と出力を反転する
水晶発振器回路。
3. 制御線:
制御線は 4 本あります。
ALE/PROG: アドレス ラッチ許可/内蔵 EPROM プログラミング パルス
① ALE 機能: P0 ポートから送信される下位 8 ビット アドレスをラッチするために使用します。
② PROG 機能: 内蔵 EPROMチップ、EPROM プログラミング中に、このピンはプログラミング パルスを入力します。
PSEN: 外部 ROM リードストローブ信号。
RST/VPD: リセット/スタンバイ電源。
① RST(リセット)機能:リセット信号入力端子です。
② VPD 機能:Vcc 停電時にバックアップ電源に接続します。
EA/Vpp: 内部および外部 ROM 選択/オンチップ EPROM プログラミング電源。
① EA機能:内部ROM、外部ROM選択端子。
② Vpp 機能:EPROM を内蔵したチップの場合、EPROM プログラミング時にプログラミング電源 Vpp が印加されます。
4. I/O ポート ライン: P0、P1、P2、および P3 は 4 つの 8 ビット ポートです。
ポート P0 はトライステート双方向ポートで、一般にデータ バス ポートとして知られています。これは、このポートだけが外部メモリの読み取り/書き込み操作に直接使用できるためです。ポート 0 は、外部メモリの下位 8 ビットマップ 1 アドレスの出力にも使用されます。時分割出力のため、アドレスデータをラッチするラッチを外部に追加する必要があり、アドレスをラッチし、信号はALEを使用します。
P1ポートはユーザー専用のI/Oポートであり、準双方向ポートです。
P2 ポートは、スレーブ システムが拡張されたときに上位 8 ビット アドレス ラインとして使用されます。外部メモリを増設しない場合、P2 ポートはユーザ I/O ポート線としても使用でき、P2 ポートは準双方向ポートでもあります。
ポート P3 はデュアル機能ポートであり、このポートの各ビットは、第 1 の I/O 機能または第 2 の I/O 機能として独立して定義できます。1 番目の機能として使用する場合は、P1 ポートと同様の動作になります。
1. マーキー
プログラムを使用して P20 ~ P27 (0,1) の出力レベルを制御し、LED モジュール D1 ~ D8 発光ダイオードのサイクル点灯を実現し、マーキー効果を完成させます。
/*定义LED引脚*/
#define LED P2
/*延迟函数*/
void Delay(unsigned int a)
{
while(a--);
}
//流水灯
void Running()
{
u8 i;
LED = 0xfe;
Delay(50000);//大约延时450ms
while(1)
{
for(i = 0;i<7;i++)
{
LED = _crol_(LED,1); //左移一位 0xfe(11111110)--->0xfd(11111101)
Delay(50000);
}
for(i = 0;i<7;i++)
{
LED = _cror_(LED,1); //右移一位 0x7f(01111111)--->0xbf(10111111)
Delay(50000);
}
}
}
LED をピン P2 として定義します。P2 には値 0xfe、バイナリは 11111110、合計 8 ビットがそれぞれ P27 ~ P20 に割り当てられます。P20 ピンが 0 - 低電圧、ライトがオン、1 - 高の場合電圧がオフになっています。左、右にサイクルし、次のスイッチがオンになるまで 450 ミリ秒待ちます
2. ブザーを制御する独立したボタン
実験版では、STC80C51 の P30 ~ 33 ピンにそれぞれ 4 つの独立したボタン k1 ~ k4 があり、ボタンが押されると、対応するピンが接地され、値 0 が割り当てられます。キーの押下に応じて、プログラムを通じて P30 ~ P33 のどれが 0 であるかを判断します。
ブザーのBEEFはワイヤレス4相ステッピングモーターULN2003DのOUT5端子に接続されており、この端子の信号はIN5に相当するP25端子の影響を受けます。
/*定义蜂鸣器*/
sbit BEEP = P2^5;
void C_buzzer()
{
while(1)
{
if(P31==0)//按下关闭
{
BEEP=1;
while(1)
{
if(P31==0)//当再次按下时,再次启动
{
break;
}
}
}
else
{
BEEP = ~BEEP;
Delay(50000);
}
}
}