6. 报警产生器 1. 实验任务 用 P1.0 输出 1KHz 和 500Hz 的音频信号驱动扬声器,作报警信号,要求 1KHz信号响 100ms,500Hz 信号响 200ms,交替进行,P1.7 接一开关进行控制,当开关合上响报警信号,当开关断开告警信号停止,编出程序。 2. 电路原理图 图 4.6.1 3. 系统板上硬件连线 (1. 把“单片机系统”区域中的 P1.0 端口用导线连接到“音频放大模块”区域中的 SPK IN 端口上; (2. 在“音频放大模块”区域中的 SPK OUT 端口上接上一个 8 欧的或者是16 欧的喇叭; (3. 把“单片机系统”区域中的 P1.7/RD 端口用导线连接到“四路拨动开关”区域中的 K1 端口上; 4. 程序设计内容 (1. 信号产生的方法 500Hz 信号周期为 2ms,信号电平为每 1ms 变反 1 次,1KHz 的信号周期为 1ms,信号电平每 500us 变反 1 次; 5. 程序框图 图 4.6.2 6. 汇编源程序FLAG BIT 00HORG 00HSTART: JB P1.7,STARTJNB FLAG,NEXTMOV R2,#200DV: CPL P1.0LCALL DELY500LCALL DELY500DJNZ R2,DVCPL FLAGNEXT: MOV R2,#200DV1: CPL P1.0LCALL DELY500DJNZ R2,DV1CPL FLAGSJMP STARTDELY500: MOV R7,#250LOOP: NOPDJNZ R7,LOOPRETEND7. C 语言源程序#include
#include bit flag;unsigned char count;void dely500(void){unsigned char i;for(i=250;i>0;i--){_nop_();}}void main(void){while(1){if(P1_7==0){for(count=200;count>0;count--){P1_0=~P1_0;dely500();}for(count=200;count>0;count--){P1_0=~P1_0;dely500();dely500();}}}}