因要参加电赛,接触到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(Reset)功能:复位信号输入端。
② VPD功能:在Vcc掉电情况下,接备用电源。
EA/Vpp:内外ROM选择/片内EPROM编程电源。
① EA功能:内外ROM选择端。
② Vpp功能:片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。
4.I/O口线:P0、P1、P2、P3共四个八位口。
P0口是三态双向口,通称数据总线口,因为只有该口能直接用于对外部存储器的读/写操作。P0口也用以输出外部存储器的低8位地图1址。由于是分时输出,故应在外部加锁存器将此地址数据锁存,地址锁存,信号用ALE。
P1口是专门供用户使用的I/O口,是准双向口。
P2口是从系统扩展时作高8位地址线用。不扩展外部存储器时,P2口也可以作为用户I/O口线使用,P2口也是准双向口。
P3口是双功能口,该口的每一位均可独立地定义为第一I/O功能或第二I/O功能。作为第一功能使用时操作同P1口。
一、跑马灯
使用程序控制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,共八位分别对于P27-P20,当P20引脚为0-低电压时电亮,1-高电压时熄灭。循环左移,右移并等待450ms电亮下一个
二、独立按键控制蜂鸣器
在实验版有4个独立按键k1-k4,分别对于STC80C51的P30-33引脚,当按键按下后,对应的引脚接地,即赋值0。通过程序判断P30-P33哪个为0对应按键按下。
蜂鸣器的BEEF接无线四项步进电机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);
}
}
}