转的家电维修论坛上的,原贴如下。
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;
}
}
}
}