电压表主程序模块

时间:2019-05-14 05:38:17下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《电压表主程序模块》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《电压表主程序模块》。

第一篇:电压表主程序模块

/**电压表主程序模块*/

#include

#define uchar unsigned char #define uint unsigned int void result(uchar);uchar value=0;#include“adc0809.h” #include“lcd1602.h” uchar str[5];uchar volt[7];

uchar a=0+0x30;uchar str1[11]=“tanxiaopin”;sbit CLK=P0^7;uint n;

void main(){

//uint i;ADC0809_init();lcd_init();while(1){

lcd_zifu(str1,0x01);

value=AD();//原值

str[0]=value/100+0x30;

str[1]=value%100/10+0x30;

str[2]=value%10+0x30;

result(value);

lcd_data(str,0x40);

lcd_data(volt,0x46);

} while(1);}

void result(uchar v)//转换成电压值 { float a;a=(v/255.0)*500.0;volt[0]=((int)a)/100+0x30;volt[1]='.';volt[2]=((int)a)%100/10+0x30;volt[3]=((int)a)%10+0x30;volt[4]=' ';volt[5]='V';} void t1(void)interrupt 3

{

CLK=~CLK;

}

/*ADC0809程序模块*/

#include #define uchar unsigned char #define uint unsigned int

sbit ST=P0^4;sbit EOC=P0^5;sbit OE=P0^6;//sbit CLK=P0^7;sbit ADDA=P0^0;sbit ADDB=P0^1;sbit ADDC=P0^2;

sbit ALE=P0^3;

uchar v;//保存IN0和经AD转换后的数据 /*非精确演示函数*/ void delay(ms){ uint i,j;

for(i=ms;i>0;i--)

for(j=125;j>0;j--);}

void ADC0809_init(){ TMOD=0x20;TH1=(255-250);TL1=(255-250);EA=1;//开总中断

ET1=1;//开定时器1中断

TR1=1;//启动定时器1

ST=0;

OE=0;ALE=0;} /*用中断做一个500K HZ的时钟信号*/

/******AD转换函数*******/ uchar AD(){ uchar temp=0;ST=0;//EOC=1;// ALE=1;ADDA=0;ADDB=0;ADDC=0;

delay(1);// ALE=0;

//OE=0;

ST=0;

ALE=1;

ST=1;

ALE=0;

ST=0;

delay(2);

while(EOC==0);

OE=1;

temp=P2;

delay(2);

OE=0;

return temp;}

/*ADC0809 模块封装头文件*/ void ADC0809_init();uchar AD();

/*LCD1602液晶显示模块*/ #include #include #define uchar unsigned char #define uint unsigned int sbit rs=P1^5;sbit rw=P1^6;sbit en=P1^7;void lcd_1602(uchar comm);void lcd_write(uchar dat);bit lcd_busy();extern void delay(uint);

void lcd_1602(uchar comm);void lcd_write(uchar dat);

bit lcd_busy();sbit busy=P3^7;extern void delay(uint);

/***************************** 1602液晶写命令函数 参数: 返回值:无

******************************/ void lcd_1602(uchar comm){ while(lcd_busy());//查忙

rs = 0;rw = 0;en = 0;

_nop_();P3 = comm;_nop_();en = 1;_nop_();_nop_();en = 0;} /***************************** 1602液晶写数据函数 参数: 返回值:无

******************************/ void lcd_write(uchar dat){ while(lcd_busy());//查忙

rs = 1;

rw = 0;

en = 0;

_nop_();

P3 = dat;

_nop_();

_nop_();

en = 1;

_nop_();

_nop_();

en = 0;}

/***************************** 1602液晶初始化函数 参数:无 返回值:无

******************************/ void lcd_init(){

delay(15);lcd_1602(0x38);delay(3);lcd_1602(0x38);

delay(3);lcd_1602(0x38);delay(3);lcd_1602(0x08);lcd_1602(0x01);delay(3);lcd_1602(0x06);lcd_1602(0x0c);} /***************************** 1602液晶读忙标志 参数:无 返回值:无

******************************/ bit lcd_busy(){

bit result;rs = 0;rw = 1;en = 1;delay(2);result = busy;en = 0;return result;}

/***************************** 1602液晶写字符 参数: 返回值:无

******************************/ void lcd_zifu(uchar *p,uchar wei){ uchar temp;lcd_1602(0x80+wei);/*temp= *p;while(temp!=''){

lcd_write(temp);

p++;

temp=*p;}*/ for(temp=*p;temp!='';p++,temp=*p)

lcd_write(temp);

delay(10);}

void lcd_data(uchar *p,uchar wei){ uchar temp;lcd_1602(0x80+wei);for(temp=*p;temp!='';p++,temp=*p)

lcd_write(temp);delay(10);} /*LCD1602液晶模块封装*/ void lcd_init();void lcd_zifu(uchar *p,uchar wei);void lcd_data(uchar *p,uchar wei);

第二篇:单片机主程序流程

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

单片机主程序流程

单片机教程 栏目导航

第一页..单片机入门教程

第二页..单片机c语言

第三页..红外遥控和步进电机

第四页..单片机问答

3.主程序流程图---51系列单片机设计实例教程

主程序流程图如图6.2所示。

图6.2 主程序流程图

本控制器在使用中,如要改变闪烁的方式,可按下相应的功能按键。当一个完整的闪烁循环结束后,即可转入新的闪烁方式。由于键扫描是在闪烁循环结束时进行,因此,功能开关按下的时间应较长才能被读入。改进的方法是把DL05S延时子程序用键扫描子程序来替代,这样,只要按下按键即可被键扫描程序读入。以下是LED小灯闪烁控制器的完整源程序:

;* * * * * * * * * * * *;;

小灯控制程序;

;* * * * * * * * * * * *;

;* * * * * * * * * * * *;;

中断入口程序

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

;* * * * * * * * * * * *;

ORG

OOOOH;程序执行开始地址

LJMP START;跳至START执行

ORG

OOO3H;外中断0中断入口地址

RETI;

中断返回(不开中断)

ORG

OOOBH;定时器TO中断入口地址

RETI;

中断返回(不开中断)

ORG

OO13H;外中断1中断入口地址

RETI;

中断返回(不开中断)

ORG 001BH;定时器T1中断入口地址

RETI;

中断返回(不开中断)

ORG 0023H;串行口中断入口地址

RETI;

中断返回(不开中断)

;* * * * * * * * * * * *;;

初始化程序;

;* * * * * * * * * * * *;

CLEAR: MOV

20H,#00H;20H单元内存清0(闪烁标志清0)

SETB

00H;

20H.0位置1(上电时,自动执行闪烁功能1)

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

RET;

子程序返回 ;

;* * * * * * * * * * * *;;

主程序

;* * * * * * * * * * * *;

START:

ACALL CLEAR;

调用初始化子程序

MAIN:

LCALL KEYWORK;

调用键扫描子程序

JB

OOH,FUNO;20H.0位为1时执行FUNO

JB

01H,FUN1;20H.1位为1时执行FUN1

JB

02H,FUN2;20H.2位为1时执行FUN2

JB

03H,MAIN;备用

AJMP

MAIN;

返回主程序MAIN ;

;* * * * * * * * * * * *;;

功能程序

;* * * * * * * * * * * *;

;第1种闪烁功能程序

FUNO:

MOV

A,OFEH;

累加器赋初值 FUNOO:

MOV

P1,A;

累加器值送至P1口

LCALL DL05S;

延时

JNB

ACC.7.MAIN;累加器最高位为0时转MAIN

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

RL

A;

累加器A中数据循环左移1位

AJMP

FUNOO;

转FUNOO循环 ;

;第2种闪烁功能程序

FUN1:

MOV

A,#OFEH;

累加器赋初值

FUN11:

MOV

P1,A;

累加器值送至P1口

LCALL DLO5S;

延时

CPL

A;

A中各位取反

MOV

P1,A;

累加器值送至P1口

LCALL DL05S;

延时

AJMP MAIN;

转MAIN ;* * * * * * * * * * * *;;

扫键程序

;* * * * * * * * * * * *;

KEYWORK:MOV

P3#OFFH;

置P3口为输入状态

JNB

P3.0,KEYO;读P3.0口,若为0转KEYO

JNB

P3.1,KEY1;读P3.1口,若为0转KEY1

JNB

P3.2,KEY2;读P3.2口,若为0转KEY2

JNB

P3.3,KEY3;读P3.3口,若为0转KEY3

RET;

子程序返回 ;

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

;闪烁功能0键处理程序

KEYO:

LCALL

DL10MS;

延时10ms消抖

JB

P3.0,OUTO;P3.0为1,子程序返回(干扰)

SETB

OOH;

20H.0位置1(执行闪烁功能1标志)

CLR

01H;

20H.1位清0

CLR

02H;

20H.2位清0 OUTO:

RET;

子程序返回 ;

;闪烁功能1键处理程序

KEY1:

LCALL

PL10MS

JB

P3.1,OUT1

SETB

01H;

20H.1位置1(执行闪烁功能2标志)

CLR

00H

CLR

02H

CLR

03H OUT2:

RET ;

;闪烁功能(备用)键处理程序

KEY3:

LCALL

DL10MS

JB

P3.2,OUT2

SETB

02H;

20H.2位置1(执行闪烁功能3标志)

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

CLR

01H

CLR

00H

CLR

03H OUT2:

RET ;

;闪烁功能(备用)键处理程序

KEY3:

LCALL

DL10MS

JB

P3.3,OUT3

SETB

03H;

20H.3位置1(执行闪烁功能3标志)

CLR

01H

CLR

02H

CLR

00H OUT3:

RET ;

;* * * * * * * * * * * *;;

延时程序

;* * * * * * * * * * * *;

;延时子程序,执行一次时间为513us DL512: MOV

R2,#OFFH LOOP1: DJNZ

R2,LOOP1

RET ;

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

;10ms延时子程序(调用20次0.5ms延时子程序)

DL10MS:MOV

R3,#14H LOOP2: LCALL DL512

DJNZ

R3,LOOP2

RET ;

;延时子程序,改变R4寄存器初值可改变闪烁的快慢(时间为25msX15)

DL05s: MOV

R4,#OFH LOOP3: LCALL DL25MS

DJNZ R4,LOOP3

RET ;

;延时子程序,改变R4寄存器初值可改变闪烁的快慢(时间为25msX15)

DL05S: MOV

R4,#OFH LOOP3: LCALL DL25MS

DJNZ R4,LOOP3

RET ;

;25ms延时子程序,调用扫键子程序延时,可快速读出功能按键值

DL25MS:MOV

R5,#OFFH LOOP4: LCALL KEYWORK

DJNZ R5,LOOP4

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

RET

END;

程序结束

12个经典单片机程序设计实例: 闪烁LED小灯主程序图 数码管时钟电路的主程序 单键学习型遥控器的设计 15路电器遥控器的设计 自行车里程/速度计的设计 自动往返行驶小汽车的设计 遥控小汽车的设计 数码管时钟电路的设计 8*8点阵LED字符显示器的设计 8路输入模拟信号数值显示电路的设计 8路输入模拟信号数值显示电路程序

单键学习型遥控器的程序如果对本文有疑问,请到论坛提问 编辑:51单片机学习网 @ 2009-10-20校对 中国开发板最佳品牌

版权:部分由编辑摘引,权利属原著作人

精心收集

精心编辑

精致阅读

如需请下载!

第三篇:物理教案-电压表

[物理教案-电压表]

教学目标知识目标

1、知道电压表的用途和表示符号;

2、掌握电压表的量程、刻度方法、连接方法及调“零”方法.能力目标

1、培养学生的观察能力;

2、会正确使用电压表并能正确地读出电压表的示数.情感目标

培养学生热爱仪器、认真细心、实事求是的科学态度.教学建议教材分析

本节主要内容为两部分:一是电压表的读数,二是电压表的使用.这些知识均需要通过观察和实验获得,因此必须利用实物或挂图进行教学,注意培养学生的观察能力和重视实践的良好习惯.教材介绍了四种外形不同的电压表,目的是让学生了解形状各不相同、测量范围各不相同,然后要向学生说明我们物理实验室用的电压表示要求熟练掌握的.在实际测量电压中,要选用电压表的量程.选用电压表量程时,首先要知道刻度盘上每个大格和每个小格所代表的电压值,对于有两个量程的电压表要分清它们对应的刻度线所表示的电压值.这一点是学生容易错的,要通过反复练习是学生掌握.电压表的使用是本节的重点,首先是根据实际需要量程正确地接入电路,其次是根据选用的量程正确记录测量数据.这部分内容教学,教师要先做好示范,然后让学生反复练习.教法建议

1.首先要从生活实际中提出问题,引起学生思考,在学生需求状态下引入课题.例如:你家中的用电器,如收音机、电子钟、电风扇等,它们的工作电压各不相同.你知道它们的电压是怎样得到的吗?用什么仪表?怎样测量? 2.接下来介绍教材图6-

5、6-7形状不同、量程不同的各式电压表.(可以根据自己学校实际情况酌情处理).3.着重介绍物理实验室现有的学生用的电压表的量程和读数.对于选用的电压表的量程,要知道刻度盘上每个大格和每个小格所表示的电压值.着重练习有两个量程的电压表读数.读数是一件认真细心做的事.要仿照教材上图6-6的电压表表头,做一个较大的刻度盘供学生练读.在学生已使用过电流表的基础上,可以介绍电压表调零知识.当指针在电路未接通时不指在零位置,需用螺丝到调节中间旋钮,直至调到指针指在零位置为止.若无法调到零位置时,读数要计入这个差值.4.电压表的使用,可以按课文顺序,对每一条使用电压表的规则,先画图说明,接着进行操作演示,并要求学生认真观察.准备演示实验时,要注意如下两方面:(1)增大观察对象的能见度和清晰度.如用大型电表,利用幻灯放大,布线分开适当距离等,利用活动指针练习读数.(2)提高仪器放置的位置,尽可能使每给学生都能看到.建议自制一些试教板,将部件安放在试教板上,竖直地挂起来,边讲边操作.最后将电压表的使用根电流表的使用进行对比,做出小结.它们的共同点是:①都要选择量程;②都要在弄清最小刻度值后再度数;③都要使电流从正接线柱流进,从负接线柱流出.它们的不同点是,:①电流表是串联在被测电路中,电压表要与被测电路并联;②电流表的两个接线柱不允许直接接到电源的两个极上,而电压表在被测量范围内,可以这样连接.使用多个量程的电压表测量电压时,如果不能预先估计被测电压的大小,应先用哪个量程试触,为什么要这样做?这是实际生活中常遇到的问题,组织学生讨论课深化使用电压表的知识.试触方法是学生应该学会的,教师要根据学生情况对电压表的试触做一次示范.告诉学生,试触时宜用单根导线从侧面试触,这样可在看到指针偏转超出最大刻度时立即移开导线.教学设计方案教学单元分析 本节教学重点是电压表的使用,电压表的使用包括电压表的读数和电压表的连接.在电压表连接时,首先要选择量程,其次是把电压表并联在被测电路中,让电流从正接线柱流入,从负接线柱流出.本节的难点是根据电压表不同的量程去读数.应当通过反复练习让学生掌握.教学过程分析 1.通过比较电流表和电压表,加深对电压表的印象,培养学生的观察能力.在前面学完电流表使用的基础上,学习电压表有类似之处.因此在教学时,首先提出测电压的必要,其次指出测电压的仪表叫电压表.在介绍了电压表之后,要把电压表与学过的电流表进行比较.可以让学生进行观察比较,方法是每两个学生位一组,课桌上摆放一块电流表和一块电压表,看一看表头的标记有什么区别?表盘的标度有什么区别?表盘的接线柱标记有什么区别? 2.介绍与量程对应的表头读数.在使用电压表测电压前,要先估计被测电压值,再确定量程.确定量程后,介绍读数方法.照上图做表头试教板,移动指针练习读数.3.教师示范连接电压表,侧小灯泡两端电压.在连接教材图6-8电路用电压表测灯泡两端电压过程中,向学生介绍电压表的使用规则(教材中的三条).4.教师可以组织学生练习连接电压表测小灯泡两端电压.在实验室每两个学生为一组进行练习.板书设计:探究活动【课题】电压表的种类、原理、构造.【组织形式】学生小组【活动方式】

制订分类课题:1种类2原理3构造 制订查阅和查找方式:

物理教案-电压表

第四篇:电压表教案

电压表

1)电压表的连接

通过大家的努力,我们对电池及电压已有所了解。如果老师现在有几节不同的电池,由于不小心将电池上标称的电压值磨掉了看不清楚,但必须知道其电压值是多少,大家可以帮助我吗? 我们可以利用电压表测量电池的电压,电路中电流的大小用电流表测量,电压的大小可以用电压表来测量。

1.a)b)c)认识电压表

该电压表的零刻度线在表盘的最左端。

该电压表有三个接线柱,两个量程。一个公共的“-”接线柱和两个“+”接线柱。使用“-”和“3”两个接线柱时,量程是3 V,刻度盘上每一大格表示“1 V”,每一小格表示“0.1 V”;使用“-”和“15”两个接线柱时,量程是15 V,刻度盘上每一大格表示“5 V”,每一小格表示“0.5 V”。电压表中间的旋钮可以调零。

电压表读数(二要、一不、二看清)

二要:电压表要并联在被测电路的两端,要使电流从电压表的“+”接线柱流入,从电压表的“-”接线柱流出。

一不:被测电压不能超过电压表的量程。

二看清:读数时一要看清电压表所用的量程;二要看清每一小格所表示的数值。d)2.a)

b)c)

小结

板书

注意:如果正、负接线柱接反了,指针会反向偏转,即向没有刻度的方向偏转。如果被测电压超过了电压表的量程,电压表的指针可能会超出刻度盘上的刻度线。

注意:如果正、负接线柱接反了,指针会反向偏转,即向没有刻度的方向偏转。如果被测电压超过了电压表的量程,电压表的指针可能会超出刻度盘上的刻度线。

习题:

1.在图所示的电路中,开关闭合后,会出现的情况是()

A.电流表鱼电压表都被烧坏 B.电流表与电压表都不会被烧坏 C.只有电压表会被烧坏

D.电流表、电源可能会被烧坏

2.如图9所示,设计电路图,要求亮灯串联,电压表测量两灯的总电压

第五篇:基于FPGA的电压表

FPGA控制的数字电压表电路设计

李培

(河南科技大学电子信息工程学院 河南洛阳 471003)

摘 要:介绍数字电压表的组成及工作原理,论述了基于VHDL语言和FPGA芯片的数字系统的设计思想和实现过程。

关键词:数字电压表;VHDL语言;FPGA

VHDL Realization of Digital Voltmeter

Abstract: The composition and working principle of digital voltm eter were introduced in this paper, the designing idea and implementation proces s based on VHDL and FPGA were also described.Key words: digital voltmeter;VHDL;FPGA 引言

在硬件电子电路设计领域中,电子设计自动化(EDA)工具已成为主要的设计手段,而VHDL语言则是EDA的关键技术之一,它采用自顶向下的设计方法,即从系统总体要求出发,自上至下地将设计任务分解为不同的功能模块,最后将各功能模块连接形成顶层模块,完成系统硬件的整体设计。本文用FPGA芯片和VHDL语言设计了一个数字电压表,举例说明了利用VHDL语言实现数字系统的过程。

1.系统组成及工作原理

整个数字电压表的硬件结构如图1所示。

系统的核心电路由FPGA完成,本设计选用了Altera公司的EPlKl00QC208-3芯片,用VHDL语言对它进行设计,实现三大功能模块:(1)控制模块,激活A/D转换器动作、接收A/D转换器传递过来的数字转换值;(2)数据处理模块,将接收到的转换值调整成对应的数字信号;(3)扫描、显示模块,产生数码管的片选信号,并将数值处理模块输出的BCD码译成相应的7段数码驱动值。

工作时,系统按一定的速率采集输入的模拟电压,经ADC0804转换为8位数字量,此8位数字量经FPGA处理得到模拟电压的数字码,再输入数码管获得被测电压的数字显示。

此电压表的测量范围:0~5V,三位数码管显示。

2.FPGA功能模块的设计

数字电压表的三大模块都是用VHDL语言编程实现的。2.1控制模块

用状态机作法,产生ADC0804的片选信号、读/写控制信号,通过状态信号INTR判断转换是否结束;转换结束后将转换数据锁存并输出。其状态转换图如图2所示。

State machine viewer

A/D模块如下:

2.2数据处理模块

ADC0804是8位模数转换器,它的输出状态共有28=256种,如果输入信号Vin为0~5V电压范围,则每两个状态值为5/(256-1),约为0.0196V,故测量分辨率为0.02V。常用测量方法是:当读取到DB7~DB0转换值是XXH时,电压测量值为U≈XXH×0.02V;考虑到直接使用乘法计算对应的电压值将耗用大量的FPGA内部组件,本设计用查表命令来得到正确的电压值。

在读取到ADC0804的转换数据后,先用查表指令算出高、低4位的两个电压值,并分别用12位BCD码表示;接着设计12位的BCD码加法,如果每4位相加结果超过9需进行加6调整。这样得到模拟电压的BCD码。

CBD模块如下:

本模块的功能仿真结果如图3所示;当转换数据为00010101,通过查表高4位0001是0.32V,而低4位0101是0.1V,最后的电压输出结果是0.32V+0.1V=0.42V,它的BCD码表示为000001000010,仿真结果正确。2.3扫描、显示模块

如图4所示,CLK是扫描时钟,其频率为1kHz,由给定的40MHz时钟分频得到;DATAIN是数据处理模块输出的电压值的BCD码;SEL是数码管的片选信号;POINT是数码管小数点驱动;通过扫描分别输出3位电压值的BCD码DATAOUT,并通过DISP将BCD码译成相应的7段数码驱动值,送数码管显示。

2.4 3选1 数据选择器模块

下图是3选1 数据选择器模块,由sel来选择数据输出,sel的三个状态分别对应选中三个数据A,B,C,同时将选中的数据输出。

2.5位选信号产生器(3进制计数器)

位选信号产生器,实际上时一个3进制计数器,随着时钟的上升沿的到来,它始终在0,1,2之间来回的循环,它的输出作为3选1 数据选择器模块和小数点产生器的输入。以下是仿真和模块。

位选信号产生器的模块:

2.6 7段译码

将输入的数据通过译码电路在数码管上显示出来 7段译码的模块:

2.7小数点产生器

当if selDP=“10” then DPout<='0';

elsif

selDP=“01” then DPout<='0';elsif

selDP=“00” then DPout<='1';只有当它等于1的时候,小数点才起作用,也就是说,只有当高四位有数值的时候,必须需要小数点来确定数值。下面仿真波形中,黑色的部分就是小数点显示的时候和部分,可以很清楚地看出,当输出等于3的时候,就是显示小数点。

小数点产生器模块:

3.顶层文件的模块如下图:

4.仿真结果

在Quartus II 8.0中,仿真波形如图所示:

5.心得体会

从这次的课程设计中,我受益匪浅。电压表的设计,用EDA仿真工具Quartus II 8.0,用vhdl语言设计,这些对于我们初学者来说,并不是件容易的事情,但是同时巩固了我们对知识的深刻理解。为以后的FPGA设计打下了坚实的基础。所以,总的来说,过程是困难的,不容易的,结果却是很满意的,获得了很宝贵的知识和经验!

6.结束语

本文设计的VHDL语言程序已在Quartus II 8.0工具软件上进行了编译、仿真和调试。经过实验验证,本设计是正确的,其电压显示值误差没有超过量化台阶上限(0.02V)。本文给出的设计思想也适用于其他基于PLD芯片的系统设计。

参考文献

[1]潘松 EDA技术实用教程[M]。北京:科学出版社,2003.[2]卢毅 VHDL与数字电路设计[M]。北京:科学出版社,2001.[3]林敏 VHDL数字系统设计与高层次综合[M]。北京:电子工业出版社,2001.[ 4 ] http://www.xiexiebang.com:process(c_state,eoc)begin

case c_state is

when st0=>ale<='0';sta<='0';oe<='0';lock<='0';

n_state<=st1;

when st1=>ale<='1';sta<='0';oe<='0';lock<='0';

n_state<=st2;

when st2=>ale<='0';sta<='1';oe<='0';lock<='0';

n_state<=st3;

when st3=>ale<='0';sta<='0';oe<='0';lock<='0';

if(eoc='1')then n_state<=st4;

else n_state<=st3;

――eoc为‘1’转换结束 进入下一状态

end if;

――否则 继续转换

when st4=>ale<='0';sta<='0';oe<='1';lock<='0';

n_state<=st5;

when st5=>ale<='0';sta<='0';oe<='0';lock<='1';

n_state<=st6;

when st6=>ale<='0';sta<='0';oe<='0';lock<='1';

n_state<=st0;

when others=>n_state<=st0;

end case;end process com;reg:process(st)

begin

if(st'event and st='1')then

c_state<=n_state;

end if;end process reg;lo:process(lock)

--锁存 begin

if(lock'event and lock='1')then

regl<=d;

end if;end process lo;

q<=regl;

end a;

BCD 8位转12 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY BCD IS PORT(V:IN STD_LOGIC_VECTOR(7 DOWNTO 0);

HB,LB:BUFFER STD_LOGIC_VECTOR(11 DOWNTO 0);

BVALUE:BUFFER STD_LOGIC_VECTOR(11 DOWNTO 0);

BCD_L,BCD_M,BCD_H:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END BCD;ARCHITECTURE A OF BCD IS BEGIN P1:PROCESS(V(7 DOWNTO 4))

BEGIN

--A/D输出高4位转换

分辨率0.32V

IF V(7 DOWNTO 4)=“1111” THEN HB<=“010010000000”;

--4.80V

ELSIF V(7 DOWNTO 4)= “1110” THEN HB<=“010001001000”;--4.48V

ELSIF V(7 DOWNTO 4)= “1101” THEN HB<=“010000010110”;--4.16V

ELSIF V(7 DOWNTO 4)= “1100” THEN HB<=“001110000100”;--3.84V

ELSIF V(7 DOWNTO 4)= “1011” THEN HB<=“001101010010”;--3.52V

ELSIF V(7 DOWNTO 4)= “1010” THEN HB<=“001100100000”;--3.20V

ELSIF V(7 DOWNTO 4)= “1001” THEN HB<=“001010001000”;--2.88V

ELSIF V(7 DOWNTO 4)= “1000” THEN HB<=“001001010110”;--2.56V

ELSIF V(7 DOWNTO 4)= “0111” THEN HB<=“001000100100”;--2.24V

ELSIF V(7 DOWNTO 4)= “0110” THEN HB<=“000110010010”;--1.92V

ELSIF V(7 DOWNTO 4)= “0101” THEN HB<=“000101100000”;--1.60V

ELSIF V(7 DOWNTO 4)= “0100” THEN HB<=“000100101000”;--1.28V

ELSIF V(7 DOWNTO 4)= “0011” THEN HB<=“000010010110”;--0.96V

ELSIF V(7 DOWNTO 4)= “0010” THEN HB<=“000001100100”;--0.64V

ELSIF V(7 DOWNTO 4)= “0001” THEN HB<=“000000110010”;--0.32V

ELSIF V(7 DOWNTO 4)= “0000” THEN HB<=“000000000000”;--0.00V

ELSE HB<=“000000000000”;

--0.00V

END IF;

END PROCESS P1;P2:PROCESS(V(3 DOWNTO 0))

BEGIN

--A/D输出低4位转换 分辨率0.02V

IF V(3 DOWNTO 0)= “1111” THEN LB<=“000000110000”;

--0.30V

ELSIF V(3 DOWNTO 0)= “1110” THEN LB<=“000000101000”;--0.28V

ELSIF V(3 DOWNTO 0)= “1101” THEN LB<=“000000100110”;--0.26V

ELSIF V(3 DOWNTO 0)= “1100” THEN LB<=“000000100100”;--0.24V

ELSIF V(3 DOWNTO 0)= “1011” THEN LB<=“000000100010”;--0.22V

ELSIF V(3 DOWNTO 0)= “1010” THEN LB<=“000000100000”;--0.20V

ELSIF V(3 DOWNTO 0)= “1001” THEN LB<=“000000011000”;--0.18V

ELSIF V(3 DOWNTO 0)= “1000” THEN LB<=“000000010110”;--0.16V

ELSIF V(3 DOWNTO 0)= “0111” THEN LB<=“000000010100”;--0.14V

ELSIF V(3 DOWNTO 0)= “0110” THEN LB<=“000000010010”;--0.12V

ELSIF V(3 DOWNTO 0)= “0101” THEN LB<=“000000010000”;--0.10V

ELSIF V(3 DOWNTO 0)= “0100” THEN LB<=“000000001000”;--0.08V

ELSIF V(3 DOWNTO 0)= “0011” THEN LB<=“000000000110”;--0.06V

ELSIF V(3 DOWNTO 0)= “0010” THEN LB<=“000000000100”;--0.04V

ELSIF V(3 DOWNTO 0)= “0001” THEN LB<=“000000000010”;--0.02V

ELSIF V(3 DOWNTO 0)= “0000” THEN LB<=“000000000000”;--0.00V

ELSE LB<=“000000000000”;

--0V

END IF;END PROCESS P2;

BVALUE<=HB+LB;P3:PROCESS(BVALUE)VARIABLE JJ:STD_LOGIC_VECTOR(11 DOWNTO 0);

BEGIN

JJ:=BVALUE;

IF(JJ(3 DOWNTO 0)>“1001”)THEN

――如果12位结果中,低4位

JJ:=JJ+“000000000110”;

――大于9 则低4位加6

END IF;

IF(JJ(7 DOWNTO 4)>“1001”)THEN

――如果中间的4位大于9

JJ:=JJ+“000001100000”;

――则中4位加6

END IF;BCD_L<=JJ(3 DOWNTO 0);

BCD_M<=JJ(7 DOWNTO 4);BCD_H<=JJ(11 DOWNTO 8);END PROCESS P3;END A;

3选1 数据选择器

LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity mux3_1 is port(sel:in std_logic_vector(1 downto 0);A,B,C:in std_logic_vector(3 downto 0);Mselout:out std_logic_vector(3 downto 0));end mux3_1;architecture a of mux3_1 is begin

process(sel)begin

if

sel=“10” then Mselout<=A;

elsif

sel=“01” then Mselout<=B;

elsif

sel=“00” then Mselout<=C;

else null;

end if;end process;end a;

位选信号产生器(3进制计数器)

library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity c3 is

port(clk,clr:in std_logic;

qout:buffer std_logic_vector(1 downto 0));end c3;architecture behave of c3 is begin

process(clk,clr)begin if(clr='0')then qout<=“00”;elsif(clk'event and clk='1')then

qout<=qout+1;

if(qout=2)then qout<=“00”;

end if;end if;end process;end behave;

7段译码

LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_unsigned.all;ENTITY del7 IS PORT(input : IN STD_LOGIC_vector(3 downto 0);

output : OUT

STD_LOGIC_vector(6 downto 0));END del7;ARCHITECTURE a OF del7 IS

BEGIN PROCESS(input)BEGIN

CASE input IS

WHEN “0000” =>output<=“1111110”;

WHEN “0001” =>output<=“0110000”;

WHEN “0010” =>output<=“1101101”;

WHEN “0011” =>output<=“1111001”;

WHEN “0100” =>output<=“0110011”;

WHEN “0101” =>output<=“1011011”;

WHEN “0110” =>output<=“1011111”;

WHEN “0111” =>output<=“1110000”;

WHEN “1000” =>output<=“1111111”;

WHEN “1001” =>output<=“1111011”;

WHEN OTHERS=>NULL;

END CASE;end process;

END a;

小数点产生器

LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity DP is port(SELDP:in std_logic_vector(1 downto 0);

DPout:out std_logic);end DP;architecture a of DP is begin

process(selDP)begin

if

selDP=“10” then DPout<='0';

elsif

selDP=“01” then DPout<='0';

elsif

selDP=“00” then DPout<='1';――在高4位整数输出时,输出

else null;

――小数点DP

end if;end process;end a;

顶层文件

library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity V_WATCH is

port(clkK,EOCC:in std_logic;

DD:IN std_logic_vector(7 downto 0);

clk3,CLR3:IN STD_LOGIC;

OEE,START,ALEE,ADDAA:OUT STD_LOGIC;

DPOUT:OUT STD_LOGIC;

Qoutput:out std_logic_vector(6 downto 0);

Qselout:out std_logic_vector(1 downto 0));end V_WATCH;architecture a of V_WATCH is

――元件例化 COMPONENT DP port(SELDP:in std_logic_vector(1 downto 0);

DPout:out std_logic);END COMPONENT;COMPONENT del7 PORT(input : IN STD_LOGIC_vector(3 downto 0);

output

: OUT STD_LOGIC_vector(6 downto 0));END COMPONENT;COMPONENT mux3_1 port(sel:in std_logic_vector(1 downto 0);A,B,C:in std_logic_vector(3 downto 0);Mselout:out std_logic_vector(3 downto 0));END COMPONENT;COMPONENT ad port(st,eoc:in std_logic;

d:in std_logic_vector(7 downto 0);

oe,sta,ale,adda:out std_logic;

q:out std_logic_vector(7 downto 0));END COMPONENT;COMPONENT C3 PORT(clk,clr: IN STD_LOGIC;

qout: OUT std_logic_vector(1 downto 0));END COMPONENT;COMPONENT BCD PORT(V:IN STD_LOGIC_VECTOR(7 DOWNTO 0);

HB,LB:BUFFER STD_LOGIC_VECTOR(11 DOWNTO 0);

BVALUE:BUFFER STD_LOGIC_VECTOR(11 DOWNTO 0);

BCD_L,BCD_M,BCD_H:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END COMPONENT;signal a:

std_logic_vector(1 downto 0);SIGNAL SBCD_L,SBCD_M,SBCD_H: STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL b:

STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL q:

STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL BBCD:

STD_LOGIC_VECTOR(11 DOWNTO 0);

BEGIN U1:AD

PORT MAP(CLKK,EOCC,DD,OEE,START,ALEE,ADDAA, q);U2:BCD

PORT MAP(q,BCD_L=>SBCD_L,BCD_M=>SBCD_M,BCD_H=>SBCD_H);U3:C3

PORT MAP(CLK3,CLR3,a);

U4:MUX3_1 PORT MAP(SELOUT,SBCD_L,SBCD_M,SBCD_H,DI);U5:DEL7

PORT MAP(b, Qoutput);U6:DP

PORT MAP(a,DPOUT);QSELOUT<=a;end a;

下载电压表主程序模块word格式文档
下载电压表主程序模块.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    电压、电压表教案

    电压 电压表 教学目的 1.知道电压的作用。知道电源是提供电压的装置。 2.知道电压的单位。能对电压的不同单位进行变换。 3.记住干电池、家庭电路的电压值。 教具 U形管连通器......

    电压表教案示例之一[五篇材料]

    [电压表教案示例之一] 电压表教案示例之一(北京市第八中学 章浩武) (一)教材 人教社九年义务教育初中物理第二册 (二)教学目的 1.知道电压表是测量电路两端电压的仪表和电......

    火车订票管理系统主程序流程

    程序简介 此程序是采用多文件模块化形式编写;其中自定义头文件中包括了程序中所有调用的函数的声明,以及需要的所有系统头文件。 #include #include #include #include #i......

    单片机数字电压表实习报告

    电气信息工程学院 单片机实习报告 课题名称:数字电压表专业: 姓名: 班级学号: 指导教师:刘海波成绩:二○一一年七月一日 目录 一、题目及设计要求 ...............................

    初中物理电压表教案[五篇材料]

    导语:物理需要大家对物理的熟悉,才能让学生学好物理,以下是小编为大家精心整理的初中物理电压表教案,欢迎大家参考!教学目标知识目标1、知道电压表的用途和表示符号;2、掌握电压......

    电压和电压表的使用教案

    电压和电压表的使用 学习目标与考点分析 1、通过与水压的类比了解电压的概念,知道电源提供了电压。 2、通过观察、实验掌握电压表的正确使用规则,学会正确使用电压表,能正确读......

    直流数字电压表试行检定规程

    直流数字电压表试行检定规程 Verification Regulation of CD Digital Voltmeter 本检定规程经国家计量局于1983年4月19日批准,并自1984年3月1日起施行。 归口单位:中国计量科......

    用电压表电流表测电阻.doc教案

    课题:用电流表、电压表测电阻 教案设计:上海市复旦实验中学 翁卫星 所用教材:《物理》(上海教育出版社)九年级第一学期 第七章 电路 教学设计说明: 制定计划与设计实验是科学探究......