用51单片机做发声小玩意及程序

“嘀嘀”警报

生活中我们常常到各种各样的报警声,例如“嘀、嘀…”就是常见的一种声音报警声,但对于这种报警声,嘀0.2秒钟,然后断0.2秒钟,如此循环下去,假设嘀声的频率为1KHz,则报警声时序图如下图所示:

上述波形信号如何用单片机来产生呢?

由于要产生上面的信号,我们把上面的信号分成两部分,一部分为1KHZ方波,占用时间为0.2秒;另一部分为电平,也是占用0.2秒;因此,我们利用单片机的定时/计数器T0作为定时,可以定时0.2秒;同时,也要用单片机产生1KHZ的方波,对于1KHZ的方波信号周期为1ms,高电平占用0.5ms,低电平占用0.5ms,因此也采用定时器T0来完成0.5ms的定时;最后,可以选定定时/计数器T0的定时时间为0.5ms,而要定时0.2秒则是0.5ms的400倍,也就是说以0.5ms定时400次就达到0.2秒的定时时间了。

电路原理图:

>>汇编源程序

T02SA EQU 30H

T02SB EQU 31H

FLAG BIT 00H

ORG 00H

LJMP START

ORG 0BH

LJMP INT_T0

START: MOV T02SA,#00H

MOV T02SB,#00H

CLR FLAG

MOV TMOD,#01H

MOV TH0,#(65536-500) / 256

MOV TL0,#(65536-500) MOD 256

SETB TR0

SETB ET0

SETB EA

SJMP $

INT_T0:

MOV TH0,#(65536-500) / 256

MOV TL0,#(65536-500) MOD 256

INC T02SA

MOV A,T02SA

CJNE A,#100,NEXT

INC T02SB

MOV A,T02SB

CJNE A,#04H,NEXT

MOV T02SA,#00H

MOV T02SB,#00H

CPL FLAG

NEXT: JB FLAG,DONE

CPL P1.0

DONE: RETI

END

>>C语言源程序

#include

unsigned int t02s;

unsigned char t05ms;

bit flag;

void main(void)

{

TMOD=0x01;

TH0=(65536-500)/256;

TL0=(65536-500)%256;

TR0=1;

ET0=1;

EA=1;

while(1);

}

void t0(void) interrupt 1 using 0

{

TH0=(65536-500)/256;

TL0=(65536-500)%256;

t02s++;

if(t02s==400)

{

t02s=0;

flag=~flag;

}

if(flag==0)

{

P1_0=~P1_0;

}

}

“叮咚”门铃

用51单片机制作“叮咚”门铃,电路原理图如下所示,当按下开关SP1,AT89S51单片机产生“叮咚”声从P1.0端口输出到LM386,经过放大之后送入喇叭。

程序设计方法

1,我们用单片机实定时/计数器T0来产生700HZ和500HZ的频率,根据定时/计数器T0,我们取定时250us,因此,700HZ的频率要经过3次250us的定时,而500HZ的频率要经过4次250us的定时。

2,在设计过程,只有当按下SP1之后,才启动T0开始工作,当T0工作完毕,回到最初状态。

3,“叮”和“咚”声音各占用0.5秒,因此定时/计数器T0要完成0.5秒的定时,对于以250us为基准定时2000次才可以。

>>汇编源程序:

T5HZ EQU 30H

T7HZ EQU 31H

T05SA EQU 32H

T05SB EQU 33H

FLAG BIT 00H

STOP BIT 01H

SP1 BIT P3.7

ORG 00H

LJMP START

ORG 0BH

LJMP INT_T0

START: MOV TMOD,#02H

MOV TH0,#06H

MOV TL0,#06H

SETB ET0

SETB EA

NSP: JB SP1,NSP

LCALL DELY10MS

JB SP1,NSP

SETB TR0

MOV T5HZ,#00H

MOV T7HZ,#00H

MOV T05SA,#00H

MOV T05SB,#00H

CLR FLAG

CLR STOP

JNB STOP,$

LJMP NSP

DELY10MS: MOV R6,#20

D1: MOV R7,#248

DJNZ R7,$

DJNZ R6,D1

RET

INT_T0: INC T05SA

MOV A,T05SA

CJNE A,#100,NEXT

MOV T05SA,#00H

INC T05SB

MOV A,T05SB

CJNE A,#20,NEXT

MOV T05SB,#00H

JB FLAG,STP

CPL FLAG

LJMP NEXT

STP: SETB STOP

CLR TR0

LJMP DONE

NEXT: JB FLAG,S5HZ

INC T7HZ

MOV A,T7HZ

CJNE A,#03H,DONE

MOV T7HZ,#00H

CPL P1.0

LJMP DONE

S5HZ: INC T5HZ

MOV A,T5HZ

CJNE A,#04H,DONE

MOV T5HZ,#00H

CPL P1.0

LJMP DONE

DONE: RETI

END

>>C语言源程序:

#include 〈AT89X51.H〉

unsigned char t5hz;

unsigned char t7hz;

unsigned int tcnt;

bit stop;

bit flag;

void main(void)

{

unsigned char i,j;

TMOD=0x02;

TH0=0x06;

TL0=0x06;

ET0=1;

EA=1;

while(1)

{

if(P3_7==0)

{

for(i=10;i〉0;i--)

for(j=248;j〉0;j--);

if(P3_7==0)

{

t5hz=0;

t7hz=0;

tcnt=0;

flag=0;

stop=0;

TR0=1;

while(stop==0);

}

}

}

}

void t0(void) interrupt 1 using 0

{

tcnt++;

if(tcnt==2000)

{

tcnt=0;

if(flag==0)

{

flag=~flag;

}

else

{

stop=1;

TR0=0;

}

}

if(flag==0)

{

t7hz++;

if(t7hz==3)

{

t7hz=0;

P1_0=~P1_0;

}

}

else

{

t5hz++;

if(t5hz==4)

{

t5hz=0;

P1_0=~P1_0;

}

}

}

110报警声+单片机c语言,用51单片机做发声小玩意及程序相关推荐

  1. 51单片机c语言程序控制,51单片机C语言程序设计源代码

    <51单片机C语言程序设计源代码>由会员分享,可在线阅读,更多相关<51单片机C语言程序设计源代码(281页珍藏版)>请在人人文库网上搜索. 1.51 SCM c语言教程示例2 ...

  2. 51单片机c语言运算符,51单片机表达式语句的用法解析

    描述 表达式语句是最基本的一种语句.不同的程序设计语言都会有不一样的表达式语句,如VB就是在表达式后面加入回车就构成了VB的表达式语句,而在51单片机的C语言中则是加入分号";"构 ...

  3. 51单片机c语言程序控制,51单片机C语言编程基础及实例.pdf

    基础知识: 51 单片机编程基础 第一节:单数码管按键显示 第二节:双数码管可调秒表 第三节:十字路口交通灯 第四节:数码管驱动 第五节:键盘驱动 第六节:低频频率计 第七节:电子表 第八节:串行口应 ...

  4. 单片机c语言sfr,51单片机bit、sbin、sfr、sfr_16区别分析

    1.bit和sbit都是C51扩展的变量类型. bit和int char之类的差不多,只不过char=8位, bit=1位而已.都是变量,编译器在编译过程中分配地址.除非你指定,否则这个地址是随机的. ...

  5. 万年历设计单片机c语言,基于51单片机的电子万年历的设计

    基于51单片机的电子万年历的设计(论文9400字) 功能要求 1. 万年历能用数码管显示阳历年.月.日.星期.[小]时.分.秒并设置指定时间的闹铃. 2. 数字式温度计要求测温范围-50~100°C, ...

  6. 呼吸灯51单片机c语言编程,51单片机基于定时器实现呼吸灯(C8051F020单片机)

    一.实现思路 原理:利用PWM信号控制LED灯的亮暗程度,实现LED灯由暗到亮又由亮到暗的渐变过程. 方法:通过定时器设置LED所接引脚的高低电平持续时间,模拟出PWM波. 二.关键问题--PWM的频 ...

  7. 8155与单片机c语言设计,51单片机课程设计报告-基于8155的8LED显示电子码表设计.doc...

    51单片机课程设计报告 --基于8155的8LED显示电子码表设计 实验目的 本次课程设计是基于51单片机在理论课程的基础上,通过电路设计.理论计算.实际编程.调试.测试.分析查找故障,解决在实际设计 ...

  8. 51单片机 c语言 汇编,51单片机之时钟(C语言和汇编两种方式实现)

    1.C语言实现 #include typedef  unsigned char   uint8; typedef  unsigned int    uint16; typedef  unsigned ...

  9. 电子密码锁课设单片机c语言,基于51单片机的电子密码锁综合课程设计

    5.大容量片内EEPROM,擦写次数10万次以上 EEPROM,擦写次数10万次以上,擦写次数10万次以上 6.ISP/IAP,在系统可编程/在应用可编程,无需编程器/仿真器 7.共8通道10位高速A ...

最新文章

  1. 八大深度学习最佳实践
  2. 一文带你读懂边缘计算是什么
  3. 文巾解题 319. 灯泡开关
  4. PHP 7安装使用体验,升级PHP要谨慎
  5. Task 1 天池赛 - 二手车交易价格预测
  6. Java基础 —— 异常
  7. scatter函数_散点图、箱线图、核密度函数……数据分析必备的9种可视化图表
  8. Lua1.0 代码分析 opcode.c
  9. 橡胶柱压缩_橡胶=汽车半条命:浅谈ABAQUS橡胶大变形仿真5大注意事项
  10. ArcGIS打开shapefile失败:形状数与记录表数不一致
  11. STM32 磁场传感器HMC5883
  12. Linux 修改密码出现“鉴定令牌操作错误”
  13. 虚拟机下Ubuntu打开摄像头是黑屏问题
  14. 语音识别(ASR)论文优选:性能测试Wav2Vec2.0 on the Edge: Performance Evaluation
  15. python的pynput模块控制鼠标、键盘和监听鼠标、键盘事件
  16. coward的个人简介
  17. python字典求平均值_Python
  18. 3d打印机效果突然拉跨问题
  19. 苹果iPhone5 16G长沙九方现货售8199元
  20. 【urllib的使用(下)】

热门文章

  1. 实战】-内容项目实战
  2. 太极发送卡片软件_qn卡片版app下载-QN模块卡片版软件 v35_5577安卓网
  3. 大学英语四六级阅读做题技巧
  4. PLC与变频器通讯接线,学会用PLC控制变频器
  5. python爬虫代码房-python爬虫爬取链家二手房信息
  6. php导出word试卷,实例:PHP生成word文档格式试卷的代码
  7. adb 屏幕滑动_安卓通过adb 模拟键盘输入、点击屏幕、滑动、按键
  8. 这款上线6年火爆应用即将消失
  9. 缺陷检测公开数据集大全
  10. 您家的小米云监控安全吗?