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