完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
6个回答
|
|
定时器定时200us,中断里翻转接到蜂鸣器的IO 就行;
|
|
|
|
本帖最后由 xiangyu6 于 2013-7-13 20:38 编辑
采用定时器进行频率设置,1khz说明周期是1ms,那么设置高电平为500us,低电平为500us。 程序如下: #include ***it beep = P1 ^ 0; char num; void main() { TMOD = 0x01; // 设置定时器0为工作方式(M1M0为01) TH0 = (65536 - 500) / 256; //自动赋初值 最高位 定时0.5ms TL0 = (65536 - 500) % 256; // 最低位 EA = 1; //开总中断,CPU中断开 ET0 = 1; //定时器0中断 TR0 = 1; //启动定时器0 beep = 0x01 ; while(1) ; } //程序停止在这里等待中断发生 void T0_time(void) interrupt 1 // 定时/计数器0溢出中断 { TH0 = (65535 - 500) / 256; //重装初值 TL0 = (65535 - 500) % 256; num++; if(num == 1) //如果到了1次,说明0.5ms已到,num可以用来方便修改周期,间接修改频率 { num = 0; beep = ~beep; //让蜂鸣器状态取反 } } |
|
|
|
非常感谢啊~~看来还是要多用中断函数……总之很谢谢你 |
|
|
|
|
|
|
|
嗯,定时中断。
|
|
|
|
这个用中断函数的定时是十分准确的,但如果只是粗略的定时的话,毕竟蜂鸣器不需要那么准确的精度(毕竟你分辨不出来1khz和990hz的音频吧?)直接用一个延时函数,然后调用就好了。
贴出代码:: void delay500us() { unsigned char j; for(j=0;j<57;j++) //500us基准延时程序 { ; } } void beep() //产生1KHZ频率声音的函数 { fmq=0; delay500us(); fmq=1; delay500us(); } |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
238 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
629 浏览 0 评论
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
552 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
552 浏览 0 评论
1074 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11764 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 06:33 , Processed in 0.597559 second(s), Total 50, Slave 43 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号