51小项目——使用proteus搭建简易的光照度计-(2)
此篇博客承接上一篇:51小项目——使用proteus搭建简易的光照度计-(1)
AD信号处理模块
主要内容为51单片机最小系统的构建
硬件
主控
复位按键
晶振电路
串口下载模块
软件
原理叙述
单片机将采集到的adc值进行处理,根据adc转换公式
U o u t = U i n 5 V ∗ 2 8 U_{out}=\frac{U_{in}}{5V} * 2^8 Uout=5VUin∗28
可得
U i n = U o u t ∗ 5 V 2 8 U_{in}=\frac{U_{out}*5V}{2^8} Uin=28Uout∗5V
数码管显示位数为两位,adc采集电压范围为0-5V,数码管显示范围为0-99,等比例的将0-5V的电压值扩散到0-99中,
v a l u e = U i n 5 V ∗ 99 = U o u t 2 8 ∗ 99 value=\frac{U_{in}}{5V}*99=\frac{U_{out}}{2^8} *99 value=5VUin∗99=28Uout∗99
蜂鸣器使用51单片机输出的不同占空比的PWM波来控制,PWM波占空比0-99,故此值同样可以用于蜂鸣器的PWM控制。
数码管模块
LED模块从上一个项目继承而来,可作为8位数码管的驱动,本项目在硬件上只连接了2位数码管,此程序仍然可以使用,但,P3.0-P3.5口被占用
硬件方面
软件方面
程序通过取余得到传入值的每一位,然后送入PrintBit函数处理显示
Codevalue数组和chipcode数组分别存储字形码和位选码
PrintBit函数将选中的字形码和位选码送入相应的端口,并延时
蜂鸣器模块
51单片机的IO口驱动能力较差,不能为蜂鸣器提供大电流,三极管S8550最大驱动电流为1A,可以为蜂鸣器提供较大的电流当NPN管基极为高电平时,NPN管导通,为蜂鸣器提供较大的电流,实际使用中会在各个极之间,加上限流电阻,避免电流过大,超过NPN管的耗散功率
硬件方面
软件方面
在主函数中调用ChangeBuzzer来实现对蜂鸣器PWM波占空比的调节,
ChangeBuzzer函数将得到的参数传递给key,在蜂鸣器驱动程序中我们使用定时器来控制蜂鸣器,
在InitBuzzer函数中为蜂鸣器分配定时器0并赋值TMOD指定定时器为16位模式,TH0,TL0,为定时器赋初值,初值的大小是根据蜂鸣器发声来调整的,尽量将初值设计的比较小,使计时间隔增大,以便能清晰的感觉到蜂鸣器发声的间隔,EA是中断总开关,使能中断,ET0,打开定时器0中断,在这里,同时为定时器1做了相同的配置,是因为在设计时adc芯片需要单片机提供时钟信号,这里使用定时器1来为adc提供一个脉冲信号。
TimerBreaker是定时器0的中断响应函数,当系统发生中断事件后,CPU将程序压栈后,进入中断处理函数,每次中断后Count和Flag都会加一,Count记录发生的中断次数,Flag为标志,如果Flag小于预设值CarrentBuzzer,输出端口Pwm_Port输出高电平,否则输出低电平,当Count和Flag都大于预设值时,清零,重新开始计数,这样设计后,在Pwm_Port端口就会输出占空比为 C u r r e n t B u z z e r C y c l e \frac{CurrentBuzzer}{Cycle} CycleCurrentBuzzer 的PWM方波信号。即可实现对蜂鸣器的控制
供电模块
供电模块使用L7805模块完成12V到5V的转换,供电电路按照L7805手册中的经典电路进行连接
51小项目——使用proteus搭建简易的光照度计-(2)相关推荐
- java小项目 ATM机(简易版)
目录 说明 项目介绍 功能介绍 结构图 各模块代码 登录界面 服务选择界面 存取款界面 修改密码模块 转账模块 总代码 说明 简单做了一个java的ATM机项目.本项目只能作为一个简单的运行程序.因为 ...
- qt小项目三 代码实现简易的QQ聊天界面的对话框弹出功能
实现效果 点击成员列表中的头像,实现对应对话框弹出的功能. 打开的对话框不可以再次打开,同时弹出提示消息框. 打开一个窗口 再次打开该窗口 补充后的代码 myDialog.cpp文件中新增信号槽处理函 ...
- 矩阵键盘基于51(UcosII)计算器小项目
矩阵键盘 最近要给学弟学妹(应该没有)培训矩阵键盘,正好写一写我写矩阵键盘的思路,顺便分享一个之前做的基于ucosii的计算器小项目 原理 原理就不介绍了,CSDN有很多分享的,推荐两篇参考一下: 参 ...
- springboot-vue简单小项目搭建
springboot-vue (前端VUE部分) 简单搭建一个基于springboot+vue的小项目(前端VUE部分) 首先,将整个项目下载下来,然后在项目文件夹里面执行命令: npm instal ...
- Java web小项目_个人主页(1)—— 云环境搭建与项目部署
摘自:Java web小项目_个人主页(1)-- 云环境搭建与项目部署 作者:丶PURSUING 发布时间: 2021-03-26 23:59:39 网址:https://blog.csdn.net/ ...
- pygame小项目 ~ 3 :Python完成简易飞机大战
pygame小项目 ~ 3 :Python完成简易飞机大战 子弹 敌机 我方战斗机全部采用图片 子弹击中和战斗机被击中全部采用碰撞检测 游戏的主函数代码 import spite from spite ...
- Django的搭建和小项目处理的过程(二)
Django的搭建和小项目处理的过程(二) Django的搭建和小项目处理的过程(一). 二:连接到数据库 虽然我仍然对此一知半解,但是这一步的操作的作用好像是这样做了之后才是提供了一个前端操作对数据 ...
- 原生微信小程序项目基础框架搭建
原生微信小程序项目基础框架搭建 文件目录结构 1. 环境变量(开发环境, 线上环境,测试环境)便于在不同环境的切换 接口的url webview的前缀url 埋点相关的环境参数 本地存储的环境变量配置 ...
- qt小项目 代码实现简易的QQ聊天界面
qt小项目 代码实现简易的QQ聊天界面 代码 效果图 总结 代码 myDialog.h #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QW ...
最新文章
- 对MySQL进行逻辑卷备份与恢复
- C语言程序设计第一节课作业
- Linux之scp命令实现远程服务器的文件拷贝
- python毕业设计论文-25 行 Python 代码毕业设计实现人脸识别
- switch分支结构
- 第一个Android项目
- Java学习笔记10-1——MyBatis
- java坐标移动题目case_用java怎样编写一个二维坐标平移程序
- lisp中getkword输入默认_2分钟学会在Word中制作田字格 米字格 书法练字再也不用买本子了...
- CentOS添加新角色(新增一个具有root权限的新用户)
- 翻译: 欢迎使用 KITTI Vision Benchmark Suite!
- 压力测试工具----JMeter
- python漏洞扫描器爬虫_Python系列之——漏洞平台厂商列表爬虫
- Tippy.js - 免费开源且高度可定制的气泡提示独立组件
- python自动化测试面试题代码_Python自动化测试面试题-编程篇
- 信鸽推送集成采坑之代码混淆报错/XINGE: [Util] please add wup-1.0.0.E-SNAPSHOT.jar in your libs
- java implements的用法总结
- 可替换商业软件的开源免费软件集总
- 算法的trick_完整推导了svm一遍,还有强化学习问的很多,dqn的各种trick了...
- c++中的点号(.),冒号(:)和双冒号(::)运算符