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手册中的经典电路进行连接

  • 相关阅读:
    VIJOS-P1340 拯救ice-cream(广搜+优先级队列)
    uva 11754 Code Feat
    uva11426 GCD Extreme(II)
    uvalive 4119 Always an Interger
    POJ 1442 Black Box 优先队列
    2014上海网络赛 HDU 5053 the Sum of Cube
    uvalive 4795 Paperweight
    uvalive 4589 Asteroids
    uvalive 4973 Ardenia
    DP——数字游戏
  • 原文地址:https://www.cnblogs.com/sophomores/p/13218518.html
Copyright © 2011-2022 走看看