基于单片机的数字电压表设计 (请不要完成抄袭)
这个网上很多的 这是我之前做的一个 代码程序如下 传不上图片,可以交流下的
#include
#define uint unsigned int
#define uchar unsigned char
sbit clock=P3^7;
sbit ale=P3^3;
sbit a=P3^4;
sbit b=P3^5;
sbit c=P3^6;
sbit start=P3^0;
sbit oe=P3^1;
sbit eoc=P3^2;
sbit dopt=P1^7;
uchar code disp[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar shi,ge,yi,er,voit;
uint temp;
void delay(uint x);
uchar tt;
void display();
void main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
EX0=1;
ET0=1;
TR0=1;
a=0;
b=0;
c=0;
ale=0;
start=0;
while(1)
{
ale=1;
start=1;
delay(2);
start=0;
ale=0;
while(eoc==0);
oe=1;
//oe=0;
voit=P0;
oe=0;
display();
}
}
void extre0() interrupt 1
{
TH0=(65536-100)/256;
TL0=(65536-100)%256;
clock=~clock;
}
void display()
{
temp=voit*1.0/255*500;
shi=temp%10;
ge=temp/10%10;
yi=temp/100%10;
er=temp/1000;
//d1=1;w1=0;
P1=disp[er];
//d1=0;w1=1;
P2=0xfe;
delay(2);
P1=0x00;
//d1=1;w1=0;
P1=disp[yi];
//d1=0;w1=1;
P2=0xfd;
dopt=1;
delay(2);
P1=0x00;
//d1=1;w1=0;
P1=disp[ge];
//d1=0;w1=1;
P2=0xfb;
delay(2);
P1=0x00;
//d1=1;w1=0;
P1=disp[shi];
//d1=0;w1=1;
P2=0xf7;
delay(2);
P1=0x00;
}
void delay(uint x)
{
uchar i;
for(;x>0;x--)
for(i=0;i<120;i++);
}
关于测量2路三相交流电源中的“2路”我的理解除了任意两条相线,还有一种可能是同时监测两条供电线路中的全部三相,换句话说,就是监测两路完整的三相供电系统中的电压,实际上一共是6路!!!
所以这两种实现的差别2路AD或6路AD,一定要搞清楚,题目有点含糊,最好先问问导师。
0-150V范围若要实现0.5%误差的话,至少要有300级采样才能实现,8位是不够的,8位只有256级,而且由于信噪比的原因,ADC的末几位不能作为有效位数,这样误差就更大了,至少应该有10位的ADC才够用,建议使用11位或以上。有这样的资源的芯片比较多,比如MSP430F2012就带有ADC10,可以用来实现此功能。
在四位LED数码管上轮流显示或者选择显示被测电压的有效值这个应该比较容易,只要AD来过的数据根据采样比例转换出来,并显示就可以了。如果使用F2012的话,由于IO比较少,可以使用BCD码的显示芯片,这样可以节省IO。
数据上传功能可以使用上位机来实现,最常用的方法是串口通读取,当然单片机的IO口足够时也可以使用并口通信,这样还快些,程序也比较简单。
COM EQU 50H ;指令寄存器
DAT EQU 51H ;数据寄存器
RS EQU P2.1 ;LCD寄存器选择信号
RW EQU P2.2 ;LCD读/写选择信号
E EQU P2.3 ;LCD使能信号
ORG 0000H
LJMP MAIN ;主程序入口地址
ORG 000BH
LJMP BT0 ;T0中断入口
ORG 0030H ;主程序,初始化
MAIN:
MOV SP,#60H
LCALL INT
MOV 30H,#30H ;电压整数位
MOV 31H,#02EH ;小数点位
MOV 32H,#30H ;小数个位
MOV 33H,#30H ;小数十位
MOV 34H,#30H ;小数百位
MOV 35H,#56H ;字符"V"
MOV R7,#30H
LCALL STR0 ;显示字符串0
LCALL DELAY
LCALL STR1 ;显示字符串1
LCALL DELAY
LCALL N2 ;显示Voltage=0.000V
;***********定时器初始化程序***********
MOV TMOD,#00H ;定时器T0设为方式0
MOV TH0,#00H ;装入定时常数定时100us
MOV TL0,#00H
SETB TR0 ;启动T0
MOV 24H,#08H;装入T0中断次数
MOV IE,#82H ;开中断
LP:
MOV R7,#30H ;显示缓冲区首地址
LCALL DISPLY
SJMP LP ;循环显示
LED1:CLR P3.0
RET
DISPLY: ;LCD显示子程序
MOV COM,#0CAH
LCALL PR1
MOV DAT,30H
LCALL PR2
MOV DAT,31H
LCALL PR2
MOV DAT,32H
LCALL PR2
MOV DAT,33H
LCALL PR2
MOV DAT,34H
LCALL PR2
MOV DAT,35H
LCALL PR2
RET
STR0:
MOV COM,#01H
LCALL PR1
MOV COM,#06H
LCALL PR1
MOV COM,#090H ;设置DDRAM地址
LCALL PR1 ;调写指令代码子程序
MOV DPTR,#TAB4
MOV R2,#16
MOV R3,#00H
WRIN0:
MOV A,R3
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR2
INC R3
DJNZ R2,WRIN0
MOV COM,#0D0H
LCALL PR1
MOV DPTR,#TAB5
MOV R2,#16
MOV R3,#00H
WRIN1:
MOV A,R3
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR2
INC R3
DJNZ R2,WRIN1
MOV R3,#10H
ZUOYI:
MOV COM,#18H
LCALL PRX
DJNZ R3,ZUOYI
LCALL DELAY00
LCALL DELAY00
LCALL DELAY00
LCALL DELAY00
RET
RET
STR1:
MOV COM,#01H ;LCD清0命令
LCALL PR1 ;调写指令代码子程序
MOV COM,#06H ;输入方式命令,光标右移
LCALL PR1 ;调写指令代码子程序
MOV COM,#40H
LCALL PR1
MOV R5,#20H
MOV DPTR,#ZI
MOV R4,#0
LOOP1:MOV A,R4
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR2
INC R4
DJNZ R5,LOOP1
MOV COM,#80H
LCALL PR1
MOV DPTR,#TAB2
MOV A,#00H
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR2
MOV A,#01H
MOV DPTR,#TAB2
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR2
MOV A,#02H
MOV DPTR,#TAB2
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR2
MOV A,#03H
MOV DPTR,#TAB2
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR2
MOV R1,#00H
MOV R0,#0dH
MOV DPTR,#TAB3
LOOP2:MOV A,R1
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR2
INC R1
DJNZ R0,LOOP2
RET
N2: MOV COM,#0C0H
LCALL PR1
MOV DPTR,#TAB1
MOV R2,#10
MOV R3,#00H
WRIN:
MOV A,R3
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR2
INC R3
DJNZ R2,WRIN
RET
TAB1: DB "VOLTAGE = "
TAB2: DB 00H
DB 01H
DB 02H
DB 03H
DB 04H
DB 05H
TAB3:DB "10701 tcw "
ZI: DB 009H,00AH,00CH,01FH,00CH,00AH,00CH,009H
DB 004H,004H,01FH,004H,00AH,00AH,011H,000H
DB 004H,004H,01FH,01FH,01FH,004H,007H,000H
DB 004H,00EH,010H,00EH,000H,00EH,003H,000H
TAB4:DB " welcome ! "
TAB5:DB "DESIGN BY tcw"
TAB6:DB "123456"
;********************************************************************
;定时器T0中断服务子程序,读取ADC0809第0通道的A/D转换结果并化为显示值*
;********************************************************************
BT0:
PUSH ACC
PUSH PSW
MOV PSW,#08H
CLR TR0
MOV TH0,#00H ;重新装入初值
MOV TL0,#00H
DEC 24H
MOV A,24H
JNZ RTN1
MOV 24H,#08H
LCALL ADC
RTN1: SETB TR0
POP PSW
POP ACC
RETI
ADC:
MOV DPTR,#0F6FFH
MOV A,#0 ;选择通道0
MOVX @DPTR,A ;启动AD转换
MOV A,#40H
DJNZ ACC,$
MOVX A,@DPTR
MOV 22H,A
MOV 21H,#0CCH
CJNE A,21H,BJ0
BJ0:JNC LED
SJMP LL0
LL0:SETB P3.0
SJMP LL
LED:LCALL LED1
LL: MOV A,22H
MOV B,#05H ;A/D转换结果化为显示值
MUL AB ;(AD*5)/256
MOV 30H,B ;AD*5的高字节为整数部分
MOV B,#0AH
MUL AB ;AD*5的低字节为/256的结果,为小数部分
MOV 32H,B ;二进制小数换为10进制数
MOV B,#0AH
MUL AB
MOV 33H,B
MOV B,#0AH
MUL AB
MOV 34H,B
MOV A,30H
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV 30H,A
MOV A,32H
MOVC A,@A+DPTR
MOV 32H,A
MOV A,33H
MOVC A,@A+DPTR
MOV 33H,A
MOV A,34H
MOVC A,@A+DPTR
MOV 34H,A
RET
TAB: DB "0123456789"
;*****************************************
;****LCD间接控制方式下的初始化子程序******
;*****************************************
INT:
LCALL DELAY
MOV COM,#38H ;设置工作方式
LCALL PR1
MOV COM,#01H
LCALL PR1
MOV COM,#06H
LCALL PR1
MOV COM,#0CH
LCALL PR1
RET
DELAY: ;延时子程序
MOV R6,#0FH
MOV R7,#00H
DELAY1:
NOP
DJNZ R7,DELAY1
DJNZ R6,DELAY1
RET
DELAY00: ;延时子程序
MOV R6,#0FFH
MOV R7,#0FFH
DELAY0:
NOP
DJNZ R7,DELAY1
DJNZ R6,DELAY1
RET
;*********************************************
;*******LCD间接控制方式下的驱动子程序*********
;*********************************************
;2 写指令代码子程序
PRX:
PUSH ACC
CLR RS
SETB RW
PR110:
MOV P0,#0FFH
SETB E
LCALL DELAY00
NOP
MOV A,P0
CLR E
JB ACC.7,PR11
CLR RW
MOV P0,COM
SETB E
CLR E
POP ACC
RET
PR1:
PUSH ACC
CLR RS
SETB RW
PR11:
MOV P0,#0FFH
SETB E
LCALL DELAY
NOP
MOV A,P0
CLR E
JB ACC.7,PR11
CLR RW
MOV P0,COM
SETB E
CLR E
POP ACC
RET
;3 写显示数据子程序
PR2:
PUSH ACC
CLR RS
SETB RW
PR21:
MOV P0,#0FFH
SETB E
LCALL DELAY
MOV A,P0
CLR E
JB ACC.7,PR21
SETB RS
CLR RW
MOV P0,DAT
SETB E
CLR E
POP ACC
RET
END
这种技术活不是一会而就能完成的,大家都挺忙的,你就是给再多的分都没有人给你做的,还是出钱找人给你做吧。
哥们。我们学校的行情,友情价:做个电子钟160元。毕设的话。。
我劝你还是自己解决吧,很简单的。。要是实在不想坐,就花钱请人做把。。分数的话,500分都没人帮忙的
汇编写程序我个人觉得太麻烦了,我是用C来编写的
不知道现在的学生还能干啥!
单片机能否处理一个模拟电压信号和一个数字电压信号相互比较,具体如何...
AD转换器种类很多;当然你也可以自己拿三极管、集成运放什么的接,精度嘛就不太好说了,也不是很有这个必要。另外,那个数字的电压值一定也是通过AD转换来的,只不过这功能集成在了某个芯片中。结论:必须转将模拟值转换成数字值,才能被单片机处理(貌似和楼上差不多额)。。
我用单片机跟ADC0809做个数字电压表0~5V显示,结果却是数码管显示的最...
result=temp*1.0\/255*500;\/\/这个式子有问题 这个式子里,当输入5V时,你得到的数就是255(当然运算完后会产生误差,其实根本不用运算,5V得到的就是FFH),所以显示2.5是正常的 你要是想与输入电压对应,只要再乘以2就可以了。
用单片机设计的数字电压表怎么将量程设置为-5v_+5v 跪求大神帮忙。_百 ...
先将电压缩小一倍,-2.5~2.5V。然后叠加2.5V直流将电压抬高到5V。然后。。。你懂的
基于AT89C51单片机的数字电压表设计和proteus仿真
A\/D转换芯片是用ADC0808吗?既然是仿真,就不用单片机产生ADC0808的时钟脉冲,可以用proteus的时钟信号。数码管一直在不停的闪烁,估计是你的仿真图有问题,下图是用你的程序运行的仿真图,数码管可以正常显示,不闪烁。对照一下你的仿真图。最后问一句,关于ADC转换后的计算,是要计算什么呢,显示出来的...
单片机数字电压表的ad精度取决于什么因素
以8位为例,转换的数字量范围为0~255,即256个值,如果测量范围是0~5V,那么测量精度是 5 \/ 256 = 0.01953125v 那么12位呢? 0~4095,4096个值。如果同样测量范围是0~5V,那么测量精度是 5 \/ 4096 = 0.001220703125v 显然精度提高了很多。另外,参考电压也是很重要的,也会影响实际测量值。
数字电压表设计 单片机 C语言
1、电路原理图:http:\/\/hi.baidu.com\/lyzhangxiang\/blog\/item\/9b2036fb40668e8f9e5146be.html {我博客中的相关文章http:\/\/hi.baidu.com\/lyzhangxiang\/blog\/item\/5ae935d2f8c753063bf3cf49.html} 2、利用单片机AT89S51与ADC0809设计一个数字电压表,能够测量0-5V之间的直流电压值,四位数码显示,...
基于AT89C52单片机的数字电压表中
通过你的描述很难判断,如果+ -、是给系统供电的,那么这是一个AC\/DC电源。如果+ 接AD转换了,那么这是个交流电压采集模块
基于AT89C51单片机的数字电压表的设计,不能使用AD转换芯片,AD转换电 ...
AT89C51单片机内部没有AD转换模块,可以通过IO口扩展AD转换芯片现在市面上很多这种芯片比如TLC2543、ads1204就是,如果电压表精度要求不高,用后出来的单片机内部就集成了AD转换芯片比如avr、PIC等。
引脚中的dvcc字母是什么意思
引脚中的dvcc字母是正数字电源电压的意思。单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I\/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供...
电子信息工程毕业论文题目
基于单片机的数字电压表的设计 组合式多幅面广告装置的主控制电路设计 基于MATLAB的光纤通信系统中的脉冲可视化研究 语音录放系统的FPGA设计与实现 基于FPGA的HDB3解码系统设计与实现 车牌识别中的图像提取及分割算法 基于MPEG-4的嵌入式多媒体监控系统中压缩\/解压卡的设计与实现 风\/光互补系统蓄电池保护装置...
平阀阿端: 你的要求确实比较高,不是一会半会就能写好的,更找不到现成的. 你先规划好硬件,再说编程,一步一步来,硬件电压测量可以用单片机内部AD,也可以用专用AD芯片(要有多通道输入),其次是显示器件,1602液晶要方便得多,可以直接和单片机连接,并且一次就可以显示4个通道的值,根本不用轮巡和切换.另外要有按键,独立按键的或矩阵按键均可,保存电压值,需EEPROM 如24C02或单片机内部EEPROM均可 报警蜂鸣器,可单片机直接驱动,也可加一个三极管放大. 软件上,也一步一步来,先会AD采集,再会LCD显示,会EEPROM操作,会按键处理,单项操作会了,再组合起来不难
婺源县18878991210: 单片机数字电压表的设计 - ?
平阀阿端: 您好,看到您的问题将要被新提的问题从问题列表中挤出,问题无人回答过期后会被扣分并且悬赏分也将被没收!所以我给你提几条建议:一,您可以选择在正确的分类下去提问或者到与您问题相关专业网站论坛里去看看,这样知道你问题答案...
婺源县18878991210: 单片机课程设计项目,设计简易数字电压表 - ?
平阀阿端: 交流电压频率很低的情况下,可以用纯软件方法实现峰值检测,单片机控制AD不停采集电压,并与前一个电压进行比较,找到电压峰值就可以计算有效值,当然,信号在送给AD前要对幅度进行调整
婺源县18878991210: 单片机 数字电压表设计 - ?
平阀阿端: (1),用放大镜放大即可.实际得到的值为0-5V.显示的时候你乘个合适的倍数即可放大.当然,步进也会放大的.精度减少了.(2).设定一个值.用if语句把得到的值和设定值进行判断即可.
婺源县18878991210: 毕设:基于单片机的数字电压表的设计 - ?
平阀阿端: 关于测量2路三相交流电源中的“2路”我的理解除了任意两条相线,还有一种可能是同时监测两条供电线路中的全部三相,换句话说,就是监测两路完整的三相供电系统中的电压,实际上一共是6路!!! 所以这两种实现的差别2路AD或6路AD...
婺源县18878991210: 利用单片机开发板上做一个电压表 - ?
平阀阿端: 硬件上: 外部电压直接接到0804的Ain上,0804的其余外围电路网上有现成的.然后0804的并行输出端接的51单片机的哪个并行口你要查电路板原理图.数据流通原理:单片机通过P0口先设置ADC0804的工作模式,之后ADC0804开始工作,...
婺源县18878991210: 单片机数字电压表(0~5V)的设计程序 - ?
平阀阿端: 程序:#include<reg51.h> #define uchar unsigned char #define uint unsigned int sbit START=P3^0; sbit OE=P3^1; sbit EOC=P3^2; bit Flag; uchar data led[4]; uint data tvdata; uchar code tv[]={0xfe,0xfd,0xfb,0xf7}; uchar code a[]={0x3f,0x06,0x5b,0x...
婺源县18878991210: 基于单片机的数字电压表设计 AT89C52CPU利用变阻器分压原理 将数值显示在4个数码管上,阻值变化时不显示, - ?
平阀阿端: AT89C52不能利用分压原理测量电压.测量电压除了分压之外,还需要AD转换器.与单片机接口的话,也可以采用电压/频率转换电路.对于单片机而言,电压/频率转换电路测量接口更简单,只需要单片机的一个IO口,最好是用计数器的捕获端口.
婺源县18878991210: 用单片机设计一个量程自动切换的数字电压表怎样用ADC0809和C ?
平阀阿端: 参考资料: 摘要电学参数测量技术涉及范围广,特别是微电压、微电流、高电压以及... 得到了广泛应用.本文介绍了一种基于AT89S52单片机的智能多用表. 该表能在单...
婺源县18878991210: 单片机数字电压表设计论文怎么做? - ?
平阀阿端: 硬件 总体电路设计1.数码管驱动电路2.单片机电源电路3.电压采样电路4.采样与隔离电路5.显示方案与量程自动分析 元件选择1.单片机选择2.数码管3.采样元件及滤波 软件1.单片机程序2.调试与仿真