完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include
sbit K1=P1^4; sbit K2=P1^5; sbit K3=P1^6; sbit K4=P1^7; sbit K5=P3^2; sbit K6=P3^3; sbit K7=P3^4; sbit Bee=P3^7; //蜂鸣器所在 //定义七个基本音节 unsigned int Music_7[]={262,294,330,349,392,440,494}; //定义高音的七个音节,因为按键不够暂时不用,可以在proteus仿真中使用 //unsigned int Music_7_H[]={523,587,659,698,784,880,988}; unsigned char th,tl; void Inittimer0(void) { TMOD = 0x01; TH0 = 0x0F8; TL0 = 0x18; EA = 1; ET0 = 1; Bee =1; //关闭蜂鸣器,因为这蜂鸣器跟喇叭不同,只要上电就他娘的响 TR0 = 0; //关闭定时器,防止一开机就嗷嗷的响 } void set_music(unsigned char i) { th=(65536-(1000000/Music_7[i]))/256; tl=(65536-(1000000/Music_7[i]))%256; TH0=th; TL0=tl; } void delay1s(void) //误差 0us { unsigned char b,c; for(c=180;c>0;c--) for(b=250;b>0;b--) ; } void main(void) { InitTimer0(); while(1) { if(K1==0) { set_music(0); while(K1==0); { TR0=1; //启动定时器开始演奏音乐 delay1s(); //每次触发大概1秒,后续可修改为松手停止响。这里可以换成松手检测就可以了 TR0=0; //关闭定时器,停止音律响 Bee=1; //关闭蜂鸣器,防止一直嗷嗷响,如果用的是喇叭就可以忽略这个。 } } if(K2==0) { set_music(1); while(K2==0); { TR0=1; delay1s(); TR0=0; Bee=1; } } if(K3==0) { set_music(2); while(K3==0); { TR0=1; delay1s(); TR0=0; Bee=1; } } if(K4==0) { set_music(3); while(K4==0); { TR0=1; delay1s(); TR0=0; Bee=1; } } if(K5==0) { set_music(4); while(K5==0); { TR0=1; delay1s(); TR0=0; Bee=1; } } if(K6==0) { set_music(5); while(K6==0); { TR0=1; delay1s(); TR0=0; Bee=1; } } if(K7==0) { set_music(6); while(K7==0); { TR0=1; delay1s(); TR0=0; Bee=1; } } } } void Timer0Interrupt(void) interrupt 1 { TH0 = th; TL0 = tl; Bee = ~Bee; } |
|
相关推荐
1个回答
|
|
oid) {//初始化定时器TMOD |= 0x01; //选择模式1,16位定时器TH0 = 0xFC; //设置定时初值为65536-3=0xFCFDTL0 = 0xFD; TR0 = 1; //启动定时器}void main() { Bee = 0; //蜂鸣器初始化P1 = 0xFF; //将P1端口设为输入状态P3 |= 0x0C; //将P3.2和P3.3设为输入状态P3 &= ~0x70; //将P3.4和P3.5设为输出状态InitTimer0(); //初始化定时器while(1) { if(!K1) { //判断按键K1是否按下 TH0 = 0xFC; //重新设置定时初值为65536-3=0xFCFDTL0 = 0xFD; //产生262Hz的基本音节 Bee = 1; //蜂鸣器响起 DELAY_MS(300); //延时 300 毫秒 Bee = 0; //蜂鸣器停止响起 } if(!K2) { //判断按键K2是否按下 TH0 = 0xF6; TL0 = 0xFD; Bee = 1; //产生294Hz的基本音节 DELAY_MS(300); Bee = 0; } if(!K3) { TH0 = 0xF0; TL0 = 0xFD; Bee = 1; //产生330Hz的基本音节 DELAY_MS(300); Bee = 0; } if(!K4) { TH0 = 0xE4; TL0 = 0xFD; Bee = 1; //产生349Hz的基本音节 DELAY_MS(300); Bee = 0; } if(!K5) { TH0 = 0xD8; TL0 = 0xFD; Bee = 1; //产生392Hz的基本音节 DELAY_MS(300); Bee = 0; } if(!K6) { TH0 = 0xCC; TL0 = 0xFD; Bee = 1; //产生440Hz的基本音节 DELAY_MS(300); Bee = 0; } if(!K7) { TH0 = 0xC0; TL0 = 0xFD; Bee = 1; //产生494Hz的基本音节 DELAY_MS(300); Bee = 0; } }}//延时函数void DELAY_MS(unsigned int ms) { unsigned int i,j; for(i=0; i
|
|
|
|
只有小组成员才能发言,加入小组>>
809 浏览 0 评论
1161 浏览 1 评论
2535 浏览 5 评论
2871 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2719 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1103浏览 3评论
198浏览 2评论
464浏览 2评论
378浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
459浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 11:14 , Processed in 1.222652 second(s), Total 81, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号