分类: 教育/科学 >> 科学技术 >> 工程技术科学
问题描述:
最近在搞毕业设计,要了解下数字电压表的设计原理和相关的软件知识和硬件知识,请知道的各位大大告诉下小弟~
解析:
这要看你是什么级别、什么专业的毕业设计,大专?本科?硕士?不同的级别或专业,设计标准不同。楼上说的ICL7106是老芯片,不需要程序设计。
数字电压表由电阻网络(量程调整)、直流放大(运放组成)、电压极性判断、A/D转换、数码(液晶)显示等部分组成。你如果用带A/D转换的单片机制作,软、硬件两方面都能得到锻炼,选用精简指令集的PIC系列单片机,比51系列的实用,你上网查资料,自己制定一个计划,再和指导老师商量决定方案。
在测量结果显示出来之前,对被测电压的预处理,可以做很多文章,就像有的高档万用表是没有量程的,软件配合可编程运放,自动处理,使A/D转换的精度达到最大。这里没法说详细,也不知你是应付毕业还是想学真本领。
这是一个用89S52单片机或 89C52、89C51来读取AD值和控制数码管显示的电压表程序;AD转换单片机内部没有,用的是外部的ADC芯片ADC0809或ADC0808,芯片的具体介绍你可以百度一下;程序中定义了单片机和ADC0809芯片的接口:sbit ST=P3^0;
sbit OE=P3^1;
sbit EOC=P3^2;
sbit CLK=P3^3;ST:START: A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。 EOC: A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。 OE:数据输出允许信号,输入,高电平有效。当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。 CLK:时钟脉冲输入端。要求时钟频率不高于640KHZ,单片要送出的CLK时序是用 TO定时中断完成的:void t0(void) interrupt 1 using 0
{
CLK=~CLK;//定时取反一次,制造脉冲
}
当EOC是高电平时,就是一次AD转换完成,单片机此时读ADC0809的值:if(EOC==1)
OE=1;
getdata=P0;
OE=0;
就是从P0口与ADC0809数据相连读出,读出8位的转换值 后存在getdata中,getdata再送入temp,temp再把采得的AD值转换为实际的电压值:temp=getdata235;//这是要根据实际电路的电阻而定
temp=temp/128;
后把实际电压值送入数码管扫描的缓冲数组,在T1中断中进行扫描显示:dispbuf[0]=10;
dispbuf[1]=10;
dispbuf[2]=10;
dispbuf[3]=10;
dispbuf[4]=10;
dispbuf[5]=0;
dispbuf[6]=0;
dispbuf[7]=0;
P1=dispcode[dispbuf[dispcount]]; //数码管的字段码
P2=dispbitcode[dispcount //扫描数码管的每一位 说得差不多了,估计没人会一句句程序的给你分析,何况只有10分。
//实验用程序 测试通过 STC15F2K60S2 @110592MHZ
#include "reg51h"
#include "intrinsh"
typedef unsigned char BYTE;
typedef unsigned int WORD;
sfr ADC_CONTR = 0xBC;
sfr ADC_RES = 0xBD;
sfr ADC_LOW2 = 0xBE;
sfr P1ASF = 0x9D;
BYTE ch = 0; //ADC回路数
/----------------------------
延时
----------------------------/
void Delay(WORD n){
WORD x;
while (n--){
x = 5000;
while (x--);
}
}
/----------------------------
ADC中断
----------------------------/
void adc_isr() interrupt 5 using 1{
ADC_CONTR &= !0x10;
P2=ADC_RES;
ADC_CONTR = 0x80 | 0x00 | 0x08 | ch;
}
/----------------------------
初始化ADC
----------------------------/
void InitADC(){
P1ASF = 0xff;
ADC_RES = 0;
ADC_CONTR = 0x80 | 0x00 | 0x08 | ch;;
Delay(2);
}
void main(){
InitADC(); //初始化ADC
IE = 0xa0;
while (1);
}
以上就是关于数字电压表的设计原理全部的内容,包括:数字电压表的设计原理、51单片机数字电压表P0口改到P1口程序怎么改、用STC15F2K60S2单片机设计数字电压表等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)