用STC15F104W+干簧管制作的手刹提醒电路。
手刹拉起时,通电后LED亮,蜂鸣器每隔10S响一次。
程序和电路图见附件。
单片机源程序如下:
- //手刹拉起时,通电后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;
- }
- }
- }
- }
复制代码
以上程序hex文件51hei提供下载:
STC15F104W+干簧管手刹提醒电路.rar
(25.21 KB, 下载次数: 21)
|