找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5189|回复: 0
收起左侧

单片机T1定时器做音频信号发生器 附程序

[复制链接]
ID:447265 发表于 2018-12-16 15:29 | 显示全部楼层 |阅读模式
利用T1控制发出1kHz的音频信号
一、设计要求
1、利用定时器T1的中断来使P1.7控制蜂鸣器发出1kHz的音频信号。
2、系统时钟频率为12MHz。
二、技术路线
利用定时器T1的中断来使P1.7控制蜂鸣器发出1kHz的音频信号,驱动蜂鸣器发声。系统时钟为12MHz。方波音频信号的周期为1ms,因此T1的定时中断时间为0.5ms,进入中断服务程序后,对P1.7求反。
三、系统原理图
   
图1-1系统原理图
如图1-1所示把晶振,复位按键以及一些外围电路如图连接,组成AT89C51单片机的最小系统。定时器T1中断控制P1.7引脚输出频率1kHz的音频信号,驱动蜂鸣发声。
四、仿真图
图1-2系统仿真图
五、源程序
#include<reg51.h>        //包含头文件
sbit sound=P1^7;        //将sound位定义为P1.7引脚
#define f1(a)(65536-a)/256 //定义装入定时器高8位的时间常数
#define f2(a)(65536-a)%256//定义装入定时器低8位的时间 常数
unsigned int i=500;
unsigned int j=0;
void main(void)
{
EA=1;                   //开关中断
ET1=1;                 //允许定时器T1中断
TMOD=0x10;          //TMOD=0001 0000,使用T1的方式1定时
TH1=f1(i);          //给定时器T1高8位赋初值
TL1=f2(i);          //给定时器T1低8位赋初值
TR1=1;              //启动定时器T1
while(1)
{                   //循环等待
i=460;
while(j<2000);
j=0;
i=360;
while(j<2000);
j=0;
}
}
void t1(void) interrupt 3 using 0  //定时器T1中断函数
{
TR1=0;                             //关闭定时器T1
sound=~sound;                     //P1.7输出求反
TH1=f1(i);                //定时器T1的高8位重新赋初值
TL1=f2(i);               //定时器T1的低8位重新赋初值
j++;
TR1=1;                    //启动定时器T1
}
六、总结
通过这次课程设计使我懂得了理论与实际相结合,只有理论知识是远远不够的,只有把所学的理论与实践相结合,才能提高自己的实际动手能力和创立思考的能力。同时在设计过程中发现了自己的不足之处,对以前所学过的知识理解不够深刻,掌握得不够牢固……通过这次课程设计之后,一定要把以前所学过的知识重新温故。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表