前言-----

因要参加电赛,接触到STC89C52RC(A51)单片机 

 

 前言-----_第1张图片

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口。

一、跑马灯

 前言-----_第2张图片

 使用程序控制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电亮下一个

二、独立按键控制蜂鸣器

前言-----_第3张图片

 前言-----_第4张图片前言-----_第5张图片

 在实验版有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);
		 }
	 }
}

你可能感兴趣的:(51,单片机,嵌入式硬件)