干电池电压检测程序及流程图干电池电压检测程序及流程图
主程序
#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,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。