两位十进制倒计时秒表定时器

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

对时间记录下来(由曲谱中节拍得出)。 频率表和时间表是一一对应的,频率表的最后一项为0,作为重复的标志。根据频率表
中的频率算出对应的计数初值,然后依次写入T0 的计数器。将时间表中相对时间值带入延 时程序来得到音符演奏时间。
参考流程图
电子发声单元原理图
电子发声接线图 【程序流程图】
开始
中断设置及 其初始化
}
void play1(uint shi,uint ge)
{
P2_7=0;P0=table[shi];P2_7=1;delayms(100);
P2_4=0;P0=table[ge];P2_4=1;delayms(100);
}
void main()
{
EA=1;
IT0=1;
EX0=1;
ET1=1;
ET0=1;
TL1=(65536-45872)%256;
TR1=1;
}
void time_0() interrupt 1
// 定时器 0 中断处理程序
{
POUT = ~POUT;
//产生方波
TH0பைடு நூலகம்= 0x57;
//重新装入计数值
TL0 = 0xff;
}
void time_1() interrupt 3
{
TH1=(65536-45872)/256;
音符与频率对照关系如表所示。对于每一个音符的演奏时间,可以通过软件延时 来处理。首先确定单位延时时间程序(根据CPU的频率不同而有所变化)。然后确定每 个音符演奏需要几个单位时间,就几次调用延时子程序即可。
表 音符与频率对照表(单位:Hz)
频率表是将曲谱中的音符对应的频率值依次记录下来,时间表是将各个音符发音的相
一个音符对应一个频率,将对应一个音符频率的方波通到扬声器上,就可以发出 这个音符的声音。将一段乐曲的音符对应频率的方波依次送到扬声器,就可以演奏出这 段乐曲。利用定时器控制单片机的 I/O 引脚输出方波,将相应一种频率的计数初值写 入计数器,就可产生对应频率的方波。
要产生音频脉冲,只要计算出某一音频的周期(1/频率),然后将此周期除以2, 即为半周期的时间。利用定时器计时这个半周期时间。每当计时到后就将输出脉冲的I/O 反相,就可以在I/O脚上得到此频率的脉冲。
两位十进制倒计时秒表定时器
【实验要求】 开始时,两个数码管显示定时的秒数为 60,按“启动”按钮后开始计时,两个数码管显示 从启动开始的秒数,每秒减 1.显示到 0 秒时,显示“00”不断闪烁,并且发声报警。再按 “启动”按钮后,又重新开始倒计时。 【实验设计思路】 用定时器 1 进行 50ms 定时,则当二十次中断时为一秒,实现当前数码减一的功能,而数码 管则是分别显示当前数码的十位和个位,当外部中断 0 有中断信号的时候将当前数码置为 60;同时开启定时器,每秒使得该数码减一,直到减为零的时候开启定时器零同时关闭定时 器 1,使得当前数码不变。且调用长延时显示程序,实现数码闪烁功能,此时定时器 0,定 时改变声波端口,产生稳定方波,送入扬声器中发出警报音。 【实验硬件连线及其说明】 电子发声设计
sbit POUT = P0^0;
//扬声器控制引脚
sbit P2_7=P2^7;
sbit P2_4=P2^4;
uint shi,ge,num;
int m;
uchar
code
table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39};
shi==0& &ge==0
否 play(shi,ge)

TR0=1 play1(shi,ge)
是否有外 部中断

TR1=1
m
【实验程序】
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define Clk 0x070000
TL1=(65536-45872)%256;
num++;
if(num==20)
{
num=0; shi=m/10; ge=m%10; m--; if(m==-1) { TR1=0;shi=0;ge=0; } } }
num=0;
shi=0;
ge=0;
TMOD=0x11;
while(1)
{
if(shi!=0||ge!=0)play(shi,ge);
if(shi==0&&ge==0){TR0=1;play1(shi,ge);}
}
}
void intt0() interrupt 0
{
TR0=0;
m=15;
TH1=(65536-45872)/256;
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void play(uint shi,uint ge)
{
P2_7=0;P0=table[shi];P2_7=1;
P2_4=0;P0=table[ge];P2_4=1;
相关文档
最新文档