51单片机两个定时器控制蜂鸣器发出不同声调

?frivolous? ?frivolous? 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
题目:同时用两个定时器控制蜂鸣器发生定时器1控制频率,定时器0控制同个频率,持续的时间间隔2s,一次输1,10,50,100,200,400,800,1000赫兹的方波 我的程序只有第一个两秒有1hz的,其他无法实现,不知道哪里出了问题,麻烦大佬看一看! #include<reg52.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int uint t0,t1,aa,bb,spin,tt,flag; sbit fm=P2^3; uchar code table1[]={1000,1000,1000,1000,500,50,5,500};//根据不同的hz进行spin的选择 uchar code table2[]={500,50,10,5,5,25,125,1};//根据不同的spin事先计算好每种周期震动的次数 void init(); void main() { init(); while(1) {}; } void init() {uint t0=0; uint t1=0; uint aa=0; uint bb=0; uint tt=0; uint flag=0; TMOD=0x11; EA=1; ET0=1; ET1=1; TL0=(65536-50000)%256; TH0=(65536-50000)/256; TL1=(65536-spin)%256; TH1=(65536-spin)/256; spin=table1[aa]; TR0=1; TR1=1;} void timer0() interrupt 1 { TL0=(65536-50000)%256; TH0=(65536-50000)/256; t0++; if(t0==40) { t0=0; aa++; bb++; } if(aa==8) { TR0=0; flag=1; } } void timer1() interrupt 3 { spin=table1[aa]; tt=table2[bb]; TL1=(65536-spin)%256; TH1=(65536-spin)/256; t1++; if(t1==tt) { t1=0; fm=~fm; } if(flag==1) TR1=0; }
...全文
评论 3
收藏 已收藏
分享
返回顶部
?frivolous?
单片机/工控 27,522 成员 28,796 内容