《51单片机实现蜂鸣器警车、救护车、消防车声》由会员分享,可在线阅读,更多相关《51单片机实现蜂鸣器警车、救护车、消防车声(12页珍藏版)》请在金锄头文库上搜索。
1、1./*-名 称 : 喇 叭论 坛 : 编 写 : shifang日 期 : 2009.5修 改 : 无内 容 : 模 拟 警 车 发 声-*/#include /包 含 头 文 件 , 一 般 情 况 不 需 要 改 动 , 头 文 件 包 含 特 殊 功 能 寄 存 器 的 定 义sbit SPK=P12; /定 义 喇 叭 端 口unsigned char frq; void DelayUs2x(unsigned char t);/函 数 声 明 void DelayMs(unsigned char t);/*-定 时 器 初 始 化 子 程 序-*/void Init_Timer0(v
2、oid)TMOD |= 0x01; /使 用 模 式 1, 16 位 定 时 器 , 使 用 |符 号 可 以 在 使 用 多 个 定 时 器 时 不 受 影 响/TH0=0x00; /给 定 初 值 /TL0=0x00;EA=1; /总 中 断 打 开ET0=1; /定 时 器 中 断 打 开TR0=1; /定 时 器 开 关 打 开/*-主 函 数-*/main()Init_Timer0(); /初 始 化 定 时 器while(1)DelayMs(1); /延 时 1ms, 累 加 频 率 值frq+;/*-uS 延 时 函 数 , 含 有 输 入 参 数 unsigned char t
3、, 无 返 回 值unsigned char 是 定 义 无 符 号 字 符 变 量 , 其 值 的 范 围 是0255 这 里 使 用 晶 振 12M, 精 确 延 时 请 使 用 汇 编 ,大 致 延 时长 度 如 下 T=tx2+5 uS -*/void DelayUs2x(unsigned char t) while(-t);/*-mS 延 时 函 数 , 含 有 输 入 参 数 unsigned char t, 无 返 回 值unsigned char 是 定 义 无 符 号 字 符 变 量 , 其 值 的 范 围 是0255 这 里 使 用 晶 振 12M, 精 确 延 时 请 使
4、 用 汇 编-*/void DelayMs(unsigned char t)while(t-)/大 致 延 时 1mSDelayUs2x(245);DelayUs2x(245);/*-定 时 器 中 断 子 程 序-*/void Timer0_isr(void) interrupt 1 TH0=0xfe; /重 新 赋 值 TL0=frq; /低 8 位 值 在 主 程 序 中 不 断 累 加SPK=!SPK; /端 口 电 平 取 反二/*-名 称 : 喇 叭论 坛 : 编 写 : shifang日 期 : 2009.5修 改 : 无内 容 : 模 救 护 车 发 声-*/#include
5、/包 含 头 文 件 , 一 般 情 况 不 需 要 改 动 , 头 文 件 包 含 特 殊 功 能 寄 存 器 的 定 义sbit SPK=P12; /定 义 喇 叭 端 口unsigned char frq; void DelayUs2x(unsigned char t);/函 数 声 明 void DelayMs(unsigned char t);/*-定 时 器 初 始 化 子 程 序-*/void Init_Timer0(void)TMOD |= 0x01; /使 用 模 式 1, 16 位 定 时 器 , 使 用 |符 号 可 以 在 使 用 多 个 定 时 器 时 不 受 影 响
6、 /TH0=0x00; /给 定 初 值/TL0=0x00;EA=1; /总 中 断 打 开ET0=1; /定 时 器 中 断 打 开TR0=1; /定 时 器 开 关 打 开/*-主 函 数-*/main()unsigned char i;Init_Timer0(); /初 始 化 定 时 器while(1)frq=0;for(i=0;i /包 含 头 文 件 , 一 般 情 况 不 需 要 改 动 , 头 文 件 包 含 特 殊 功 能 寄 存 器 的 定 义sbit SPK=P12; /定 义 喇 叭 端 口unsigned char frq; void DelayUs2x(unsign
7、ed char t);/函 数 声 明 void DelayMs(unsigned char t);/*-定 时 器 初 始 化 子 程 序-*/void Init_Timer0(void)TMOD |= 0x01; /使 用 模 式 1, 16 位 定 时 器 , 使 用 |符 号 可 以 在 使 用 多 个 定 时 器 时 不 受 影 响 /TH0=0x00; /给 定 初 值/TL0=0x00;EA=1; /总 中 断 打 开ET0=1; /定 时 器 中 断 打 开TR0=1; /定 时 器 开 关 打 开/*-主 函 数-*/main()unsigned char i;Init_Ti
8、mer0(); /初 始 化 定 时 器while(1)for(i=0;i0;i-)DelayMs(10); /延 时 10ms, 累 减 频 率 值frq=i; /*-uS 延 时 函 数 , 含 有 输 入 参 数 unsigned char t, 无 返 回 值unsigned char 是 定 义 无 符 号 字 符 变 量 , 其 值 的 范 围 是0255 这 里 使 用 晶 振 12M, 精 确 延 时 请 使 用 汇 编 ,大 致 延 时长 度 如 下 T=tx2+5 uS -*/void DelayUs2x(unsigned char t) while(-t);/*-mS 延
9、 时 函 数 , 含 有 输 入 参 数 unsigned char t, 无 返 回 值unsigned char 是 定 义 无 符 号 字 符 变 量 , 其 值 的 范 围 是0255 这 里 使 用 晶 振 12M, 精 确 延 时 请 使 用 汇 编-*/void DelayMs(unsigned char t)while(t-) /大 致 延 时 1mSDelayUs2x(245);DelayUs2x(245);/*-定 时 器 中 断 子 程 序-*/void Timer0_isr(void) interrupt 1 TH0=0xfe; /重 新 赋 值 TL0=frq; /低 8 位 值 在 主 程 序 中 不 断 累 加SPK=!SPK; /端 口 电 平 取 反