单片机实验5报告_第1页
单片机实验5报告_第2页
单片机实验5报告_第3页
单片机实验5报告_第4页
单片机实验5报告_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

1、 学号序号 19 单片机原理与接口技术 实验报告实验项目序号 实验五 实验项目名称 I2C的DA/ADC转换实验 姓 名 卢志雄 专 业 电子信息工程 班 级 电信14-2BF 完成时间 2016-05-20 一、实验目的1、 掌握I2C的DA/ADC芯片与单片机接口方法;2、 掌握I2C器件编程方法;3、 掌握DAC和ADC的使用方法。二、实验前准备1、 完成作业7;2、 根据实验内容编写好相关程序,并进行Proteus仿真。三、实验内容实验内容为3项,其中第1、2项必做。1、D/A转换实验。设置一个一维数组data uchar c4=0x00,0xa0,0xaa,

2、0xff;按下K1、K2、K3、K4,分别将c0、c1、c2、c3 的值转换成模拟量输出,观察发光二极管D23的亮度。若是仿真,可以通过电压表观察模拟量的电压值。2、单通道采样与动态显示。对AIN0通道进行采样,将采样数据在1、2两位动态显示,调节电位器观察显示数据变化。3、简易电压表实现。对AIN0通道进行采样,将采样数据转换成4位电压值在1、2、3、4四位动态显示,注意只有1位整数3位小数。调节电位器观察显示数据变化。四、实验原理图实验原理图如图3.5所示:图3.5 I2C的DA/ADC转换实验电路原理图电路中,P3.6、P3.4分别连接SCL、SDA,地址引脚A2A1A0=000,PCF

3、8591的特征编码为1001,电路中PCF8591的地址为1001000。4路模拟输入,AIN0连接一个10K电位器的中心抽头,调节电位器可改变AIN0的模拟电压,AIN1连接电源,AIN2、AIN3连接地。PCF8591的15脚AOUT是DAC输出的模拟量, AOUT引脚通过50电阻、LED与电源连接,输出模拟量越小,LED越亮。注意在HNIST-2型实验装置中,将J16的1、2脚短路。五、软件设计思想1、 编程思路仿照例题编写程序,采用例题的I2C的相关函数。动态显示采用实验四的方法,只将显示数据送人相应显示数组元素。2、 简易电压表实现注意在采样数据转换成4位电压值时,中间变量要设置长整

4、形数据类型,并注意小数点设置。六、源程序#include#include#includei2c.h#define uchar unsigned chardata uchar d,a,num;data uchar c4=0x00,0xa0,0xaa,0xff;#define _Nop() _nop_()void main()EA=1;IT0=1;EX0=1;sen: erflags=0; Start(); SendByte(0x90); cAck(); if(erflags) goto sen; SendByte(0x40); cAck(); if(erflags) goto sen; whil

5、e(1) SendByte(d); cAck(); void EX0_int() interrupt 0 a=P2; if(a=1)num=0; if(a=2)num=1; if(a=4)num=2; if(a=8)num=3; d=cnum;/实验5第2题,PCF8591只对0通道进行采样的A/D转换程序。#include #include #include #define uchar unsigned char#define uint unsigned int#define _Nop( ) _nop_( ) /定义空操作,1ssbit oe=P13; /数码管段选、位选锁存器输出控制信号s

6、bit dula=P14; /数码管段选锁存器控制信号sbit wela=P15; /数码管位选锁存器控制信号uchar j=0;uchar code sled_bit=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/定义点亮数码管位选码data uchar disp8=16,16,16,16,16,16,16,16;/ 8位数码管都不亮uchar code table18=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00;/共阴极数码管显示

7、段码(0-F)sbit P3_5=P35;void main(void) data uchar d;P3_5=0;TMOD=0x01;/ 设置定时器T0为方式1定时 TH0=(65536-500)/256;/ 给T0装入初值 TL0=(65536-500)%256; / 给T0装入初值 ET0=1; / 允许T0中断 EA=1;/ CPU开中断 TR0=1;/ 启动T0oe=0;sen:erflags=0;Start( ); /发送起始信号SendByte(0x90); /发送写PCF8591的寻址字节(写)cAck( );/检查应答if(erflags) goto sen;/无应答,重来Se

8、ndByte(0x00); /发送写入PCF8591的控制字,选择0通道cAck( );/检查应答if(erflags) goto sen;/无应答,重来sen1:Start( ); /发送起始信号SendByte(0x91); /发送写PCF8591的寻址字节(读)cAck( );/检查应答if(erflags) goto sen1;/无应答,重来d=RcvByte( );/第1次读的数据无效Ack( ); /应答位函数,while(1) d=RcvByte( );Ack( ); /应答位函数, disp0=d/16; disp1=d%16; void T0_int(void) interr

9、upt 1 uchar k;TH0=(65536-1000)/256; TL0=(65536-1000)%256;oe=1;/ 关闭2个573输出,防止在送数据时相互影响k = dispj;/ 每次显示arj的数据P0 = tablek; / 相应显示数字段码 dula=1;dula=0;/ 锁存段码P0=sled_bitj; / 选择相应数码管位选 wela=1;wela=0;/ 锁存位码oe=0;/ 打开2个573三态门,输出段码和位码j+;/ 为下一个显示做准备if(j=8)j=0; /实验5第3题,简易电压表。#include #include #include #define uch

10、ar unsigned char#define uint unsigned int#define _Nop( ) _nop_( ) /定义空操作,1ssbit oe=P13; /数码管段选、位选锁存器输出控制信号sbit dula=P14; /数码管段选锁存器控制信号sbit wela=P15; /数码管位选锁存器控制信号uchar j=0;uchar code sled_bit=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/定义点亮数码管位选码data uchar disp8=1,6,16,16,16,16,16,16;/ 8位数码管都不亮uchar co

11、de table18=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00;/共阴极数码管显示段码(0-F)sbit P3_5=P35;void main(void) unsigned long d;P3_5=0;TMOD=0x01;/ 设置定时器T0为方式1定时 TH0=(65536-500)/256;/ 给T0装入初值 TL0=(65536-500)%256; / 给T0装入初值 ET0=1; / 允许T0中断 EA=1;/ CPU开中断 TR0=1;/ 启动T0oe=0;s

12、en:erflags=0;Start( ); /发送起始信号SendByte(0x90); /发送写PCF8591的寻址字节(写)cAck( );/检查应答if(erflags) goto sen;/无应答,重来SendByte(0x00); /发送写入PCF8591的控制字,选择0通道cAck( );/检查应答if(erflags) goto sen;/无应答,重来sen1:Start( ); /发送起始信号SendByte(0x91); /发送写PCF8591的寻址字节(读)cAck( );/检查应答if(erflags) goto sen1;/无应答,重来d=RcvByte( );/第1

13、次读的数据无效Ack( ); /应答位函数,while(1) d=RcvByte( );Ack( ); /应答位函数,d=(d*5*1000)/256; disp0=d/1000;disp1=d%1000/100;disp2=d%100/10;disp3=d%10; void T0_int(void) interrupt 1 uchar k;TH0=(65536-1000)/256; TL0=(65536-1000)%256;oe=1;/ 关闭2个573输出,防止在送数据时相互影响k = dispj;/ 每次显示arj的数据P0 = tablek; / 相应显示数字段码 if(j=0) P0=

14、P0|0x80;dula=1;dula=0;/ 锁存段码P0=sled_bitj; / 选择相应数码管位选 wela=1;wela=0;/ 锁存位码oe=0;/ 打开2个573三态门,输出段码和位码j+;/ 为下一个显示做准备if(j=8)j=0; 六、实验结果第一题:给单片机上电,依次按下K1,K2,K3,K4键,发光二极管的亮度逐次变暗。第二题:给单片机上电,调节电位器,数码管显示数值改变。第三题:给单片机上电,数码管显示通道AIN0的电压值,且调节电位器,数码管显示电压值改变。七、实验思考题1、 采用I2C接口的ADC有什么好处? 答:可以简化电路结构,节约成本。2、 如果通过按K1、K2、K3、K4键分别选择ADC采样0、1、2、3通道,程序如何处理?答:按键后进入中断程序判断按了哪一个键,根据按键键值分别对通道进行采样。3、 如何利用芯片的通道自动增量的功能,对AIN0、AIN1、AIN2、 AIN3通道轮流进行采样。4、 答:采用循环结构,依次对AIN0、AIN1、AIN2、 AIN3通道轮流进行采样。八、实验心得通过这次实验设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学

温馨提示

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

评论

0/150

提交评论