《单片机系统设计》实验报告(DOC)

合集下载

东大单片机实验报告三

东大单片机实验报告三

东南大学生物科学与医学工程学院单片机系统设计与应用实验报告第三次实验实验名称:数据传送实验专业:生物医学工程姓名:学号:同组人员:学号:实验室: 医用电子技术实验中心(综合楼716)实验时间:评定成绩:审阅教师:目录一、实验题目 (3)二、实验目的 (3)三、实验器材 (3)四、实验内容 (3)1.实验方案 (3)1.1方案流程图 (3)1.2源程序 (5)2.实验结果及分析 (12)2.1方案一结果 (12)2.2方案二结果 (12)2.3课上更改程序结果 (13)3. 程序调试 (14)五、心得体会 (14)六、参考文献 (14)一、实验题目1.将指定内存中的数按正负数分别存放于内存和外部RAM中,并对负数进行求补后再放入内存指定单元。

二、实验目的1.进一步掌握程序的编辑、汇编及调试方法;2.掌握单片机内部RAM和外部RAM的数据操作;3.了解单片机系统地址分配概念。

三、实验器材1、G6W仿真器一台2、MCS—51实验板一台3、PC机一台4、电源一台四、实验内容1.以数据表格形式在ROM中建立一个含有正数和负数的表格,数据长度为16个字节,要求放置八个正数、八个负数,正、负数应离散随机放置,不允许三个以上同类型数据连续放置,数据的具体内容自行确定;2.编制程序,将数据表格中的数据读出并按正、负数归类,正数送入首地址为40H的内部RAM中;负数送入首地址为0B000H的外部RAM中;3.将首地址为0B000H的外部RAM中的数据取出并求其绝对值,然后送入内部RAM 的48H~4FH单元。

1.实验方案1.1方案流程图1.2源程序本次试验,我先后写了两个程序,基本原理相似。

⑴先初始化,将各地址存入寄存器中,便于操作。

⑵查表取数,判断数的正负,将正负数分别存放在指定地址。

注意地址指针的入栈保护。

⑶判断数是否取完,取完后对存放在外RAM中的负数取出求补放入指定内存。

方案一ORG 0000HAJMP MAINORG 0030HMAIN:MOV SP,#70H ;设置堆栈指针MOV A,#10H ;保存个数MOV DPTR,#0E00H ;表地址MOV R0,#0B0H ;负数存放地址MOV 12H,#00HMOV R1,#40H ;正数存放地址START:PUSH A ;入栈保护PUSH DPHPUSH DPLMOV A,#00H ;寄存器A初始化MOVC A,@A+DPTR ;取表中数至寄存器A判断正负MOV 11H,A ;11H暂存数RLC A ;取标志位JC FUZHENG:MOV A,11HMOV @R1,A ;送至正数地址单元INC R1 ;正数地址加1POP DPLPOP DPHPOP AINC DPL ;指向表中下一个数DEC A ;个数减一JNZ START ;不为0继续操作JMP DO1 ;否则到DO1FU:MOV A,11HMOV DPH,R0 ;DPTR改为指向负数地址MOV DPL,12HMOVX @DPTR,A ;负数送外RAM中的负数地址中INC 12H ;指向下一个地址POP DPLPOP DPHPOP AINC DPL ;指向下一个地址DEC A ;个数减一JNZ STARTDO1:MOV A,#08H ;负数个数MOV DPTR,#0B000H ;指向负数所在首地址DO:PUSH AMOVX A,@DPTR ;取负数CPL A ;取反加1INC AMOV @R1,A ;送入48H地址INC R1INC DPTRPOP ADEC A ;个数减一JNZ DO ;没做完则重复SJMP $ORG 0E00H ;表TABLE:DB 17H,10H,81H,25HDB 0B2H,0A4H,30H,08HDB 0D6H,54H,01H,8FHDB 0C0H,27H,0CDH,0B1H方案二ORG 0000HAJMP MAINORG 0030HMAIN:MOV R0,#0F0H ;R0存放表的高位地址MOV R2,#00H ; R2存放表的低位地址MOV R1,#40H ; R1存放正数地址MOV R3,#10H ;R3存放数的个数MOV DPTR,#0B000H;外部RAM地址PUSH DPHPUSH DPLSTART:MOV DPH,R0 ;取表地址MOV DPL,R2CLR AMOVC A,@A+DPTR ;取数MOV R4,A ;数暂存于R4RLC A ;循环左移得标志位JC FU ;判断正负,若为负数则到FU ZHENG:MOV A,R4MOV @R1,A ;正数放入正数地址单元INC R1 ;地址加一INC R2DJNZ R3,START ;数没有取完则转STARTJMP END1 ;否则转END1FU:MOV A,R4POP DPLPOP DPHMOVX @DPTR,A ;取数INC DPTR ;地址加一PUSH DPHPUSH DPLINC R2DJNZ R3,START ;判断是否取完END1:MOV DPTR,#0B000H ;指向外部RAMMOV R5,#08H ;负数个数DO:MOVX A,@DPTR ;取数CPL A ;求补INC AMOV @R1,AINC R1INC DPTRDJNZ R5,DOORG 0F000H ;表DB 18H, 30H, 0A0H, 50HDB 87H, 0B2H, 1CH, 0D6HDB 28H, 8FH, 0C3H, 10HDB 1CH, 0CDH, 68H, 0D6H课上根据老师的要求,改变了外RAM地址,正数地址以及负数地址,程序如下。

《单片机系统设计技术》实验指导

《单片机系统设计技术》实验指导

《单片机系统设计技术》实验指导书适用专业: 电气、自动化、信息等编写单位: 电气信息学院编写人: 曹 林审核人:审批人:批准时间:年月日目 录实验1 IO控制LED流水灯实验 (3)实验2 IO控制数码管动态扫描实验 (5)实验3 外部中断实验 (8)实验4 定时器应用控制实验 (10)实验5 UART实验 (12)实验6 键盘扫描输入编程 (14)实验7 UART与PC对话实验 (17)实验8 ADC数据采集实验 (19)实验1 IO控制LED流水灯实验1.实验目的1)、熟悉KEIL编程环境和调试环境。

2)、掌握单片机汇编语言和指令的用法。

3)、理解简单的IO控制程序,延迟子程序,并对其修改,使其功能改变。

2.实验设备硬件: PC 机,单片机教学实验开发平台;软件: KEIL集成开发环境、STC ISP程序下载软件。

3.实验内容使用P0口控制8个LED 进行流水灯显示。

4.实验预习要求和实验准备要求预习教科书关于单片机硬件架构内容、IO口的内容,特殊寄存器内容。

预习汇编程序编写、MCS-51指令表。

带上教科书、U盘、具备二进制和十六进制转换的科学计算器。

5.实验原理和步骤1)实验原理(1)实验原理图图1 P0口连接的8盏LED灯从图1中可以看出:如果需要把LED点亮有两个条件,其一是需要用短接帽把J1的2脚和3脚短接,在PCB上就是将电路板左上角LED和VCC短接起来;其二是P0.X口给出低电平,让电流从VCC开始流经限流电阻、LED后进入单片机的P0.X口,最后到单片机内部的地线上。

因此,简单地说就是在短接帽接好的前提下,向P0.X口写0则LED将点亮,写1则LED将熄灭。

图中网络标识PORT0_0、PORT0_1……PORT0_7和单片机P0.0、P0.1……P0.7连接,可观察原理图上单片机P0口的网络标识也是PORT0_0、PORT0_1……PORT0_7。

2)实验步骤(1)启动KEIL集成开发环境,按照《KEIL使用方法》中描述步骤进行工程建立、汇编源程序文件添加。

单片机实验报告

单片机实验报告

单片机实验报告一、实验目的本次单片机实验的主要目的是通过实际操作和编程,深入了解单片机的工作原理和应用,掌握单片机系统的设计、开发和调试方法,提高自身的动手能力和解决问题的能力。

二、实验设备1、单片机开发板2、计算机3、编程软件(如 Keil)4、下载器5、示波器6、万用表三、实验内容1、点亮 LED 灯通过编写简单的程序,控制单片机的引脚输出高低电平,从而点亮或熄灭连接在该引脚上的 LED 灯。

这是单片机最基础的操作之一,旨在熟悉单片机的编程环境和引脚控制方式。

2、数码管显示利用单片机驱动数码管,实现数字的显示。

需要了解数码管的工作原理和驱动方式,通过编程控制数码管的段选和位选信号,显示不同的数字。

3、按键输入设计按键电路,通过读取按键的状态,实现对单片机系统的输入控制。

例如,通过按键切换不同的显示模式或控制其他外部设备。

4、定时器/计数器应用使用单片机的定时器/计数器功能,实现定时、计数等操作。

例如,设计一个定时闪烁的 LED 灯,或者通过计数器统计外部脉冲的个数。

5、串口通信实现单片机与计算机之间的串口通信,将单片机采集到的数据发送到计算机上进行显示和处理,或者接收计算机发送的指令对单片机系统进行控制。

四、实验原理1、单片机的基本结构单片机通常由中央处理器(CPU)、存储器(包括程序存储器和数据存储器)、输入输出接口(I/O 口)、定时器/计数器、中断系统等部分组成。

2、编程语言本次实验采用 C 语言进行编程。

C 语言具有简洁、高效、可移植性强等优点,非常适合单片机的开发。

3、引脚功能单片机的引脚分为电源引脚、时钟引脚、复位引脚、I/O 引脚等。

通过对这些引脚的合理配置和控制,可以实现各种功能。

4、数码管驱动原理数码管分为共阴极和共阳极两种类型。

通过控制数码管的段选和位选信号,可以使数码管显示不同的数字和字符。

5、按键检测原理按键通常采用上拉电阻或下拉电阻的方式连接到单片机的I/O 引脚。

单片机实验报告

单片机实验报告

单片机实验报告班级:09050541学号:0905054116姓名:王昆鹏实验1 P1口实验一、实验目的:1.学习P1口的使用方法。

2.学习延时子程序的编写和使用。

二、实验设备:CPU挂箱、8051CPU模块三、实验内容:1.P1口做输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。

四、实验原理:P1口为准双向口,P1口的每一位都能独立地定义为输入位或输出位。

作为输入位时,必须向锁存器相应位写入“1”,该位才能作为输入。

软件延时,如果用c编程时,通过使用keil的软件模拟,调试观察子函数(delay)延时时间。

(具体延时可以自行设定)使用汇编语言的软件延时,可以计算其指令的周期数,大概估算其软件延时。

五、实验原理图:P1口输出、输入实验六、实验步骤:执行程序:P1.0~P1.7接发光二极管L1~L8。

七、程序框图:循环点亮发光二极管(具体延时可以自行设定)八、程序代码NAME T1_1ORG 0000HLJMP STARTORG 0030HSTART: MOV A,#0FEH //将1111 1110赋给A LOOP: RL A //A循环左移MOV P1,A //把A赋给端口P1LCALL DELAY //延时0.16sJMP LOOP //循环;延时函数DELAY: MOV R1,#200DEL1: MOV R2,#200DEL2: DJNZ R2,DEL2DJNZ R1,DEL1RETEND实验2 中断口实验一、实验目的:1.学习外部中断技术的基本使用方法。

2.学习中断处理程序的编程方法。

二、实验设备:CPU挂箱、8051CPU模块三、实验内容:通过设定两个中断使能和触发方式,并编写相应的中断服务子函数,改变led灯的变化情况。

当按下KEYBOARD的按键时8个led都灭,当把k1向上拉再复位后,4个led亮,4个灭。

四、实验原理:参考《单片机原理及接口技术》第三版,北京航空航天大学出版社。

单片机实验报告范文

单片机实验报告范文

单片机实验报告范文一、实验目的本实验的目的是通过学习单片机的基本原理和使用方法,掌握单片机在各个实际应用中的基本技能。

二、实验器材及原理1.实验器材:STC89C52单片机、电源、晶振、按键、LED灯、蜂鸣器等。

2.实验原理:单片机是一种微处理器,能够完成各种复杂的功能。

通过学习单片机的工作原理和编程方法,可以控制各种外围设备,实现不同的功能。

三、实验内容及步骤1.实验一:点亮LED灯步骤:(1)连接电源和晶振,将STC89C52单片机连接到电路板上。

(2)编写程序,点亮LED灯。

2.实验二:按键控制LED灯步骤:(1)连接电源和晶振,将STC89C52单片机连接到电路板上。

(2)将按键和LED灯与单片机相连。

(3)编写程序,实现按下按键控制LED灯亮灭。

3.实验三:数码管显示步骤:(1)连接电源和晶振,将STC89C52单片机连接到电路板上。

(2)将数码管与单片机相连。

(3)编写程序,将数字输出到数码管上显示。

4.实验四:定时器应用步骤:(1)连接电源和晶振,将STC89C52单片机连接到电路板上。

(2)编写程序,实现定时器功能。

四、实验结果及分析1.实验一:点亮LED灯LED灯成功点亮,证明单片机与外部设备的连接正常。

2.实验二:按键控制LED灯按下按键后,LED灯亮起,松开按键后,LED灯熄灭。

按键控制LED 灯的效果良好,说明单片机的输入输出功能正常。

3.实验三:数码管显示数码管成功显示数字,说明单片机能够实现数字输出功能。

通过程序设计,可以实现数码管显示不同的数字。

4.实验四:定时器应用定时器正常运行,能够实现精确的定时功能。

通过调节定时器的参数,可以实现不同的定时功能。

五、实验总结通过本次实验,我们学习了单片机的基本原理和使用方法。

通过掌握单片机的编程技巧,我们能够实现各种复杂的功能,如控制LED灯、按键控制、数码管显示等。

这些技能对于日常生活和工程设计都具有很大的实用性。

在实验过程中,我们遇到了各种问题,如电路连接错误、程序编写错误等。

单片机课程设计实验报告

单片机课程设计实验报告

课程设计报告学号: 1328403028姓名:张帅华班级: 13电子信息工程指导老师:邓晶苏州大学电子信息学院2016年4月摘要随着时代的进步和发展,单片机技术已经成为一种比较成熟的技术,普及到我们生活、工作、科研等各个领域。

本次课程设计包含四个基于STC89C52单片机的设计,分别是:基于单总线数字式温度传感器DS18b20的数字温度计的设计;基于2K位串行CMOS 的EEPROM AT24C02的数字密码锁的设计;基于SPI 接口实时时钟芯片DS1302的电子日历的设计以及基于无线收发芯片nrf24L01的简单无线通讯系统的设计。

关键词:单片机 DS18B20 AT24C02 DS1302 NRF24L01目录摘要 (1)目录 (2)第1章基于DS18B20的数字温度计设计 (3)1.1 设计要求 (3)1.2 系统组成 (3)1.3 系统设计 (3)1.3.1 硬件设计 (3)1.3.2软件设计 (4)1.4 设计结果 (6)第2章基于AT24C02的电子密码锁设计 (7)2.1 设计要求 (7)2.2 系统组成 (7)2.3 系统设计 (8)2.3.1 硬件设计 (8)2.3.2 软件设计 (9)2.4 设计结果 (9)第3章基于DS1302的电子日历的设计 (11)3.1 系统功能 (11)3.2 系统组成 (11)3.3 系统设计 (11)3.3.1 硬件设计 (11)3.3.2 软件设计 (13)3.4 设计结果 (14)第4章基于NRF24L01的无线通信系统的设计 (15)4.1 系统功能 (15)4.2 系统组成 (15)4.3 系统设计 (15)4.3.1 硬件设计 (15)4.3.2 软件设计 (16)4.4 设计结果 (16)总结 (17)第1章基于DS18b20的数字温度计设计1.1 设计要求(1)采用DS18b20与单片机STC89C52相结合设计数字温度计,实现液晶屏实时显示当前温度;(2)读取并显示DS18B20的序列码。

单片机实验报告

单片机实验报告

1、二进制,十进制,十六进制的转换。

2、原码,反码,补码的表示。

3、触发器,触发器是计算机记忆装置的基本单元。

触发器有:R-S触发器,D触发器,J-K触发器4、寄存器,寄存器是由触发器组成的,一个触发器就是一个1位寄存器,多个触发器就可以组成一个多位寄存器。

常见的寄存器有:缓冲寄存器,移位寄存器,计数器等。

5、触发器,寄存器,及存储器之间有什么关系?存储器是由大量缓冲寄存器组成的,其中的每一个寄存器称为一个存储单元。

6、80C51系列单片机的存储器结构与一般通用计算机不同。

一般通用计算机通常只有一个逻辑空间,即程序存储器和数据存储器是同一编制的。

访问存储器时,同一地址对应唯一的存储空间,可以是ROM,也可以是RAM,并用同类访问指令,这种存储器结构称为“冯诺依曼结构”;80C51系列单片机的程序存储器和数据存储器在物理结构上是分开的,这种结构称为“哈佛结构”。

80C51系列单片机的存储器在物理结构上可以分为如下4个存储空间:片内程序存储器,片外程序存储器,片内数据存储器和片外数据存储器。

7、程序储存器的入口地址,7个0000H:程序入口地址0003H:外部中断0入口地址000BH:定时器0溢出中断入口地址0013H:外部中断1入口地址001BH:定时器1溢出中断入口地址0023H:串行口中断入口地址002BH:定时器2溢出中断入口地址8、程序状态字寄存器psw 的各标志位作用位0 P——奇偶标志位位3、4 RS0、RS1——工作寄存器组选择位RS0、RS1对工作寄存器组的选择:RS1 RS0 寄存器组片内RAM地址0 0 第0组00H~07H0 1 第1组08H~0FH1 0 第2组10H~17H 1 1 第3组18H~1FH 9、双数据指针寄存器DPTR0/1。

为了便于对16位地址的片内、片外存储器和外部扩展的I/O器件进行访问,在AT89S51/S52中设置了2个16位的数据指针寄存器:DPTR0和DPTR1。

8051单片机最小系统设计与制作

8051单片机最小系统设计与制作

常熟理工学院单片机实验报告实验名称:8051单片机最小系统设计与制作班级:电科121小组:第7组姓名:050212127 张勇050212129 周飞翔050212123 姚尧050212131 朱陶实验时间:2014.10.10一.实验目的1、掌握采用Keil uVision集成开发环境下单片机程序的编辑、编译、连接方法;2、掌握程序的下载(烧写);3、熟悉器件,掌握单片机最小系统的设计与制作二.实验仪器面包板 1单片机编程器 1示波器 1开关 3电源 1万用表 1晶振 1二极管8三.实验内容进行两个按键控制8个发光二极管的跑马灯控制相关硬件与软件设计,并完成制作与调试。

四.实验步骤:1.硬件部分图1如图1:主要包括复位开关,晶振,开关按钮,二极管4个部分2.软件部分在Keil 环境下编写程序,生成.hex文件,并通过Proteus进行功能仿真,测试电路是否可以满足实验要求。

程序代码如下:#include"reg51.h"#define DELAY_1S 25000void delay(unsigned int n){unsigned int i;for(i=0;i<n;i++);}void main(){ unsigned char d[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};char i;while(1){if((P1&0x01)==0) //S1按下循环左移{ i=0;while((P1&0x02)!=0) //当S0按下时停止左循环{P2=~d[i];delay(DELAY_1S);i++;if(i==8)i=0;}}else if((P1&0x02)==0) //S0按下循环右移{ i=7;while((P1&0x01)!=0) //当S1按下停止右循环{P2=~d[i];delay(DELAY_1S);i--;if(i==-1)i=7;}}}}3.调试采用编程器进行程序烧写,并将烧写好的芯片放到设计系统中进行实物验证本组成员所连面包板实物图,如图2图2按下S1,二极管从左依次点亮,按下S0,二极管向右依次点亮。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

短学期实验报告(单片机系统设计)题目:专业:指导教师:学生姓名:学号:完成时间:成绩:基于单片机的交流电压表设计目录1系统的设计要求 (2)2系统的硬件要求 (2)2.1真有效值转换电路的分析 (2)2.2放大电路的设计 (3)2.3A/D转换电路的设计 (3)2.4单片机电路的分析 (4)2.5显示电路 (4)3 软件设计 (5)3.1 软件的总流程图 (5)3.2 初始化定义与定时器初始化流程图 (5)3.3 A/D转换流程图 (6)3.4 数据处理流程图 (6)3.5 数据显示流程图 (7)4 调试 (7)4.1 调试准备 (7)4.2 关键点调试 (7)4.3 测试结果 (8)4.4 误差分析 (8)5结束语 (8)5.1 总结 (9)5.2 展望 (9)附录1 总原理图 (10)附录2 程序 (10)附录3 实物图 (14)基于单片机的交流电压表设计****学院 ****专业 姓名指导老师:*******1 设计要求(1)运用单片机实现真有效值的检测和显示。

(2)数据采集使用中断方式,显示内容为有效值与峰值交替进行。

2 硬件设计本系统是完成一个真有效值的测量和显示,利用AD737将交流电转换成交流电压的有效值,用ADC0804实现模数转换,再通过单片机用数码管来显示。

系统原理框图如图2-1所示。

系统框图由真有效值转换电路、放大电路、A/D 转换电路、单片机电路、数码管显示电路五部分。

图2-1 原理框图2.1 真有效值转换电路真有效值转换电路主要是利用AD737芯片来实现真有效值直流变换的,即将输入的交流信号转换成直流信号的有效值,其原理图如图2-2所示。

图2-2 真有效值转换电路由于AD737最大输入电压为200mV, 所以需要接两个二极管来限制输入电压,起到限幅的作用。

如图中D1、D2,由IN4148构成,电容C6是耦合电容,电阻R1是限流电阻。

2.2 放大电路设计放大电路主要是利用运放uA741来进行放大,电路原理图如图2-3所示。

A/D 转换单片机 电路显示 电路转换 电路交流 信号放大 电路图2-3 放大电路原理图由于AD737可接受的信号有效值为0~200mV。

而ADC0804、单片机的电源电压都需要0~5V,因此需要一个放大电路,将AD737输出的200mV的电压提升至5V,所以放大电路的放大倍数最低需要25倍。

该放大电路采用集成芯片u A741,连接成一个同相比例运放,输入电阻采用3.3K,反馈电阻用100K的滑动变阻器,当滑动变阻器处于最大值时,放大倍数处于最大,为A Vf=(1+R3/R2)≈31.3。

放大倍数可以根据滑动变阻器的滑动而改变。

2.3 A/D转换电路A/D转换电路采用ADC0804实现,其原理图如图2-4所示。

图2-4 A/D转换电路原理图此电路考虑到做单片机系统时,需数据采集,而数据采集能通过I/O口扩展接口电路得到,但51单片机大多不带A/D转换器,所以模拟量的采集必须靠A/D实现。

所谓A/D转换就是将输入的模拟信号转换成数字信号输出。

改该电路采用ADC0804芯片,其最快转换时间为100us,时钟频率f=1/(C5*R9),可对0~5V之间的电压进行转换;输入基准电压为实际基准电压的1/2;若输入基准电压为 2.56V,其输入模拟电压为(DATA/256)*2,DATA为转换数字量。

转换结束信号输出到单片机外中断1,如图2-4所示。

/RD为外部读取转换结果的控制输出信号。

/RD为HI时,DB0~DB7为高阻抗;/RD为LO时,数据才输出。

/WR用来启动转换控制输入,相当于ADC转换开始(/CS=0时),当/WR由HI变为LO时,转换器被清除;当/WR为HI时开始转换。

CLK IN,CLK R:接振荡电路,振荡频率为1/(1.1RC),如图中R9、C6,ADC0804的最大输入电压为5V,提供基准电压。

根据ADC0804原输出转换值为0~255,R5、R11组成分压电路,为VREF理图,将输入模拟值转换成数字值后由P0口输出。

2.4 单片机电路单片机电路主要是单片机的最小系统,其原理图如图2-5所示。

图2-5 单片机电路原理图该部分电路主要由89S51、晶振和复位电路组成其原理图如2-6所示。

采用12M的晶振,机器周期为0.1us;上电复位;信号输入到外中断0,在中断中启动AD转换;AD转换结束标志作为外中断1的中断源,在中断1中读取数据并保存;P1口为数码管提供断码;P0.0~P0.7分别为AD的启动信号、AD的读取信号和数码管的扫描信号。

2.5 显示电路显示电路采用数码管来显示。

如图2-6所示。

图2-6 显示电路原理图该部分电路采用3位数码管来交替显示所测电压的有效值和峰值,同时数码管采用动态显示,每1ms 刷新一位,用3个8550的PNP 型三极管来片选。

图中smg0~smg7与单片机P0口相连接,三极管的集电极分别与共阳数码管9脚相连接,基极分别与单片机的P2.1~P2.3相连接。

3 软件设计3.1 总软件流程总软件流程图如图3-1所示:图3-1 总软件流程图3.2 初始化程序初始化程序主要是定义主程序中要用的变量和定时器的初始化。

变量定义如下: unchar dat; //AD 采样数据变量unchar tab[3]; //显示数据各个位存储数组 定时器初始化流程图如图3-2所示:图3-2 定时器初始化流程图3.3 AD 采样程序AD 采样主要是根据ADC0804的时序进行对外部数据的采用读取。

其中包括AD程序初始化定时AD 采样初始化中断更新AD 标志位1S 定时AD 有效值更新显示初始化时序和AD 数据读取程序。

AD 时序图3-3所示:图3-3 AD 时序图根据3-3图所示时序,写出AD 程序流程图,如图3-4所示开始结束AD 初始化延时1ms读取数据图3-4 AD 程序流程图3.4 数据处理程序对AD 采样的数据必须进行处理才能正常地显示。

首先的要把十六进制数的AD 值转换成十进制数,然后进行值处理,求出有效值,峰值,接着分别求出数据中的各个位上的数字,以便显示。

其程序流程图如图3-7所示。

图3-7 数据处理程序流程图3.5 数据显示程序数据显示主要是用数码管动态扫描的方法。

其程序流程图如土3-8所示入口返回送显示段码选择数码管1关闭数码管1送显示段码选择数码管2关闭数码管2送显示段码选择数码管3关闭数码管3图3-8 数据显示程序流程图4 调试4.1 调试准备调试所用到的仪器有万用表、直流稳压电源、示波器、信号发生器。

运用万用表来测量电阻、电压,直流稳压电源接正负Vs 和地,信号发生器产生信号,示波器显示输出波形和峰值。

4.2 关键点调试(1)、放大电路调试前要先进行调零,即将运放的2个输入端(同相输入端和反向输入端)对地短路,用万用表测输出电压,调节滑动变阻器R1,使输出电压为0,如果不进行调零,则会导致输出电压有偏差。

(2)、注意输入A/D的基准电压为1/2vef,同时最合适的基准电压为2.56V,以便计算时方便。

4.2.1 放大波形(1)、理论波形(2)、实际波形4.2.2 显示电路4.3 测试结果输入 Vpp 输入信号有效值测量值(有效值)1.04 3 4 4.68 0.3031.0621.4131.630.301.051.401.661.22.30 2.81 4 0.5201.141.362.090.5241.161.352.121.04 22.52 4.680.280.5630.771.330.270.5600.561.354.4 误差分析(1)放大电路的放大倍数会因输入电阻,反馈电阻与理论值有偏差而存在一定的误差,放大倍数过大会波形互失真;(2)当ADC0804的基准电压为2.56V时,其最小分辨率为20mv,因此测量值会有±20mv 的偏差;(3)输入信号存在干扰和波动;(4)偏置电压引起的误差。

5 结束语5.1 总结通过本次短学期的实验,使我对很多芯片有了一定的了解和巩固,对它们的功能有了一定的熟悉和掌握。

如AD737,该芯片可以用来将交流电转换成真有效值的直流电,如ADC0804芯片可实现数模转换,同时对真有效值的转换、放大等电路的设计有了进一步的理解和掌握。

在电路设计中必须注意电路中各元件值的选择会影响电路最终的结果。

当在设计放大电路时,输入电阻、反馈电阻的不同就会使放大倍数有所不同,根据题目要求和芯片的资料,必须保证最低放大倍数25,因此如放大倍数太小则不能满足要求,而太大则会导致输出波形的失真。

因此,要合理选择各元件的值。

在电路调试时,应该分模块进行调试,及时发现问题解决问题,等所有模块都调试成功再进行总体的调试。

最后要根据自己所测的结果,进行分析,尤其对测试出的结果与理论结果进行比较,是否有误差,并分析形成误差的原因,如何减少误差。

5.2 展望虽然该电路已经基本能实现对真有效值的测量和显示,但测量结果还存在着较大的误差,电路设计还有待于进一步的完善,各部分电路的稳定性也有待于进一步的提高,希望通过更进一步的研究和学习,实现用更少的元件,设计出更加合理、更高效的电路。

附录:1 总原理图2 程序清单主程序模块#include<reg51.h>#include<math.h>#include"adc0804.h"#include"smgdis.h"#define unchar unsigned char#define unint unsigned intunchar count=0;unchar ID=0; //任务ID,时间片分配ID#define a 0.5static unchar y;static time_init(){TMOD=0x01;/*定时器T0方式1(16位计数器)*//*公式为:x=65536-fosc/12*t 65536-50000=15536其中x为定时初值,fosc为晶振频率,t为定时时间*/ TH0=15536/256; /*定时器高位*/TL0=15536%256; /*定时器低位,定时时间为50ms ,20次为1s */ ET0=1;/*允许定时器T0中断*/TR0=1;/*开定时器T0*/EA=1;/*开总中断*/}void main(){unchar dat;unchar tab[3];time_init();while(1){dat=get_adc_value();value_done(dat,tab,ID);led_display(tab[0],tab[1],tab[2]);}}void timer0() interrupt 1{TR0=0;TH0=15536/256;TL0=15536%256; /*重装初值*/count++; /*计数,累加中断次数*/if(count==20) /*判断是否到10次,即0.5s*/{count=0;ID++; /*转换下一个显示*/if(ID==3) ID=0;}TR0=1;}A/D转换模块:(头文件)#ifndef __ADC0804_H__#define __ADC0804_H__#ifndef unchar#define unchar unsigned char#endif#ifndef unint#define unint unsigned int#endif#define adc_databus P1 //the databus of ADCsbit cs_adc=P2^0; //to choose the chip ADC0804 sbit wr=P3^6; //wr# signalsbit rd=P3^7; //rd# signalvoid value_done(unint tvdata,unchar led[],unchar ID) {unint temp;//temp=(unint)(tvdata*1.0/255*500);temp=(unint)(tvdata*2);switch(ID){case 0: //有效值break;case 1: //峰值temp*=sqrt(2);break;default: //其他情况break;}led[0]=(temp/100)%10;//最高位led[1]=(temp/10)%10;led[2]=temp%10; //最低位if(led[0]>10||led[0]<0) led[0]=11;if(led[1]>10||led[1]<0) led[0]=11;if(led[2]>10||led[2]<0) led[0]=11;}unchar get_adc_value(void){unchar k;unint tvdata;//----adc0804 start----//cs_adc=0; k=k; //nopwr=0; k=k;wr=1; k=k;cs_adc=1; k=k;k=k;k=k;//----read value of adc0804----//adc_databus=0xff;cs_adc=0; k=k;rd=0; k=k;tvdata=adc_databus;rd=1; k=k;cs_adc=1; k=k;return tvdata;}#endif显示模块(头文件)#ifndef __SMGDIS_H__#define __SMGDIS_H__#ifndef unchar#define unchar unsigned char#endif#ifndef unint#define unint unsigned int#endif/*全局变量定义*/#define DataBus P0 //数据口定义sbit c0=P2^1; //数码管0控制脚sbit c1=P2^2; //数码管1控制脚sbit c2=P2^3; //数码管2控制脚void delay(void){unchar i;unchar t=1;while(t--)for(i=0;i<125;i++);}void led_display(unchar a,unchar b,unchar c){/*共阳数码管数字码0~9+全暗码*/Unchar code tab0[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x86};DataBus=(tab0[a]&0x7f);/*送显示码,由a控制*/c0=0; /*选通数码管0*/delay();DataBus=0xff;c0=1;DataBus=tab0[b];/*送显示码,由b控制*/c1=0; /*选通数码管1*/delay();DataBus=0xff;c1=1;DataBus=tab0[c];/*送显示码,由c控制*/c2=0; /*选通数码管2*/delay();DataBus=0xff;c2=1;}#endif3 实物图。

相关文档
最新文档