完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
void T0_time() interrupt 1 //¶¨Ê±Æ÷ÖжÏ
{ TH0=(65535-50000)/256; //ÖØ×°³õÖµ TL0=(65535-50000)%256; flag++; if(flag == 20) { if(reduce_flag == FALSE) { num ++; if(num == 9) reduce_flag = TRUE; } else { num --; if(num == 0) reduce_flag = FALSE; } flag = 0; } } void FM() { if(num==9) { spea=0; delayms(1); spea=1; delayms(1); } } |
|
相关推荐
7个回答
|
|
你中断后面的语句是干嘛的呢?感觉你写复杂了。
void T0_time() interrupt 1 //¶¨Ê±Æ÷ÖÐ¶Ï { TH0=(65535-50000)/256; //ÖØ×°³õÖµ TL0=(65535-50000)%256; flag++; } void FM() { if(flag>=temp) { flag=0; spea=!spea; } } 改temp的值就可以改变频率
最佳答案
|
|
|
|
本帖最后由 wulinwl 于 2017-8-3 07:49 编辑
2.5KHz无源蜂鸣器驱动程序,改变定时器重载值就改变频率。void Timer0Init() //200微秒@11.0592MHz { TMOD = 0x02; //设置定时器8位自动重载模式 TL0 = 0x48; //设置定时初值 TH0 = 0x48; //设置定时重载值 TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时 EA=1; //开总中断 ET0=1; //开定时器0中断 } void timer0() interrupt 1 //中断服务程序 { static uint count; //中断计数变量 if(Buzzer_sign==1) //如果蜂鸣器使能标志1 { count++; //定时器中断变量自+1 Buzzer=~Buzzer; //蜂鸣器端口取反 if(count>=1000) //持续鸣叫0.2秒 { count=0; //计数清0 Buzzer_sign=0; //蜂鸣器使能标志清0 Buzzer=1; //蜂鸣器端口清0 } } } |
|
|
|
谢了。大神 看到你回复了很多帖。。。。活雷锋
|
|
|
|
谢了。大神 看到你回复了很多帖。。。。活雷锋 |
|
|
|
|
|
|
|
本帖最后由 wulinwl 于 2017-8-3 09:50 编辑
中断里就是频率2.5KHz无源蜂鸣器的驱动程序,只要有一个使能信号蜂鸣器就响一声“滴”。而且每次只占用几微秒,不影响主程序运行。有源蜂鸣器的频率是生产厂家固定的频率,不好改的。 |
|
|
|
wulinwl 发表于 2017-8-3 09:45 受教了,我是刚开始学习单片机的菜鸟。以后希望多多帮助 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
157 浏览 0 评论
【每周推荐】采用11代Intel CPU,基于youyeetoo X1开发板搭建少儿AI智能STEAM积木平台
825 浏览 0 评论
2372 浏览 2 评论
【youyeetoo X1 windows 开发板体验】+ 影音处理和AI模型移植
2226 浏览 5 评论
I.MX6ULL-飞凌 ElfBoard ELF1板卡- 移植zbar的方法
1694 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
5713 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-23 16:59 , Processed in 0.624637 second(s), Total 76, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号