文章目录
一、中断-驱动蜂鸣器
实验内容
利用中断发出1Khz的方波信号,驱动蜂鸣器鸣叫
1.蜂鸣器相关知识
蜂鸣器是一种常见的声响装置,通常用于发出简单的声音信号,例如警报、提醒或提示。
基于工作原理,蜂鸣器可以分为压电式蜂鸣器和电磁式蜂鸣器两种主要类型。
压电式蜂鸣器使用压电陶瓷片产生声音,而电磁式蜂鸣器则利用电磁感应产生声音。
对于压电式蜂鸣器,通常需要提供特定频率和电压的信号以驱动。
在嵌入式系统中,可以通过微控制器的IO口或者专用的声音输出模块来驱动蜂鸣器。
下面的实验:利用T1的中断控制P1.7引脚输出频率为1kHz方波音频信号,驱动蜂鸣器发声。
proteus仿真电路图:
相关代码:
#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 000B,使用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
}
proteus仿真结果:
二、LED数码管秒表
实验内容
实现一个用2位数码管显示计时时间,最小计时单位为“百毫秒”,计时范围0.1~9.9s的计时器。
要求功能:当第1次按一下计时功能键时,秒表开始计时并显示;第2次按一下计时功能键时,停止计时,将计时的时间值送到数码管显示;如果计时到9.9s,将重新开始从0计时;第3次按一下计时功能键,秒表清0。再次按一下计时功能键,则重复上述计时过程。
protues仿真电路图:
相关代码:
#include<reg51.h>
unsigned char code discode1[]={
0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
unsigned char code discode2[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char timer=0;
unsigned