一路模拟电压检测器实训报告教材.docx
- 文档编号:24619645
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:18
- 大小:1.70MB
一路模拟电压检测器实训报告教材.docx
《一路模拟电压检测器实训报告教材.docx》由会员分享,可在线阅读,更多相关《一路模拟电压检测器实训报告教材.docx(18页珍藏版)》请在冰豆网上搜索。
一路模拟电压检测器实训报告教材
一路模拟电压检测器设计
一、任务与计划:
任务主要内容:
采用AT89S51单片机的I/O口,选用PCF8591串行模数转换器,采用C语言编程,设计一路模拟电压检测器,显示班级和学号。
工作学习过程要求:
1.单片机并口共用、LED数码管动态显示及AD转换器知识和案例学习,画出电路图,编写源程序。
2.运行验证:
加载程序运行演示。
二、方案与电路设计
如图1-1数码管锁存器模块
如图1-2PCF8591A/D转换模块
如图1-3电路连接图
如图1-4开发板模块连接模块接线表
图1-1
图1-2
图1-3
图1-4
三、程序设计
#include
#include“i2c.h”
#include“display.h”
#defineAddWr0x90//写数据地址
#defineAddRd0x91//读数据地址
externbitack;
unsignedcharReadADC(unsignedcharChl);//输入参数Chl表示需要转换的通道,范围从0-3,返回值范围0-255
bitWriteDAC(unsignedchardat);
voidDelayMs(unsignedcharz)
{
unsignedintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
main()
{
unsignedcharnum=0;
unsignedchara=0;
Init_Timer0();
while
(1)
{
a=ReadADC(0);
num=a*1.0*5/255*1000;//求各显示值
TempData[0]=DuanMa[num/100];//求百位
TempData[1]=DuanMa[(num%100)/10];//求十位
TempData[2]=DuanMa[(num%100)%10];//求个位
TempData[3]=DuanMa[1];
TempData[4]=DuanMa[1];
TempData[5]=0x40;
TempData[6]=DuanMa[1];
TempData[7]=DuanMa[9];
DelayMs(100);
}
}
unsignedcharReadADC(unsignedcharChl)
{
unsignedcharVal;
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);
}
四、安装与调试
如图1-5电压中间值显示
如图1-6电压最大值显示
如图1-7电压最小值显示
五、小结
通过本次实训,我基本了解到T2C协议的基本内容,与各项功能,提高了对单片机总线传输的应用,加深了对PCH8591模数转换芯片的应用能力,加深了对AD转换的理解,同事提高了我的画图视图能力,电路连接能力,以及电路各元件的特性。
三路模拟电压检测器设计
一、任务与计划
任务主要内容:
采用AT89S51单片机的I/O口,选用PCF8591串行模数转换器,采用C语言编程,设计四路模拟电压检测器,显示班级和学号。
工作学习过程要求:
1.单片机并口共用、LED数码管动态显示及AD转换器知识和案例学习,画出电路图,编写源程序。
2.运行验证:
加载程序运行演示
二、方案与电路设计
如图1-1数码管锁存器模块
如图1-2PCF8591A/D转换模块
如图1-3电路连接图
如图1-4开发板模块连接模块接线表
图1-1图1-2
图1-3
图1-4
三、程序设计
#include
#include"i2c.h"
#include"display.h"
#defineAddWr0x90//写数据地址
#defineAddRd0x91//读数据地址
externbitack;
unsignedcharReadADC(unsignedcharChl);//输入参数Chl表示需要转换的通道,范围从0-3,返回值范围0-255
bitReadADFlag;
voidDelayMs(unsignedcharz)
{
unsignedintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidmain()
{
unsignedchari,num=0;
Init_Timer0();
DelayMs(100);
while
(1)//主循环
{
if(ReadADFlag)
{
ReadADFlag=0;
for(i=0;i<5;i++)//连续读五次,输入通道后多读几次,取最后一次值,以便读出稳定
num=ReadADC(0);
num=num*5*10/256;//乘以10表示吧实际值扩大10倍,方便下一步处理
TempData[0]=DuanMa[num/10]|0x80;
TempData[1]=DuanMa[num%10];
for(i=0;i<5;i++)
num=ReadADC
(1);
num=num*5*10/256;
TempData[2]=DuanMa[num/10]|0x80;
TempData[3]=DuanMa[num%10];
for(i=0;i<5;i++)
num=ReadADC
(2);
num=num*5*10/256;
TempData[4]=DuanMa[num/10]|0x80;
TempData[5]=DuanMa[num%10];
}
TempData[6]=DuanMa[1];//显示学号
TempData[7]=DuanMa[9];
}
}
unsignedcharReadADC(unsignedcharChl)
{
unsignedcharVal;
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);
}
四、安装与调试
如图1-5电压最大值显示
如图1-6电压中间值显示
如图1-7电压最小值显示
图1-5图1-6
图1-7
五、小结
通过本次实训,基本掌握PCF8591模数转换的原理与用法,复习并巩固了74HC573锁存器,还有8位共阴极的数码管的应用,掌握了延时函数的改写,以及程序编译问题的分析与解决,加深了对单片机定时器与计数器的掌握,提高了对电路连接原理的分析能力。
DA转换器动态显示应用设计
一、任务与计划
任务主要内容:
采用AT89S51单片机的I/O口,选用PCF8591串行数模转换器,采用C语言编程,设计DA数模转换器,显示班级和学号。
工作学习过程要求:
1.单片机并口共用、LED数码管动态显示及DA转换器知识和案例学习,画出电路图,编写源程序。
2.运行验证:
加载程序运行演示。
二、方案与电路设计
如图1-1数码管锁存器模块
如图1-2PCF8591A/D转换模块
如图1-3电路连接图
如图1-4开发板模块连接模块接线表
图1-1图1-2
图1-3
图1-4
三、程序设计
#include
#include"i2c.h"
#include"display.h"
#defineAddWr0x90//写数据地址
#defineAddRd0x91//读数据地址
externbitack;
unsignedcharReadADC(unsignedcharChl);
bitWriteDAC(unsignedchardat);
voiddelay(unsignedcharz)
{
unsignedintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidmain()
{
unsignedcharnum=0;
Init_Timer0();
while
(1)//主循环
{
WriteDAC(num);
num++;//从0~255反复循环累加
TempData[0]=DuanMa[num/100];//分离百位
TempData[1]=DuanMa[(num%100)/10];//分离十位
TempData[2]=DuanMa[(num%100)%10];//分离个位
TempData[3]=0x40;
TempData[4]=DuanMa[1];//显示班级学号
TempData[5]=DuanMa[1];
TempData[6]=DuanMa[1];
TempData[7]=DuanMa[9];
delay(100);
}
}
bitWriteDAC(unsignedchardat)
{
Start_I2c();//启动总线
SendByte(AddWr);//发送器件地址
if(ack==0)return(0);
SendByte(0x40);//发送器件子地址
if(ack==0)return(0);
SendByte(dat);//发送数据
if(ack==0)return(0);
Stop_I2c();
}
四、安装与调试
如图1-5数码管显示数字信号LED灯亮度观察模拟信号
如图1-6数码管一开始LED亮度
图1-5图1-6
五、小结
通过本次实训我了解了从模数转换到数模转换的的跳变,掌握了A/D转换的芯片基本应用,对PCF8591芯片的更加深入的掌握,复习了锁存器的应用,夯实了以后发展的基础,掌握了子函数的调用,以及数组的应用,掌握了I2C总线协议的应用。
液晶显示数字电压表设计
一、任务与计划
任务主要内容:
采用AT89S51单片机的I/O口,选用PCF8591串行模数转换器,采用C语言编程,设计数字电压表,采用液晶显示,显示电压、班级和学号。
工作学习过程要求:
1.单片机并口共用、液晶显示及AD转换器知识和案例学习,画出电路图,编写源程序。
2.运行验证:
加载程序运行演示。
二、方案与电路设计
如图1-1液晶显示模块
如图1-2PCF8591A/D转换模块
如图1-3电路连接图
如图1-4开发板模块连接模块接线表
图1-1
图1-2
图1-3
图1-4
三、程序设计
#include
#include"i2c.h"
#include"1602.h"
#include
#defineAddWr0x90//写数据地址
#defineAddRd0x91//读数据地址
externbitack;
unsignedcharReadADC(unsignedcharChl);
bitWriteDAC(unsignedchardat);
voidDelayMs(unsignedcharz);
voidDelayMs(unsignedcharz)
{
unsignedintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidmain()
{
unsignedcharnum=0,i;
unsignedchartemp[7];//定义显示区域临时存储数组
floatVoltage;//定义浮点变量
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,"%4.3fV",Voltage);//格式输出电压值,%4.3f表示浮点输出,共4位数,小数点后3位
LCD_Write_String(0,0,temp);
LCD_Write_String(7,0,"1101-19LiuPP");
DelayMs(200);
}
}
unsignedcharReadADC(unsignedcharChl)
{
unsignedcharVal;
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);
}
四、安装与调试
图1-5液晶显示电压最大值
图1-6液晶显示电压最小值
图1-5图1-6
五、小结
本次实验做的是液晶显示数字电压表,AD转换芯片PCF8591输入一路模拟电压信号转换为数字信号,1602液晶显示。
通过本次实训我不仅复习了1602显示函数的应用,更加深入的掌握了AD转换芯片的功能与应用,掌握了液晶显示,提高了综合能力,为以后发展奠定了良好的基础。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一路 模拟 电压 检测器 报告 教材