用定时器设计门铃,按下按键时蜂鸣器发出叮咚的门铃声
叮咚 产生的方式
仿真
程序代码
#include<reg51.h>
sbit key=P3^4;//设置一个按键的接口
sbit beep=P1^5;//设置门铃接口
#define CRYSTAL_FREQ 12000000 //晶振
#define INTERRUPT_PERIOD_0 4000//分频系数 1/4000s=250us
#define uchar unsigned char
#define uint unsigned intuchar ding,dong,start,stop;
uint flag;
//
//
void delayms(uchar x)//按键消抖毫秒级延时
{int i,j;for(i=x;i>0;i--)for(j=0;j<120;j++);
}
//https://blog.csdn.net/qq_43033547/article/details/89678078
//关于延时函数的一些说明
void Canshu_Init()
{ding=0;dong=0;start=0;stop=0;flag=0;
}
//
//
void Interrupt_Init()//中断初始化,注意事先关闭定时器0所以TR0先没有赋1
{TMOD = 0x01; TH0 = (65536 - CRYSTAL_FREQ / 12 / INTERRUPT_PERIOD_0) / 256;TL0 = (65536 - CRYSTAL_FREQ / 12 / INTERRUPT_PERIOD_0) % 256;ET0 = 1; EA = 1;
}
//
//
void main()
{
Canshu_Init();
Interrupt_Init();
while(1) //一直检测有没有按键按下{if(key==0){delayms(5);if(key==0){TR0 = 1;//timer0 startwhile(stop);//直到按键松开}}}
}//
//void Timer0() interrupt 1//重点函数
{TH0 = (65536 - CRYSTAL_FREQ / 12 / INTERRUPT_PERIOD_0) / 256;TL0 = (65536 - CRYSTAL_FREQ / 12 / INTERRUPT_PERIOD_0) % 256;flag++;//记录每一个250usif(flag==2000)//0.5s get 函数1,切换叮咚{flag=0;if(start==0) //{start=~start;}else{start=0;stop=~stop;TR0=0;//关闭定时器,等待下次按铃}}if(start==0)// 函数2,检测到按键后ding响,0.5s后执行函数1,让start=1{ding++;if(ding==3){ding=0;beep=~beep;}}else // 函数3,start=1之后开始执行,执行完执行函数1{dong++;if(dong==4){dong=0;beep=~beep;}}}
用定时器设计门铃,按下按键时蜂鸣器发出叮咚的门铃声相关推荐
- html打开时按钮自动触发事件,html在用户按下按键时触发的事件属性onkeydown
实例 当用户按键时执行一段 JavaScript: 浏览器支持 IE Firefox Chrome Safari Opera 所有主流浏览器都支持 onkeydown 属性. 定义和用法 onkeyd ...
- 按键使蜂鸣器发出报警声
#include <reg52.h> #define uchar unsigned char #define uint unsigned int sbit SPK = P2^2; sbit ...
- c语言写按键控制蜂鸣器,51单片机用按键控制蜂鸣器发出do re mi fa...的声音,...
满意答案 0fhk9 2017.12.30 采纳率:53% 等级:7 已帮助:1961人 T0HEQU 30H T0L EQU 31H ORG 0000H LJMP MAIN ORG 000BH ...
- html 键盘按下时间,HTML OnKeypress 事件属性|用户按下键盘按键时触发
定义与用法 onkeypress 属性在按下按键时触发. 提示: 与 onkeypress 事件相关的事件触发顺序: onkeydown onkeypress onkeyup 提示: onkeypre ...
- 技术精讲丨多线程环境下时间轮-海量定时任务的定时器设计
多线程环境下海量定时任务处理-定时器设计 1. 定时器设计 2. 红黑树.最小堆以及跳表的实现对比 3. 时间轮的实现 视频讲解如下,点击观看: 技术精讲丨多线程环境下时间轮-海量定时任务的定时 ...
- 多线程环境下海量定时任务的定时器设计丨时间轮实现丨红黑树,跳表分析
多线程环境下海量定时任务定时器设计 1. 定时器分析 2. 红黑树,最小堆,跳表实现比较分析 3. 时间轮实现 [Linux后端开发系列]多线程环境下海量定时任务的定时器设计丨时间轮实现丨红黑树,跳表 ...
- Linux下按键设备驱动开发以及对中断的上半部分和下半部分详细介绍
文章目录 一.编写并且加载设备树插件 (1)检测管脚是否占用 (2)添加设备树插件 (3)加载设备树插件 二.中断相关函数 (1)request_irq中断注册函数 (2)free_irq中断注销函数 ...
- 51单片机课程设计——利用51单片机的定时器设计一个时钟论文
计科在读,分享自己做过的作业,欢迎指正,有需要课程设计论文的可以私信我 摘要 单片机是一种数字集成电路芯片,是指集成在一块芯片上的微型计算机.一个比较完整的单片机应该包括微处理器(CPU). 存储器( ...
- 【单片机学习笔记】(31):串口调试技巧、TFT触摸屏初识别、stm32F4与F1对比使用(全系列初始化概览)、YSF4的光耦隔离保护、外部中断与定时器消抖相结合的按键检
串口调试技巧 可以将调试时会用到,但实际演示是不需要用到的代码用 #if xxx //这里放调试代码 #endif xxx是 一个宏定义,如果等于0则不编译相关代码,如果为1则编译相关代码 TFT ...
最新文章
- hdu4829 带权并查集(题目不错)
- 【二分查找万能模板,告别死循环、告别越界】Leecode 34. 在排序数组中查找元素的第一个和最后一个位置
- 多线程创建方式 线程池、Future和CompletableFuture
- mongodb 监听不到端口_干货|MongoDB简单操作和通过python进行操作
- Windows Live Messenger 新功能预览
- 设计模式学习笔记(1)——单例模式
- Binary Tree Paths
- 【解决方案】客户端请求数据较大时,nginx返回数据被截断
- unity怎么设置游戏页面_王者荣耀李小龙粤语语音包怎么得?李小龙粤语语音包获取与设置方法介绍[多图] - 游戏攻略...
- 九大CTO畅谈软件定义未来
- [Android]应用语言切换的三种方法
- Docker基础(下)
- 微软公司按照成熟度把服务器端企业,战略性新兴产业基础知识(公需课作业).pdf...
- 解决Python中TypeError: unbound method 问题
- 如何缩小pdf的大小?如何将pdf文件变小一点?
- 基于ASP.NET通用后台管理系统模板
- 项目开发 | 转载 | 需求评审与技术评审
- android 4.4 hifi,海贝(HiBy)R5安卓高解析无损播放器 4.4平衡随身听便携HIFI 双向蓝牙 铝合金黑色...
- 【rem】什么是rem,如何使用rem
- Linux-动态监控进程