压力传感器程序

合集下载

PLC控制温度湿度压力传感器

PLC控制温度湿度压力传感器

中文摘要摘要目前对于工厂环境的监测和控制,基本上是人工进行的,劳动强度大,繁琐。

由于人工反应不及时,造成损失的现象时有发生。

而且现在许多工厂车间对于环境的要求越来越高,固有的监测和控制方法已经不能满足其需求。

随着PLC 技术的发展,PLC技术被更广泛的应用于实时监测和控制中来。

通过PLC技术的应用,能够清晰直观并且实时的收集信息,并自动快速的做出反应,实现对车间环境的自动化、智能化。

本论文主要讲述了基于以西门子S7-200系列可编程控制器(PLC)为主要的控制元件,采用PID算法进行控制,运用PLC梯形图编程语言进行编程。

本次设计的目的是实现对工厂环境的温度,湿度及管道压力进行实时监测和显示,并通过PID算法对温度、湿度和压力进行控制,使环境可以维持在工业要求的范围内。

关键词:温度湿度压力可编程控制器AbstractABSTRACTNow the monitoring and controlling of factory environment is basically a manual of labor-intensive and cumbersome. Artificial response in a timely manner, resulting in the phenomenon of the loss occurred. And now, the increasingly high demand for many of the factory floor environment, inherent in the monitoring and control methods have been unable to meet their needs. With the development of PLC technology, PLC technology is more widely used in the real-time monitoring and control. Through the application of PLC technology, clear and intuitive and real-time collection of information, automatically and quickly respond to the automation of the workshop environment, intelligent.This paper mainly based on Siemens S7-200 series programmable controller (PLC) for the control of the main components,the use of the PID algorithm,the use of PLC ladder programming language programming,to achieve the factory environment, temperature, humidity and pressure of the pipeline real-time monitoring and display, and at the same temperature, humidity and pressure control design method.Key words: temperature humidity pressure PLC目录摘要 (I)ABSTRACT (II)目录 (III)第一章引言......................................... - 1 -1.1 课题的背景和意义.................................. - 1 - 1.2 国内外研究现状.................................... - 1 - 1.3 本课题的主要研究内容............................... - 2 - 第二章 PID算法介绍.................................. - 3 - 2.1 PID算法简介...................................... - 3 - 2.2 PID参数的调整.................................... - 4 - 2.3 PID控制的应用.................................... - 5 - 第三章基于PLC监控系统的硬件设计 ....................... - 7 -3.1 系统的主要技术指标与参数........................... - 7 - 3.2 系统设计方案的论证 ................................ - 7 - 3.3 PLC的概述及选型 .................................. - 7 -3.3.1 PLC的产生和应用 ............................... - 8 -3.3.3 PLC的选型 ................................... - 10 -3.4 传感器的选择.................................... - 11 -3.4.1 温度传感器的选择.............................. - 11 -3.4.2 湿度传感器................................... - 13 -3.5 模块的配置和应用................................ - 15 - 3.6 其他元器件的选择................................ - 16 - 3.7 系统硬件接线图.................................. - 17 - 第四章系统的软件设计............................... - 19 -4.1 常用PLC程序的设计方法........................... - 19 -4.2 系统流程图..................................... - 19 - 4.3 温度监控程序的设计 .............................. - 20 - 4.4 湿度监控程序设计................................ - 25 - 4.5 压力监控子程序.................................. - 28 - 结论 ............................................. - 33 -参考文献.......................................... - 34 -致谢及声明......................................... - 35 -第一章引言1.1 课题的背景和意义温度、湿度、压力和人类的生产、生活有着密切的关系,同时也是工业生产中最常见最基本的工艺参数,例如机械、电子、石油、化工等各类工业中广泛需要对温度、湿度、压力的检测和控制。

plc压力控制程序实例

plc压力控制程序实例

以下是一个简单的PLC压力控制程序的示例:// 定义输入变量input: I0.0 (启动按钮), I0.1 (停止按钮), I0.2 (压力传感器信号);// 定义输出变量output: Q0.0 (电磁阀控制信号), Q0.1 (报警灯控制信号);// 定义中间变量internal: D0 (压力设定值), D1 (实际压力值), D2 (偏差值), D3 (PID控制参数);// 程序启动时,初始化压力设定值和PID控制参数AT_start:D0 := 10; // 压力设定值为10barD3 := 0.1; // PID控制参数为比例系数为0.1Q0.0 := 0; // 电磁阀控制信号初始值为0(关闭状态)Q0.1 := 0; // 报警灯控制信号初始值为0(关闭状态)return;// 程序循环运行时,读取压力传感器信号并计算偏差值AT_loop:D1 := I0.2; // 实际压力值等于压力传感器信号D2 := D0 - D1; // 偏差值等于压力设定值减去实际压力值if (D2 < -D3) then // 如果偏差值小于-D3,则将偏差值赋给Q0.1并打开报警灯Q0.1 := 1;else if (D2 > D3) then // 如果偏差值大于D3,则将偏差值赋给Q0.0并打开电磁阀Q0.0 := 1;else // 如果偏差值在-D3和D3之间,则关闭电磁阀和报警灯Q0.0 := 0;Q0.1 := 0;endif;return;该程序通过读取压力传感器信号,计算偏差值,并根据偏差值控制电磁阀和报警灯的开关。

程序中的PID控制参数可以根据实际需要进行调整,以实现更好的控制效果。

PGA309 程序可编程压力传感器信号条件器:为非线性压力传感器世界带来线性说明书

PGA309 程序可编程压力传感器信号条件器:为非线性压力传感器世界带来线性说明书
• Offset
– Variations @ 25oC – Linear changes with Temperature – NonLinear changes with Temperature
• Bandwidth
– <4kHz for most pressure sensor applications
80
75
70
65
60
55
50
45
40
35
30
25
20
15
Pnl = 2.5%Span
10
5
0 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0.55 0.6 0.65 0.7 0.75 0.8 0.85 0.9 0.95 1
0
Pin
1
Pmax Normalized Pressure S timulus
-2.5%< Pnl <+2.5% (of Span)
14
Pressure (PSI)
Pnl (Pressure NonLinearity) Example
100
Pin Pnonl i n( Pi n)
0
NonLinear Pressure Out put o f Sensor 100
95
90
85
Sp an TC Vs. Temp erature
10 8 6 4
SpanT C1(T) 2 0 2 4 6 8
10
12
14
SpanTC1= -0.2%Span/°C
16
− 20 18
20 40 31 22 13 4 5 14 23 32 41 50 59 68 77 86 95 104113122131 140

一种硅压阻式压力传感器温度补偿算法及软件实现-基础电子

一种硅压阻式压力传感器温度补偿算法及软件实现-基础电子

一种硅压阻式压力传感器温度补偿算法及软件实现-基础电子摘要:硅压阻式压力传感器的零点温度漂移和灵敏度温度漂移是影响传感器性能的主要因素之一,如何能使该类误差得到有效补偿对于提高其性能很有意义。

通过对硅压阻式压力传感器建立高阶温度补偿模型进行温度误差补偿是一种有效的方法,并在该模型基础上给出了拟合系数计算方法,并用Matlab GUI 软件来实现温度补偿系数计算,进而实现传感器输出的动态温补,达到了很好的输出线性性。

实验结果表明,补偿后传感器输出的非线性误差小于0.5% F.S.0 引言硅压阻式压力传感器利用半导体材料的压阻效应来进行压力测量,以其体积小、灵敏度高、工艺成熟等优点,在各行业中得到了广泛应用。

实际工程应用中由于硅材料受温度的影响,导致零点漂移和灵敏度漂移,因此温度补偿问题是提高传感器性能的一个关键环节。

目前压力传感器主要有两种温度补偿方法:硬件补偿和软件补偿。

硬件补偿方法存在调试困难、精度低、成本高、通用性差等缺点,不利于工程实际应用;利用数字信号处理技术的软件补偿能够克服以上缺点,也逐渐成为研究热点。

目前软件补偿的方法主要有:查表法、二元插值法、BP神经网络法、小波神经网络方法、曲线曲面拟合方法等。

查表法需要占用很大内存空间,而神经网络方法存在网络不稳定、训练时间较长的缺点不利于工程应用。

在研究各类软件补偿方法的基础上对压力传感器采用建立高阶温度补偿模型进行温度误差补偿,并且在Matlab GUI软件平台下实现高阶温度补偿系数的计算,通过实验对该方法进行验证。

1 高阶温度补偿模型的建立1.1 高阶温度补偿建模压力传感器输出非线性误差主要是由零点温度漂移和灵敏度温度漂移产生,零点温度漂移是由于电阻掺杂不同而导致电阻的温度系数不同,灵敏度温度漂移主要由于压阻系数易随温度的升高而减少。

针对温度对传感器输出影响,采用对零点温度漂移和灵敏度漂移建立高阶补偿模型进行统一补偿,补偿后压力值Press(T )表示为温度传感器电压输出VT 和压力传感器电压输出VP 的函数:将Press(T )补偿转换成曲面拟合问题,采用高阶多项式拟合方法构造曲面方程:式中系数矩阵中元素CI,J 是式(2)中VP VT 项对应系数。

压力传感器单片机课程设计

压力传感器单片机课程设计

压力传感器单片机课程设计第1 章前言电力压力器中主要使用的压电材料包括有石英、酒石酸钾钠和磷酸二氢胺。

其中石英(二氧化硅)是一种天然晶体,压电效应就是在这种晶体中发现的,在一定的温度范围之内,压电性质一直存在,但温度超过这个范围之后,压电性质完全消失(这个高温就是所谓的“居里点”)。

由于随着应力的变化电场变化微小(也就说压电系数比较低),所以石英逐渐被其他的压电晶体所替代。

而酒石酸钾钠具有很大的压电灵敏度和压电系数,但是它只能在室温和湿度比较低的环境下才能够应用。

磷酸二氢胺属于人造晶体,能够承受高温和相当高的湿度,所以已经得到了广泛的应用。

早在1954年美国C.S.Smith首先确认了半导体压电效应,1955年C.Herring 指出:这种压电电阻效应是由于应力的作用,引起导体与价电子带能量状态的变化,以及载流子数量与迁移率变化所产生的一种现象。

日本从1970年开始研究开发,首先应用在血压计上,之后在过程控制领域及轿车发动机控制部分都获得了广泛的应用。

最近几年在家用电器、装配机器人等应用领域普遍采用电子压力传感器作为压力控制、压力监控和判断真空吸附的效果。

图1 电子压力器模型1第2章电子压力器的工作原理 2.1 电子压力器的工作原理电子压力器由压力传感器,A/D转换器,数码显示等组成。

当用手按压传感器,腔体内外就会产生压差,这些压差就会转化成电压,电压转化成数字量后,根据压力变化1Kpa,输出电压变化为120mV的关系,依照采样的输出电压,采用线性插值法可计算出实际压力值。

然后将实际压力值送数码管显示。

图2.1.1为PS压力传感器的截面结构图,图2.1.2为其传感器部分的结构。

如图所示,在压力传感器半导体硅片上有一层扩散电阻体,如果对这一电阻体施加压力,由于压电电阻效应,其电阻值将发生变化。

受到应变的部分,即膜片由于容易感压而变薄,为了减缓来自传感器底座应力的影响,将压力传感器片安装在玻璃基座上。

压力传感器程序

压力传感器程序

#include#include#include#include#define uchar unsigned char #define uint unsigned int#define BUSY 0x80//#define DATAPORT P0//ADC0832 的引脚sbit ADCS =P3^5; //ADC0832 chip seclectsbit ADDI =P3^7; //ADC0832 k insbit ADDO =P3^7; //ADC0832 k outsbit ADCLK =P3^6; //ADC0832 clock signalsbit LCM_RS=P2^0;sbit LCM_RW=P2^1;sbit LCM_EN=P2^2;uchar ad_data;//sbit Alarm_led_red =P1^5;//报警定义sbit Alarm_led_green=P1^6;//报警定义//adc采样值储存单元char press_data;//unsigned char ad_alarm;//unsigned char press_bai=0;//unsigned char press_shi=0;//unsigned char press_ge=0;//unsigned char press_dot=0;//uchar code str0[]={"Press: . kpa "};uchar code str1[]={" Check BY Jack "};void delay(uint);void lcd_wait(void);void//LCD 延时子程序void initLCM( //LCD 初始化子程序void//LCD 检测忙子程序void WriteCommandLCM(uchar WCLCM,uchar BusyC);写指令到ICM子函数常量定义采样值储存超出压力表量程最大值红色led 低于压力表量程最小值绿色led标度变换储存单元报警值储存单元显示值百位显示值十位显示值个位显示值十分位delay_LCM(uint);void);lcd_wait(void);//void WriteDataLCM(uchar WDLCM);//写数据到LCM子函数void DisplayOneChar(uchar X,uchar Y,uchar DData);//显示指定坐标的一个字符子函数void DisplayListChar(uchar X,uchar Y,uchar code *DData);//显示指定坐标的一串字符子函数void display(void);//系统显示子函数uchar Adc0832(unsigned char channel);void alarm(void);void data_pro(void);void main(void){delay(500);//系统延时500ms启动initLCM( );WriteCommandLCM(0x01,1);//清显示屏DisplayListChar(0,0,str0);DisplayListChar(0,1,str1);while(1){ad_data =Adc0832(0);//采样值储存单元初始化为0alarm();data_pro();display();}}void delay(uint k){uint i,j;for(i=0;i{for(j=0;j<60;j++){;}}}void WriteCommandLCM(uchar WCLCM,uchar BusyC) {if(BusyC)lcd_wait();DATAPORT=WCLCM;LCM_RS=0; LCM_RW=0;////选中指令存放器写模式LCM_EN=1;_nop_();_nop_();_nop_();LCM_EN=0;}void WriteDataLCM(uchar WDLCM) {lcd_wait( );// DATAPORT=WDLCM; LCM_RS=1;// LCM_RW=0;// LCM_EN=1;_nop_();_nop_();_nop_();LCM_EN=0;检测忙信号选中数据存放器写模式}void lcd_wait(void){DATAPORT=0xff;//读LCD前若单片机输出低电平, 而读出LCD 为高电平 , 则冲突,Proteus 仿真会有显示逻辑黄色LCM_EN=1;LCM_RS=0;LCM_RW=1;_nop_();_nop_();_nop_();while(DATAPORT&BUSY){ LCM_EN=0;_nop_();_nop_();LCM_EN=1;_nop_();_nop_();}LCM_EN=0;}void initLCM( ){DATAPORT=0;delay(15);WriteCommandLCM(0x38,0);//三次显示模式设置,不检测忙信号delay(5);WriteCommandLCM(0x38,0);delay(5);WriteCommandLCM(0x38,0);delay(5);WriteCommandLCM(0x38,1);//8bit数据传递, 2 行显示, 5*7 字型,检测忙信号WriteCommandLCM(0x08,1);//封闭显示,检测忙信号WriteCommandLCM(0x01,1);//清屏,检测忙信号WriteCommandLCM(0x06,1);//显示光标右移设置,检测忙信号WriteCommandLCM(0x0c,1);//显示屏翻开,光标不显示,不闪耀,检测忙信号}void DisplayOneChar(uchar X,uchar Y,uchar DData){Y&=1;X&=15;if(Y)X|=0x40;//若y为1(显示第二行),地点码+0X40X|=0x80;//指令码为地点码+0X80WriteCommandLCM(X,0);WriteDataLCM(DData);}void DisplayListChar(uchar X,uchar Y,uchar code *DData){uchar ListLength=0;Y&=0x01;X&=0x0f;while(X<16){DisplayOneChar(X,Y,DData[ListLength]);ListLength++;X++;}}void display(void){WriteCommandLCM(0x0c,1);//显示屏翻开,光标不显示,不闪耀,检测忙信号DisplayListChar(0,0,str0);DisplayListChar(0,1,str1);DisplayOneChar(7,0,press_bai+0x30);DisplayOneChar(8,0,press_shi+0x30);DisplayOneChar(9,0,press_ge +0x30);DisplayOneChar(11,0,press_dot+0x30);delay(1000);//稳固显示}// 收集并返回uchar Adc0832(unsigned char channel)//AD变换,返回结果{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++){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;// ADCLK=0;// ADDO=1;//拉低 CS端拉低 CLK端拉高数据端 , 回到初始状态dat<<=8;dat|=ndat;return(dat);//return ad k}void data_pro(void){unsigned int temp;float press;if(14{int//y=(115-15)/(243-13)*X+15kpapress=((10.0/23.0)*vary)+9.3;temp=(int)(press*10); press_bai=temp/1000;//////vary=ad_data;测试时赔偿值为9.3放大 10 倍,便于后边的计算取压力值百位press_shi=(temp00)/100; press_ge=((temp00)0)/10; press_dot=((temp00)0);// }////取压力值十位取压力值个位取压力值十分位}void alarm(void) {if(ad_data>=243){ Alarm_led_red=0; } else{ Alarm_led_red=1; } if(ad_data<=14){ Alarm_led_green=0; } else{ Alarm_led_green=1; }////////////假如目前压力值大于115kpa,则启动 red led报警封闭 red led报警假如目前压力值小于16kpa则启动 green led报警封闭 green led报警}。

(完整word版)压力传感器HX711程序

(完整word版)压力传感器HX711程序

#include<reg52.h>#define uchar unsigned char#define uint unsigned int #defineulong unsigned long uchar codetable[]="0123456789"; uchar codetable1[]=".Kg";sbit Icde n=P3^4;sbit Icdrs=P3A 5;sbit ADDO=P2A3;sbit ADSK=P2A4;sbit beep=P2A2;uint shiqian,qian,bai,shi,ge;uIong zhI;void deIay(uint ms){uint i,j;for(i=ms;i>0;i --)for(j=110;j>0;j --);}void write_com(uchar com){Icdrs=0;P1=com;deIay(10);Icden=1;deIay(5);Icden=0;} void init() {Icden=0;显示模式 16*2 显示, 5*7 点阵, 8 位数据接口 开显示 不显示光标 光标不闪烁 当读或写一字符后地址指针加一且光标加一, 显示清零 数据指针清零 void write_data(uchar date){write_com(0x38);//0011 1000write_com(0x0c);//0000 1100write_com(0x06);//0000 0110write_com(0x01);//00000001 } 显示不移动write_com(0x80+0x07); write_data(table1[0]); delay(50);write_com(0x80+0x08); write_data(table[bai]); delay(50);write_com(0x80+0x09); write_data(table[shi]); delay(50);write_com(0x80+0x0A);write_data(table[ge]);delay(50);write_com(0x80+0x0B);write_data(table[1]);delay(50);write_com(0x80+0x0C);lcdrs=1;P1=date;delay(10);lcden=1;delay(5);lcden=0;}void display(){ulong tamp,zhl;if(zhl>0||zhl<16777216)// 进行判断是否满足条件{tamp=((zhl*298)/100000) -24714;// 进行 AD 转换计算shiqian=tamp/10000; // 进行计算qian=tamp%10000/1000; bai=tamp%10000%1000/100;shi=tamp%10000%1000%100/10;ge=tamp%10000%1000%100%10;write_com(0x80+0x05);write_data(table[shiqian]);delay(50);// 表示使用哪个 // 显示值 1602 中的地址显示 write_com(0x80+0x06);write_data(table[qian]);// 表示使用哪个 1602 中的地址显示 // 显示值 delay(50);// 延时,主要是用来解决显示屏是否忙还是不忙write_data(table1[2]);delay(50);}else{uint z;for(z=0;z<=15;z++) // 判断条件是否超出量程,报警。

称重压力传感器HX711AD模块电路+程序

称重压力传感器HX711AD模块电路+程序
unsigned char KEY_NUM = 0;
unsigned char Price_Buffer[3] = {0x00,0x00,0x00};
unsigned long Money = 0;
bit Flag_OK = 0;
//****************************************************
if(temp==0xdd)com=5; //数字5
if(temp==0xdb)com=8;//数字8
if(temp==0xbe)com=3;//数字3
if(temp==0xbd)com=6; //数字6
if(temp==0xbb)com=9;//数字9
if(temp==0x7e)com=16;//数字A键,去皮功能
switch(Price_Count)
{
case 0:
LCD1602_write_com(0x80+0x40+6);
LCD1602_write_data(Price_Buffer[0] + 0x30);
break;
case 1:
LCD1602_write_com(0x80+0x40+7);
LCD1602_write_data(Price_Buffer[1] + 0x30);
break;
case 2:
LCD1602_write_com(0x80+0x40+9);
LCD1602_write_data(' ');
break;
default : brea)//数字D键,计算总价
{
Money = Price_Buffer[0] * 100 + Price_Buffer[1] * 10 + Price_Buffer[2];
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include<12c5a60s2.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define ADC_POWER 0x80
#define ADC_FLAG 0x10
#define ADC_START 0x08
#define ADC_SPEEDLL 0x00 //540个时钟周期转换一次#define ADC_SPEEDL 0x20 //360个时钟周期转换一次#define ADC_SPEEDH 0x40 //180个时钟周期转换一次#define ADC_SPEEDHH 0x60 //90个时钟周期转换一次sbit lcden=P3^4;
sbit rs=P3^5;
sbit wr=P3^6;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]=" Voltage value";
uchar code table1[]=" mV";
uchar t;
float AD_val;
/**************************
延时函数
**************************/
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/************************** 写指令
**************************/ void write_com(uchar com) {
rs=0;
wr=0;
P0=com;
lcden=0;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
/************************** 写数据
**************************/
void write_date(uchar date) {
rs=1;
wr=0;
P0=date;
lcden=0;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
/************************** 初始化液晶
**************************/ void lcd_init()
{
uchar i,j;
wela=0;
dula=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
for(i=0;i<14;i++)
{
write_date(table[i]);
delay(10);
}
write_com(0x80+0x40);
for(j=0;j<16;j++)
{
write_date(table1[j]);
delay(10);
}
}
/****************************
分离小数
****************************/ void fenli(uchar add,float num) {
uchar ge,bai,shi,ge1;
num=num*1000;
ge=(uint)num/1000;
bai=(uint)num%1000/100;
shi=(uint)num%100/10;
ge1=(uint)num%10;
write_com(0x80+0x40+add);
write_date(0x30+ge);
write_date(0x20+14);
write_date(0x30+bai);
write_date(0x30+shi);
write_date(0x30+ge1);
}
/*****************************
初始化AD
*****************************/
void AD_init()
{
P1ASF=0x04;
ADC_RES=0;
ADC_RESL=0;
ADC_CONTR|= ADC_POWER|ADC_SPEEDHH; delay(2);
}
/**************************
读AD值
**************************/
uint get_AD(uchar ch)
{
uint AD_date;
ch&=0x07;
ADC_CONTR=ADC_POWER|ADC_START|ADC_SPEEDHH|ch; _nop_();
_nop_();
_nop_();
_nop_();
while(!(ADC_CONTR&ADC_FLAG));
ADC_CONTR&=0x82;
AD_date=ADC_RES*4+(ADC_RESL&0x03);
return AD_date;
}
/**************************
AD_val平均值
**************************/
float AD_work(uchar ch)
{
uchar i;
float AD_val;
for(i=0;i<100;i++)
AD_val+=get_AD(ch);
AD_val/=100;
AD_val=(AD_val*5)/1024; return AD_val;
}
/*************************** 初始化T0定时器
***************************/ void T0_init()
{
TMOD=0x01;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
/***************************
主函数
***************************/ void main()
{
AD_init();
T0_init();
lcd_init();
while(1)
{
AD_val=AD_work(2);
if(t==10)
{
t=0;
fenli(9,AD_val);
}
}
}
/***************************
T0定时器中断
***************************/ void timer0() interrupt 1
{
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
t++;
}。

相关文档
最新文档