0 用AtmelStudio6.2跑mega16例程(73)压力传感器 - 单片机论坛,单片机技术交流论坛 - 21ic电子技术开发论坛
打印
[Atmel]

用AtmelStudio6.2跑mega16例程(73)压力传感器

[复制链接]
799|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ddllxxrr|  楼主 | 2014-12-23 21:13 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本程使用MPX4250。程序运行时,传感器向单片机输入电压信号,经A/D转换后,根据技术手册提供的公式进行,最后显示在数码管上。

Proteus仿真截图:



Atmel Studi6.2 运行截图:


程序清单:

/*
* GccApplication38.c
*
* Created: 2014-12-23 20:48:39
*  Author: Administrator
*/

#define F_CPU 4000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <stdint.h>
const uint8_t SEG_CODE[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};
uint8_t SEG_Display_Buffer[] = {0xF3,0,0,0};
        
void Show_PRESS_ON_DSY()
{
        uint8_t i = 0;
        for(i=0;i<4;i++)
        {
                PORTD = ~_BV(i);
                PORTC = SEG_Display_Buffer[i];
                _delay_ms(4);
        }
}        


int main(void)
{
    int AD_Result,Pressure_Value;
        DDRA = 0x7F; PORTA = 0xFF;
        DDRC = 0xFF; PORTC = 0xFF;
        DDRD = 0xFF; PORTD = 0xFF;
        ADCSRA = 0xe6;
        _delay_ms(2000);
        ADMUX = 0x07;
        
        
        while(1)
    {
        AD_Result = ADCL + (ADCH << 8);
                Pressure_Value = (AD_Result * 5.0/1023.0/5.1 - 0.04)/0.00369 + 1.99;
                SEG_Display_Buffer[1] = SEG_CODE[Pressure_Value/100];
                SEG_Display_Buffer[2] = SEG_CODE[Pressure_Value/10 % 10];
                SEG_Display_Buffer[3] = SEG_CODE[Pressure_Value%10];
                if(SEG_Display_Buffer[1]==0x3F)
                {
                       SEG_Display_Buffer[1] = 0x00;
                           if(SEG_Display_Buffer[2] == 0x3F)SEG_Display_Buffer[2] = 0x00;
                }
                Show_PRESS_ON_DSY();
    }
}


相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2399

主题

6964

帖子

68

粉丝