logo资料库

基于MPX4115传感器的数字压力测量仪-电路图及源程序.doc

第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
资料共6页,全文预览结束
在 proteus 下按照下面 的图画出电路图,再将 所有程序用 keil C 编译 后 生 成 hex 文 件 导 入 proteus 即可仿真成功! 我的另一个文档是关于此的课程设 计,欢迎下载! 1
基于 MPX4115 的数字压力测量仪 步骤:(1)在 Proteus 软件画出电路图 (2)用 keil C 软件写出 C 程序,并生成.hex 文件,导入到单片机当中,进行仿真, 观察结果。 压力测试仪系统描述; 输入 15--115kPA 压力信号 输出 00h--ffh 数字信号(adc0832) 在 LED 上显示实际的压力值,如果超限则报警 线性区间标度变换公式: 作者: y=(115-15)/(243-13)*X+15kpa 2
单位: 日期:2008.3.7 ********************************************************/ #include #include "intrins.h" #define uint unsigned int #define uchar unsigned char //ADC0832 的引脚 sbit ADCS =P2^0; sbit ADDI =P3^7; sbit ADDO =P3^7; sbit ADCLK =P3^6; //ADC0832 chip seclect //ADC0832 k in //ADC0832 k out //ADC0832 clock signal unsigned char dispbitcode[8]={0xf7,0xfb,0xfd,0xfe,0xef,0xdf,0xbf,0x7f}; unsigned char dispcode[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff}; 共阳数码管字段码 unsigned char dispbuf[4]; uint temp; uchar getdata; //获取 ADC 转换回来的值 //位扫描 // //12mhz delay 1.01ms void delay_1ms(void) { unsigned char x,y; x=3; while(x--) { } y=40; while(y--); } void display(void) { char k; for(k=0;k<4;k++) { //数码管显示函数 P1 = dispbitcode[k]; P0 = dispcode[dispbuf[k]]; if(k==1) //加上数码管的 dp 小数点 P0&=0x7f; delay_1ms(); 3
//AD 转换,返回结果 } } /************ 读 ADC0832 函数 ************/ //采集并返回 unsigned int Adc0832(unsigned char channel) { uchar i=0; uchar j; uint dat=0; uchar ndat=0; if(channel==0)channel=2; if(channel==1)channel=3; ADDI=1; _nop_(); _nop_(); ADCS=0;//拉低 CS 端 _nop_(); _nop_(); ADCLK=1;//拉高 CLK 端 _nop_(); _nop_(); ADCLK=0;//拉低 CLK 端,形成下降沿 1 _nop_(); _nop_(); ADCLK=1;//拉高 CLK 端 ADDI=channel&0x1; _nop_(); _nop_(); ADCLK=0;//拉低 CLK 端,形成下降沿 2 _nop_(); _nop_(); ADCLK=1;//拉高 CLK 端 ADDI=(channel>>1)&0x1; _nop_(); _nop_(); ADCLK=0;//拉低 CLK 端,形成下降沿 3 ADDI=1;//控制命令结束 _nop_(); _nop_(); dat=0; for(i=0;i<8;i++) 4
{ dat|=ADDO;//收数据 ADCLK=1; _nop_(); _nop_(); ADCLK=0;//形成一次时钟脉冲 _nop_(); _nop_(); dat<<=1; if(i==7)dat|=ADDO; } for(i=0;i<8;i++) { j=0; j=j|ADDO;//收数据 ADCLK=1; _nop_(); _nop_(); ADCLK=0;//形成一次时钟脉冲 _nop_(); _nop_(); j=j<<7; ndat=ndat|j; if(i<7)ndat>>=1; } ADCS=1;//拉低 CS 端 ADCLK=0;//拉低 CLK 端 ADDO=1;//拉高数据端,回到初始状态 dat<<=8; dat|=ndat; return(dat); //return ad k } void main(void) { while(1) { press; unsigned int temp; float getdata=Adc0832(0); if(14
dispbuf[3]=temp/1000; dispbuf[2]=(temp%1000)/100; dispbuf[1]=((temp%1000)%100)/10; dispbuf[0]=((temp%1000)%100)%10; display(); //取压力值百位 //取压力值十位 //取压力值个位 //取压力值十分位 } } } 程序完! 6
分享到:
收藏