一路模拟电压检测器实训报告_第1页
一路模拟电压检测器实训报告_第2页
一路模拟电压检测器实训报告_第3页
一路模拟电压检测器实训报告_第4页
一路模拟电压检测器实训报告_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一路模拟电压检测器设计1、 任务与计划:任务主要内容: 采用AT89S51单片机的I/O口,选用PCF8591串行模数转换器,采用C语言编程,设计一路模拟电压检测器,显示班级和学号。 工作学习过程要求: 1.单片机并口共用、LED数码管动态显示及AD转换器知识和案例学习,画出电路图, 编写源程序。2.运行验证:加载程序运行演示。2、 方案与电路设计如图1-1数码管锁存器模块如图1-2PCF8591A/D转换模块如图1-3电路连接图如图1-4开发板模块连接模块接线表图1-1图1-2图1-3图1-4三、程序设计#include <reg52.h> #include “i2c.h”#in

2、clude “display.h”#define AddWr 0x90 /写数据地址 #define AddRd 0x91 /读数据地址extern bit ack;unsigned char ReadADC(unsigned char Chl); /输入参数 Chl 表示需要转换的通道,范围从0-3,返回值范围0-255bit WriteDAC(unsigned char dat);void DelayMs(unsigned char z)unsigned int x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);main() unsigned char

3、num=0; unsigned char a=0; Init_Timer0();while (1) a=ReadADC(0); num=a*1.0*5/255*1000; /求各显示值 TempData0=DuanManum/100; /求百位 TempData1=DuanMa(num%100)/10; /求十位 TempData2=DuanMa(num%100)%10; /求个位 TempData3=DuanMa1; TempData4=DuanMa1; TempData5=0x40; TempData6=DuanMa1; TempData7=DuanMa9; DelayMs(100); u

4、nsigned char ReadADC(unsigned char Chl) unsigned char Val; Start_I2c(); /启动总线 SendByte(AddWr); /发送器件地址 if(ack=0)return(0); SendByte(0x40|Chl); /发送器件子地址 if(ack=0)return(0); Start_I2c(); SendByte(AddWr+1); if(ack=0)return(0); Val=RcvByte(); NoAck_I2c(); /发送非应答位 Stop_I2c(); /结束总线 return(Val); 4、 安装与调试如

5、图1-5电压中间值显示如图1-6电压最大值显示如图1-7电压最小值显示5、 小结 通过本次实训,我基本了解到T2C协议的基本内容,与各项功能,提高了对单片机总线传输的应用,加深了对PCH8591模数转换芯片的应用能力,加深了对AD转换的理解,同事提高了我的画图视图能力,电路连接能力,以及电路各元件的特性。三路模拟电压检测器设计1、 任务与计划任务主要内容: 采用AT89S51单片机的I/O口,选用PCF8591串行模数转换器,采用C语言编程,设计四路模拟电压检测器,显示班级和学号。 工作学习过程要求: 1.单片机并口共用、LED数码管动态显示及AD转换器知识和案例学习,画出电路图, 编写源程序

6、。 2.运行验证:加载程序运行演示2、 方案与电路设计如图1-1数码管锁存器模块如图1-2PCF8591A/D转换模块如图1-3电路连接图如图1-4开发板模块连接模块接线表 图1-1 图1-2图1-3图1-43、 程序设计#include <reg52.h> #include "i2c.h"#include "display.h"#define AddWr 0x90 /写数据地址 #define AddRd 0x91 /读数据地址extern bit ack;unsigned char ReadADC(unsigned char Chl);

7、/输入参数 Chl 表示需要转换的通道,范围从0-3,返回值范围0-255bit ReadADFlag;void DelayMs(unsigned char z)unsigned int x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);void main() unsigned char i,num=0; Init_Timer0(); DelayMs(100);while (1) /主循环 if(ReadADFlag) ReadADFlag=0; for(i=0;i<5;i+) /连续读五次,输入通道后多读几次,取最后一次值,以便读出稳定 num=Re

8、adADC(0);num=num*5*10/256;/乘以10表示吧实际值扩大10倍,方便下一步处理TempData0=DuanManum/10|0x80; TempData1=DuanManum%10; for(i=0;i<5;i+) num=ReadADC(1);num=num*5*10/256;TempData2=DuanManum/10|0x80; TempData3=DuanManum%10;for(i=0;i<5;i+) num=ReadADC(2);num=num*5*10/256;TempData4=DuanManum/10|0x80; TempData5=Duan

9、Manum%10;TempData6=DuanMa1; /显示学号 TempData7=DuanMa9; unsigned char ReadADC(unsigned char Chl) unsigned char Val; Start_I2c(); /启动总线 SendByte(AddWr); /发送器件地址 if(ack=0)return(0); SendByte(0x40|Chl); /发送器件子地址 if(ack=0)return(0); Start_I2c(); SendByte(AddWr+1); if(ack=0)return(0); Val=RcvByte(); NoAck_I

10、2c(); /发送非应位 Stop_I2c(); /结束总线 return(Val); 4、 安装与调试如图1-5电压最大值显示如图1-6电压中间值显示如图1-7电压最小值显示 图1-5图1-6图1-7五、小结 通过本次实训,基本掌握PCF8591模数转换的原理与用法,复习并巩固了74HC573锁存器,还有8位共阴极的数码管的应用,掌握了延时函数的改写,以及程序编译问题的分析与解决,加深了对单片机定时器与计数器的掌握,提高了对电路连接原理的分析能力。DA转换器动态显示应用设计 一、任务与计划任务主要内容:采用AT89S51单片机的I/O口,选用PCF8591串行数模转换器,采用C语言编程,设计

11、DA数模转换器,显示班级和学号。 工作学习过程要求: 1.单片机并口共用、LED数码管动态显示及DA转换器知识和案例学习,画出电路图, 编写源程序。 2.运行验证:加载程序运行演示。2、 方案与电路设计如图1-1数码管锁存器模块如图1-2PCF8591A/D转换模块如图1-3电路连接图如图1-4开发板模块连接模块接线表 图1-1 图1-2图1-3图1-43、 程序设计#include <reg52.h> #include "i2c.h"#include "display.h"#define AddWr 0x90 /写数据地址 #define

12、AddRd 0x91 /读数据地址extern bit ack;unsigned char ReadADC(unsigned char Chl);bit WriteDAC(unsigned char dat);void delay(unsigned char z)unsigned int x ,y;for(x=z;x>0;x-)for(y=110;y>0;y-);void main() unsigned char num=0; Init_Timer0();while (1) /主循环 WriteDAC(num); num+;/从0255反复循环累加 TempData0=DuanMa

13、num/100; /分离百位 TempData1=DuanMa(num%100)/10;/分离十位 TempData2=DuanMa(num%100)%10; /分离个位 TempData3=0x40; TempData4=DuanMa1;/显示班级学号 TempData5=DuanMa1; TempData6=DuanMa1; TempData7=DuanMa9; delay(100); bit WriteDAC(unsigned char dat) Start_I2c(); /启动总线 SendByte(AddWr); /发送器件地址 if(ack=0)return(0); SendByt

14、e(0x40); /发送器件子地址 if(ack=0)return(0); SendByte(dat); /发送数据 if(ack=0)return(0); Stop_I2c(); 四、安装与调试如图1-5数码管显示数字信号LED灯亮度观察模拟信号如图1-6数码管一开始LED亮度 图1-5图1-65、 小结通过本次实训我了解了从模数转换到数模转换的的跳变,掌握了A/D转换的芯片基本应用,对PCF8591芯片的更加深入的掌握,复习了锁存器的应用,夯实了以后发展的基础,掌握了子函数的调用,以及数组的应用,掌握了I2C总线协议的应用。 液晶显示数字电压表设计 一、任务与计划任务主要内容: 采用AT8

15、9S51单片机的I/O口,选用PCF8591串行模数转换器,采用C语言编程,设计数字电压表,采用液晶显示,显示电压、班级和学号。 工作学习过程要求: 1.单片机并口共用、液晶显示及AD转换器知识和案例学习,画出电路图, 编写源程序。 2.运行验证:加载程序运行演示。2、 方案与电路设计如图1-1液晶显示模块如图1-2PCF8591A/D转换模块如图1-3电路连接图如图1-4开发板模块连接模块接线表图1-1图1-2图1-3图1-43、 程序设计#include <reg52.h> #include "i2c.h"#include "1602.h"

16、;#include <stdio.h>#define AddWr 0x90 /写数据地址 #define AddRd 0x91 /读数据地址extern bit ack;unsigned char ReadADC(unsigned char Chl);bit WriteDAC(unsigned char dat);void DelayMs(unsigned char z);void DelayMs(unsigned char z)unsigned int x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);void main() unsigned

17、char num=0,i; unsigned char temp7;/定义显示区域临时存储数组 float Voltage; /定义浮点变量 LCD_Init(); /初始化液晶 DelayMs(20); /延时有助于稳定 LCD_Clear(); /清屏while (1) /主循环 for(i=0;i<5;i+)/连续读5次,取最后一次,以便读取稳定值 num=ReadADC(0); /读取第1路电压值,范围是0-255 Voltage=(float)num*5/256; /根据参考电源VREF算出时间电压,float是强制转换符号,用于将结果转换成浮点型 sprintf(temp,&

18、quot;%4.3fV",Voltage);/格式输出电压值,%4.3f 表示浮点输出,共4位数,小数点后3位 LCD_Write_String(0,0,temp); LCD_Write_String(7,0,"1101-19 LiuPP"); DelayMs(200); unsigned char ReadADC(unsigned char Chl) unsigned char Val; Start_I2c(); /启动总线 SendByte(AddWr); /发送器件地址 if(ack=0)return(0); SendByte(0x40|Chl); /发送器件子地址 if(ack=0)return(0); Start_I2c();

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论