【单片机】辉光管时钟系列<一>--单片机最小系统

本文介绍了作者在毕业期间利用空闲时间制作辉光管时钟的过程,首先详细讲解了单片机最小系统,包括STC89C52单片机、晶振和电容等基本组件,并提供了电路焊接图。然后通过连接蜂鸣器进行功能测试,编写程序使蜂鸣器播放生日快乐歌,展示了单片机的初步应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

已经有两个多月没有写文章了,这两个多月都忙着毕业的事。在业务时间也重拾了大学期间的单片机知识,准备做个辉光管时钟。现在程序和电路都已经完成了,就等着PCB板回来了。下面我将以一系列的文章来介绍辉光管时钟的各个模块,这篇文章我们介绍单片机最小系统。

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

图1

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

图2

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

图3

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

#include <reg51.h>
#define u8 unsigned char
#define u16 unsigned int

sbit BEEP=P2^4;

void delay_ms(u16 x)//毫秒延时函数
{
	u16 i,j;
	for(i=0;i<x;i++)
	    for(j=0;j<115;j++);
}

//生日快乐歌的音符频率表,不同频率由不同的延时来决定
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};

//生日快乐歌节拍表,节拍决定每个音符的演奏长短
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};

void PlayMusic()
{
	u16 i=0,j,k;
	while(SONG_LONG[i]!=0||SONG_TONE[i]!=0)
	{	//播放各个音符,SONG_LONG为拍子长度
		for(j=0;j<SONG_LONG[i]*20;j++)
		{
			BEEP=~BEEP;
			//SONG_TONE延时表决定了每个音符的频率
			for(k=0;k<SONG_TONE[i]/3;k++);
		}
		delay_ms(10);
		i++;		
	}
}

void main()
{
 while(1)
{
	PlayMusic();	//播放生日快乐
	delay_ms(2000);
}
 
 
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值