单片机最小系统由一个STC89C52单片机芯片和晶振及两个电容构成(这里我们不考虑复位电路),如图1所示

20210611_fig001.jpg

其中,图1右侧的喇叭电路主要用于测试该单片机最小系统是否工作。当然,我们也可以直接用一个简单的发光二极管来测试。图1中对应的元器件实物图如图2所示:

20210611_fig002.jpg

图1中的PNP三极管,我们选用的是最常用的S9012三极管。注意:一般来说,三极管的管脚辨别方法是:有字的平面朝自己,管脚朝下,从左到右依次为e, b, c。根据图1的电路图焊接好电路,如图3所示:

20210611_fig003.jpg

最后,我们就可以编写程序来测试单片机是否能够正常工作了。在图1中,蜂鸣器连接的是P2.4管脚,这时我们只需要将该管脚电平置低,蜂鸣器就会响,如果是发光二极管,同理。程序过于简单,这里就跳过了。下面我们给出使用蜂鸣器唱生日快乐歌的程序(如果使用无源蜂鸣器,效果会更好):

  1. #include <reg51.h>
  2. #define u8 unsigned char
  3. #define u16 unsigned int
  4. sbit BEEP=P2^4;
  5. void delay_ms(u16 x)//毫秒延时函数
  6. {     
  7.    u16 i,j;   
  8.     for(i=0;i<x;i++)      
  9.       for(j=0;j<115;j++);}//生日快乐歌的音符频率表,不同频率由不同的延时来决定
  10. u8 code SONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159,212,212,106,126,159,169,190,119,119,126,159,142,159,0};
  11. //生日快乐歌节拍表,节拍决定每个音符的演奏长短
  12. u8 code SONG_LONG[]={9,3,12,12,12,24,9,3,12,12,12,24,9,3,12,12,12,12,12,9,3,12,12,12,24,0};
  13. void PlayMusic()
  14. {   
  15.     u16 i=0,j,k;      
  16.   while(SONG_LONG!=0||SONG_TONE!=0)     
  17.    {     
  18.    //播放各个音符,SONG_LONG为拍子长度     
  19.            for(j=0;j<SONG_LONG*20;j++)      
  20.           {                     
  21.   BEEP=~BEEP;            
  22.            //SONG_TONE延时表决定了每个音符的频率         
  23.               for(k=0;k<SONG_TONE/3;k++);      
  24.           }           
  25.      delay_ms(10);     
  26.            i++;            
  27.            }
  28. }
  29. void main()
  30. {
  31. while(1)
  32. {     
  33.   PlayMusic();   
  34.     //播放生日快乐  
  35.       delay_ms(2000);
  36.   }
  37. }