proteus元件有
AT89C51单片机
button按键
cap电容
cap-elec极性电容
CRYSTAL晶振
LED-RED
LED-YELLOW
PN4249
SOUNDER (SPEAKER) 二选一蜂鸣器
RES电阻
下载下方文件查看电路图

代码

#include<reg51.h>

sbit SPEAK = P1^2;		//喇叭所在端口
sbit LED = P1^4;		//led灯端口   以一秒速度闪烁
sbit button_s = P3^0;	//开始按键所在端口
sbit KEY_F = P3^1;		//结束开关所在端口

/*------------------------------------------------
 uS延时函数,含有输入参数 unsigned char t,无返回值
 unsigned char 是定义无符号字符变量,其值的范围是
 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
 长度如下 T=tx2+5 uS 
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{   
 while(--t);
}
/*------------------------------------------------
 mS延时函数,含有输入参数 unsigned char t,无返回值
 unsigned char 是定义无符号字符变量,其值的范围是
 0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
{     
 	while(t--)
 	{
     	//大致延时1mS
     	DelayUs2x(245);
	 	DelayUs2x(245);
 	}
}

void main()					//主函数
{
	unsigned char i;
	unsigned char j;
	button_s = 1;				//开始按键输入端口电平置高

	
	while(1)				//主循环
	{
		
		if(!button_s)  			//如果检测到低电平,说明按键按下
    	{
	 		DelayMs(10); 	//延时去抖,一般10-20ms
     		if(!button_s)     	//再次确认按键是否按下,没有按下则退出
	   		{
        		while(!button_s);//如果确认按下按键等待按键释放,没有释放则一直等待
	       		{
					for(j=0;j<24;j++)		 //定24秒
					{
						for(i = 0;i<20;i++)		//50ms*20 =1000ms = 1 s
						{
							//等待
							TMOD = 0x01;
			   	    		TH0 = (65536-50000)/256;	   //	50ms
		 					TL0 = (65536-50000)%256;	   //	50ms
		 					TR0 = 1;					   //	启动定时器
		 					while(!TF0);				   //	检测定时器是否溢出
		 					TF0 = 0;
						}
						LED=!LED;	//以1s的速度闪烁
					}

					while(KEY_F)				//喇叭响
					{
	       				SPEAK = !SPEAK;
						DelayUs2x(200);
					}

					if(KEY_F == 0)				//按下开关,喇叭停止响
					{
						while(1)
						{
							SPEAK = 0;			 //喇叭不响
							LED = 0;			 //灯亮
						}
					}
	 			}
	   		}
		}
	}
}

keil5和proteus源文件都在下面请自行下载

相关文件下载地址
*该资源需回复评论后下载,马上去发表评论?
©下载资源版权归作者所有;本站所有资源均来源于网络,仅供学习使用,请支持正版!

被岁月冰封的一簇火苗,等待理想把它融化、燃烧。