为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

干电池电压检测程序及流程图

2017-09-01 8页 doc 24KB 38阅读

用户头像

is_219945

暂无简介

举报
干电池电压检测程序及流程图干电池电压检测程序及流程图 主程序 #include<reg52.h> #include<delay.h> #include<display.h> #include<mcp3202.h> #define VAR 1 sfr WDTRST=0xa6; float Ut; unsigned char channel=0,dis1; void main() { TMOD |= 0x11; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响...
干电池电压检测程序及流程图
干电池电压检测程序及图 主程序 #include<reg52.h> #include<delay.h> #include<display.h> #include<mcp3202.h> #define VAR 1 sfr WDTRST=0xa6; float Ut; unsigned char channel=0,dis1; void main() { TMOD |= 0x11; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响 TH0=0xfe; //设定定时器初始值 TL0=0x05; EA=1; //总中断打开 ET0=1; //定时器中断打开 TR0=1; //定时器开关打开 while(1) { Ut=MCP3202_ReadVol(channel)/10; //10mv dis1=Ut; }; } void timer0() interrupt 1//200Hz { TH0=0xfe; //定时器初始值重置 } TL0=0x05; display(dis1); MCP3202驱动子程序 #include <reg52.h> #ifndef MCP3202_H #define MCP3202_H #define uint unsigned int #define uchar unsigned char sbit MCP3202_CS=P1^7; sbit MCP3202_DIN=P1^6; sbit MCP3202_DOUT=P1^5; sbit MCP3202_CLK=P1^4; #endif /*函数声明*/ uint MCP3202_ReadAD(uchar ch); uint MCP3202_ReadAdValue(uchar ch); float MCP3202_ReadVol(uchar ch); #define LOW 0 #define HIGH 1 #include <reg52.h> #include <mcp3202.h> /************************************/ /*函数功能:读取AD值*/ /*参数:ch通道*/ /*返回:AD值*/ /************************************/ uint MCP3202_ReadAdValue(uchar ch) {/*start single channel sample null bit don't care*/ uchar data i,ctl=0xE0;/*11 000 0(clk)0(clk)0*/ uint data ad=0; EA=0; ctl=ctl|(ch<<2);/*建立控制字*/ MCP3202_CS=HIGH;/*建立连接,CS:high->low*/ MCP3202_CLK=LOW;/*时钟线初始化,clk:low*/ MCP3202_CS=LOW;/*建立连接,CS:high->low*/ for(i=0;i<6;i++)/*发送控制字*/ { MCP3202_DIN=ctl&0x80;/*发送一位*/ MCP3202_CLK=HIGH;/*(clk=1)开始位cs=0,din=1;(clk=2)单极性din=1*/ ctl=ctl<<1;/*(clk=3,4,5)通道编号*/ MCP3202_CLK=LOW;/*(clk=6)采样, 保持;(clk=7)NULL BIT*/ } for(i=0;i<12;i++)/*读取AD值*/ { } MCP3202_CLK=HIGH;/*时钟线拉高*/ ad=ad<<1; /*输入 数据左移一位*/ MCP3202_CLK=LOW;/*时钟线拉低*/ ad=ad|MCP3202_DOUT; EA=1; return ad; } /************************************/ /*函数功能:读取电压值*/ /*参数:ch通道*/ /*返回:转换后的电压值(mv)*/ /************************************/ uint MCP3202_ReadAD(uchar ch) { } uchar data i,max,min; uint data adv[5],ad=0; adv[0]=MCP3202_ReadAdValue(ch);/*函数调用*/ adv[1]=MCP3202_ReadAdValue(ch);/*函数调用*/ adv[2]=MCP3202_ReadAdValue(ch);/*函数调用*/ adv[3]=MCP3202_ReadAdValue(ch);/*函数调用*/ adv[4]=MCP3202_ReadAdValue(ch);/*函数调用*/ /*寻找最大值和最小值*/ max=min=0;/*下标*/ for(i=1;i<5;i++) { if(adv[min]>adv[i])min=i;/* 寻找最小值*/ if(adv[max]<adv[i])max=i;/*寻找最大值*/ } ad=(adv[0]+adv[1]+adv[2]+adv[3]+adv[4]-adv[min]-adv[max])/3.0; return ad; /************************************/ /*函数功能:读取电压值 */ /*参数:ch通道*/ /*返回:转换后的电压值(mv)*/ /************************************/ float MCP3202_ReadVol(unsigned char ch) { uchar data i,max,min; uint data adv[5],ad=0; float data vol=0; adv[0]=MCP3202_ReadAD(ch); adv[1]=MCP3202_ReadAD(ch); adv[2]=MCP3202_ReadAD(ch); adv[3]=MCP3202_ReadAD(ch); adv[4]=MCP3202_ReadAD(ch); /*寻找最大值和最小值*/ max=min=0;/*记录 下标*/ for(i=1;i<5;i++) { if(adv[min]>adv[i])min=i;/*寻找最小值*/ if(adv[max]<adv[i])max=i;/*寻找最大值*/ } ad=(adv[0]+adv[1]+adv[2]+adv[3]+adv[4]-adv[min]-adv[max])/3.0; vol=ad*5000.0/4096; } return vol; 延时子程序 #ifndef __DELAY_H__ #define __DELAY_H__ /*------------------------------------------------ uS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时 长度如下 T=tx2+5 uS ------------------------------------------------*/ void DelayUs2x(unsigned char t); /*------------------------------------------------ mS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振12M,精确 延时请使用汇编 ------------------------------------------------*/ void DelayMs(unsigned char t); #endif #include "delay.h" /*------------------------------------------------ uS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时 长度如下 T=tx2+5 uS ------------------------------------------------*/ void DelayUs2x(unsigned char t) { while(--t); } /*------------------------------------------------ mS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振12M,精确 延时请使用汇编 ------------------------------------------------*/ void DelayMs(unsigned char t) { while(t--) { //大致延时1mS DelayUs2x(245); DelayUs2x(245); } } 显示子程序 #ifndef __DISPLAY_H__ #define __DISPLAY_H__ #include<reg52.h> void display(unsigned char); #endif #include <delay.h> #include <reg52.h> #include <display.h> unsigned char dis; unsigned char disp[3]; sbit com1=P2^0; sbit com2=P2^1; sbit com3=P2^2; void displaydate(unsigned char c) { unsigned char temp; temp=disp[c]<<4; P2&=0x0f;//00001111B P2|=temp; } void conve() { } void display(unsigned char displaydat) { } static unsigned char c=0; dis=displaydat; conve(); switch(c) { case 0:displaydate(c); com1=1; com2=0; com3=0; break; case 1:displaydate(c); com1=0; com2=1; com3=0; break; case 2:displaydate(c); com1=0; com2=0; com3=1; break; disp[0]=dis/100; disp[2]=(dis-disp[0]*100)%10; disp[1]=(dis-disp[0]*100)/10; }; c++; if(c>3) c=0;
/
本文档为【干电池电压检测程序及流程图】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索