1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
//简易门铃声音演示实例 #include #include //引脚定义,分别定义按键和蜂鸣器的引脚 ***it KEY = P1^7; ***it SOUNDER = P3^0; //全局变量定义,定义定时中断溢出次数 unsigned char counter; //主函数 void main(void) { //IE = 0x82; TMOD = 0x01; //定时器0工作在模式0 TH0 = 0xFD; //定时器赋初值 TL0 = 0x44; EA = 1; //开总中断 ET0 = 1; //开定时器0定时溢出中断 SOUNDER = 0; while(1) { if(KEY == 0)//判断按键按下 { TR0 = 1; //开启定时器 while(KEY == 0); //等待按键松开 SOUNDER=0; } } } //定时器0的定时中断函数 void timer0(void) interrupt 1 { SOUNDER = ~SOUNDER;//蜂鸣器输出电平取反 counter++;//中断发生次数加1 //中断发生次数小于400,发出“叮”的模拟音 if(counter < 400) { TH0 = 0xFD; TL0 = 0x44; } //中断发生次数大于于400,但是小于800,发出“咚”的模拟音 else if (counter < 800) // { TH0 =0xFC; TL0 = 0x18; } else//完成一次门铃发音 { TR0 = 0;//关闭定时器 counter = 0;//中断次数清0 } } 程序如上图,运行的时候一直响,感觉根本没进入中断函数,求大神抱抱
|
|
相关推荐
4个回答
|
|
求大神帮忙
|
|
|
|
unsigned char counter;,这里counter的定义是char,最大也只有255,应该是定义成unsigned int counter;
|
|
|
|
改了一下可以了,蜂鸣器声音自己调整。
#include //#include //引脚定义,分别定义按键和蜂鸣器的引脚 ***it KEY = P1^7; ***it SOUNDER = P3^0; //全局变量定义,定义定时中断溢出次数 unsigned int counter; /*------------------------------- 1ms延时子程序(11.0592MHz 12T) -------------------------------*/ void delayms(unsigned int k) { unsigned int i,j; for(i=k;i>0;i--) for(j=114;j>0;j--); } //主函数 void main(void) { //IE = 0x82; TMOD = 0x01; //定时器0工作在模式0 TL0 = 0x48; //设置定时初值200us TH0 = 0xFF; //设置定时初值200us // TH0 = 0xFD; //定时器赋初值 // TL0 = 0x44; EA = 1; //开总中断 ET0 = 1; //开定时器0定时溢出中断 SOUNDER = 0;//蜂鸣器端口初始化 while(1) { if(!KEY)//判断按键按下 { delayms(20);//延时消抖 if(!KEY)//再次判断按键按下 { TR0 = 1; //开启定时器 while(!KEY); //等待按键松开 // SOUNDER=0; } } } } //定时器0的定时中断函数 void Timer0(void) interrupt 1 { SOUNDER = ~SOUNDER;//蜂鸣器输出电平取反 counter++;//中断发生次数加1 //中断发生次数小于2000,发出“叮”的模拟音 if(counter < 2000) { TL0 = 0x48; //设置定时初值200us TH0 = 0xFF; //设置定时初值200us // TH0 = 0xFD; // TL0 = 0x44; } else if(counter >= 4000) //完成一次门铃发音 { TR0 = 0;//关闭定时器 counter = 0;//中断次数清0 SOUNDER=0; //蜂鸣器端口复位 } else//中断发生次数大于于2000,但是小于4000,发出“咚”的模拟 { TL0 = 0x1A; //设置定时初值250us TH0 = 0xFF; //设置定时初值250us // TH0 =0xFC; // TL0 = 0x18; } } |
|
|
|
你的counter定义的类型是unsigned char 范围是0-255;而你counter 却用到了400,800了,肯定出错
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-mfgtools烧录流程之烧写原理
321 浏览 0 评论
请问SPH0641LU4H这款麦克风如何在不使用I2S的情况下,单纯通过GPIO来进行驱动且正常读取数据呢
325 浏览 0 评论
296 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第三十六章 照相机实验
313 浏览 0 评论
STM32模拟eeprom只有起始地址0x8001000正常其他地址都会造成单片机运行不正常怎么回事
276 浏览 1 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12078 浏览 31 评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-31 02:50 , Processed in 0.860306 second(s), Total 77, Slave 59 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号