zoukankan      html  css  js  c++  java
  • 51小项目——使用proteus搭建简易的光照度计-(2)

    此篇博客承接上一篇:51小项目——使用proteus搭建简易的光照度计-(1)

    AD信号处理模块

    主要内容为51单片机最小系统的构建

    硬件

    主控

    复位按键

    晶振电路

    串口下载模块

    软件

    原理叙述

    单片机将采集到的adc值进行处理,根据adc转换公式

    [U_{out}=frac{U_{in}}{5V} * 2^8 ]

    可得

    [U_{in}=frac{U_{out}*5V}{2^8} ]

    数码管显示位数为两位,adc采集电压范围为0-5V,数码管显示范围为0-99,等比例的将0-5V的电压值扩散到0-99中,

    [value=frac{U_{in}}{5V}*99=frac{U_{out}}{2^8} *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端口就会输出占空比为(frac{CurrentBuzzer}{Cycle}) 的PWM方波信号。即可实现对蜂鸣器的控制

    供电模块

    供电模块使用L7805模块完成12V到5V的转换,供电电路按照L7805手册中的经典电路进行连接

  • 相关阅读:
    MySQL协议分析(2)
    MySQL协议分析(1)
    《汇编语言》知识重点总结
    opencv学习(1.2)
    CentOS 6下OpenCV的安装与配置
    python2与python3之间的主要区别
    python-PEP8编码规范
    解决windows 10无法打开.hlp帮助文件的问题
    将windows server 2016改造为像windows 10一样适合个人使用的系统
    系统分析师成长之路
  • 原文地址:https://www.cnblogs.com/sophomores/p/13218518.html
Copyright © 2011-2022 走看看