利用单片机STC15F104W做个手刹提醒器
编辑时间:2021-05-10 作者:qyg123 浏览量:3163 来源:家电维修论坛

转的家电维修论坛上的,原贴如下。

https://www.jdwx.info/forum.php?mod=viewthread&tid=824518&highlight=STC15F104W

直接上电路图吧。

程序代码如下


//手刹拉起时,通电后LED亮,蜂鸣器每隔10S响一次
//CPU:STC15F104W
#define CPU_Fosc 12000000uL	//定义主时钟
#include	"STC15.H"
#include<intrins.h>

sbit  hand   = P3^2;  //定义手刹开关接口(任意引脚)
sbit  led  = P3^3;   //输出
sbit  be  = P3^4;   //输出
bit f10s;
float s;

/****************定时器初始化************************/
void Init() 
{
   TMOD=0x01;//定时器工作于方式1
   TH0=0x3c;  //50ms
   TL0=0xb0;
   EA=1; //CPU开中断总允许
   ET0=1;//开定时中断
   TR0=1;//启动定时

}
//********************** 定时器0中断函数************************
void time0() interrupt 1
{ 
  TH0=0x3c;
  TL0=0xb0;   //12Mhz 50ms
  s=s+.05;	  //累计秒数
  if(s>=10)
   {
    f10s=1;    //10s标志
    s=0;
   }
}
//========================================================================
// 函数: void  delayms(unsigned int ms)
// 描述: 延时函数。
// 参数: ms,要延时的ms数, 这里只支持1~65535ms. 自动适应主时钟.
// 返回: none.
// 版本: VER1.0
// 日期: 2013-4-1
// 备注: 
//========================================================================
void  delayms(unsigned int ms)
{
 unsigned int i;
 do{
    i = CPU_Fosc/13000;
    while(--i)	;   //14T per loop
   }
 while(--ms);
}
/****************蜂鸣器**************************/
void beep()
{
 be=0;
 delayms(100);
 be=1;
}

//****************主函数*************************/
void main()
{
 unsigned char i;
 Init(); 
 f10s=0;
 for(i=1;i<6;i++)
  {
   beep();
   delayms(500);
  }
 while(1)
 { 
  if(!hand)   
   {
    led=1;
   }
  else		   //手刹拉起时,LED亮,蜂鸣器10S响一次
   {
    led=0;       //LED亮
	if(f10s==1)
	 {
	  beep();
	  f10s=0;
	 }
   }

 } 	    
}


来说两句吧