单片机定时器与串口通信

一、中断-驱动蜂鸣器

实验内容

利用中断发出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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值