c语言编程TLC2543AD采集,基于C语言的89C51与TLC2543AD转换器的驱动程序的设计 实训报告...
电子信息技术综合实训报告
竞赛题名称:基于C语言的89C51与TLC2543AD转换器的驱动程序的设计
队员名称:
评阅人签名:设计思路描述:
设计思路:
硬件部分基于80C51单片机和TLC2543组成多路数据采集系统,采用89C51作为控制部件,控制数据的采集、显示、传输,它是整个系统的核心。由TLC2543作为此数据采集系统的A/D转换芯片,进行模数转换得到模拟信号测量值,它使用开关电容逐次逼近技术完成A/D转换过程由于是串行输入结构,能够节省51系列单片机的I/O资源。硬件设计的主要任务是TLC2543和单片机的接口电路设计,输入信号的调理电路设计。
软件部分主要涉及A/D转换程序的编写,1602LCD驱动的编写,从TLC2543所接收数据的处理等。
原理框图:见图1。
1.001.jpg (9.68 KB, 下载次数: 26)
2016-6-1 15:04 上传
图1 模数转换系统框图硬件电路图:
由ProteusEDA工具软件所绘制原理图,见图2。
1.002.jpg (70.21 KB, 下载次数: 38)
2016-6-1 15:04 上传
图2 模数转换系统原理图算法数学描述:
算法1:
for(i=0;i<6;i++)
{
ad_result=AD_Conver(0);
sum+=ad_result;
}
ad=sum*5.0/4096/6;
说明:对TLC2543的返回值ad_result进行求和,然后取平均数。
算法2:
num[0]=ad_result/10000+'0';
num[2]=ad_result%10000/1000+'0';
num[3]=ad_result%1000/100+'0';
num[4]=ad_result%100/10+'0';
num[5]=ad_result%10+'0';
说明:分别求出LCD显示数值各位的数值。软件流程图:
1602LCD程序流程图,见图3。
1.003.jpg (15.75 KB, 下载次数: 28)
2016-6-1 15:04 上传
图3 1602LCD程序流程图
主程序流程图,见图4。
1.004.jpg (13.98 KB, 下载次数: 25)
2016-6-1 15:04 上传
图4 主程序流程图测试方法描述:(含模块与系统测试方法)
由探针对模拟信号输入端口进行电压测量,数值为2.71192V,见图5。
1.005.jpg (10.74 KB, 下载次数: 31)
2016-6-1 15:04 上传
图5
对模拟信号采样并处理,得模拟信号输入端口电压测量值为2.7111V,见图6。
1.006.jpg (14.07 KB, 下载次数: 26)
2016-6-1 15:04 上传
图6测试数据:
滑动滑动变阻器改变模拟输入端口电压,共测得数据5组数据,见表1。探针测量值(V)2.71192.42652.14101.85561.5703
LCD示值(V)2.71112.42552.13981.85541.5698
表1数据分析与结论:
测试数据分析:
1.007.jpg (902 Bytes, 下载次数: 23)
2016-6-1 15:04 上传
=0.0008
1.008.jpg (908 Bytes, 下载次数: 28)
2016-6-1 15:04 上传
=0.0001
1.009.jpg (929 Bytes, 下载次数: 32)
2016-6-1 15:04 上传
=0.0012 (舍去)
1.010.jpg (925 Bytes, 下载次数: 23)
2016-6-1 15:04 上传
=0.0002
1.011.jpg (933 Bytes, 下载次数: 25)
2016-6-1 15:04 上传
=0.0005
误差平均值:+++
1.012.jpg (1022 Bytes, 下载次数: 27)
2016-6-1 15:04 上传
0.0008
结论:由以上计算结果可知,该系统误差较小,能满足日常所需的测量精度要求,同时反映出TLC2543模数转换芯片具有误差小,分辨率较高,因此在仪器仪表中有较为广泛的应用。
附件一:程序源代码
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit RS=P3^5;
sbit RW=P3^6;
sbit E=P3^4;
sbit BF=P0^7; //1602忙碌标志位
void delay1ms()
{uchar i,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++)
; }
void delay(uchar n) //延时n毫秒
{uchar i;
for(i=0;i
delay1ms();}
unsigned char BusyTest(void) //result=1为忙碌;result=0为不忙碌
{bit result;
RS=0;
RW=1; //高电平进行读操作
E=1; //E=1,才允许读写
_nop_();
_nop_();
_nop_();
_nop_();
result=BF;
E=0;
return result;}
void WriteInstruction (uchar dictate) //写指令
{ while(BusyTest()==1);
RS=0; //RS和R/W同时为低电平时,可以写入指令
RW=0;
E=0;
_nop_();
_nop_();
P0=dictate;
_nop_();
_nop_();
_nop_();
_nop_();
E=1;
_nop_();
_nop_();
_nop_();
_nop_();
E=0;}
void WriteAddress(uchar x) //写地址
{WriteInstruction(x|0x80); //显示位置的确定方法规定为"80H+地址码x"
}
void WriteData(uchar y)
{ while(BusyTest()==1);
RS=1; //RS为高电平,RW为低电平时,写入数据
RW=0;
E=0;
P0=y;
_nop_();
_nop_();
_nop_();
_nop_();
E=1;
_nop_();
_nop_();
_nop_();
_nop_();
E=0;}
void LcdInitiate(void) //初始化
{delay(15);
WriteInstruction(0x38); //显示模式设置:16×2显示,5×7点阵,8位数据接口
delay(5);
WriteInstruction(0x38);
delay(5);
WriteInstruction(0x38);
delay(5);
WriteInstruction(0x0f); //显示模式设置:显示开,有光标,光标闪烁
delay(5);
WriteInstruction(0x06); //显示模式设置:光标右移,字符不移
delay(5);
WriteInstruction(0x01); //清屏幕指令,将以前的显示内容清除
delay(5);}
sbit CLOCK=P1^3;
sbit DATA_IN=P1^1;
sbit DATA_OUT=P1^0;
sbit CS=P1^2;
void delay1()
{int i=5;
while(i--);}
uint AD_Conver(uchar channel) //选择输入通道
{uchar i;
int ad_value=0;
CLOCK=0;
CS=1;
delay1();
CS=0;
channel<<=4; //左移4位
for(i=0;i<12;i++)
{ if(DATA_OUT)ad_value|=1;
DATA_IN=(bit)(channel&0x80);
CLOCK=1;
delay1();
CLOCK=0;
channel<<=1;
ad_value<<=1;}
CLOCK=1;
ad_value>>=1;
return ad_value; //返回转换数据
}
void main()
{ int ad_result;
uint i;
float ad;
uint num[]={'0','.','0','0','0','0','V',' ',' ',' ',' ',' '};
uint csu[]={' ',' ',' ',' ',' ','C',' ','S',' ','U',' ',' ',' ',' ',' '};
ad_result=AD_Conver(0);
delay(100);
while(1)
{uint sum;
sum=0;
for(i=0;i<6;i++)
{
ad_result=AD_Conver(0);
sum+=ad_result;}
ad=sum*5.0/4096/6; //4096为2的12次方,6为求平均数
ad_result=(int)(ad*10000); //转换为整形变量
num[0]=ad_result/10000+'0';
num[2]=ad_result%10000/1000+'0';
num[3]=ad_result%1000/100+'0';
num[4]=ad_result%100/10+'0';
num[5]=ad_result%10+'0';
LcdInitiate();
WriteAddress(0x80); //第一行第一列显示
for(i=0;i<15;i++)
{WriteData(num[i]);
delay(850);}
WriteAddress(0xc0); //第二行第一列显示
for(i=0;i<15;i++)
{WriteData(csu[i]);
delay(850);}
delay(10000);}
}复制代码
附件二:TLC2543时序图
1.013.jpg (32.73 KB, 下载次数: 26)
2016-6-1 15:04 上传
完整版本的论文请下载附件:
c语言编程TLC2543AD采集,基于C语言的89C51与TLC2543AD转换器的驱动程序的设计 实训报告...相关推荐
- 基于javaweb的仓库管理系统(java+springboot+layui+html+thymeleaf+mysql+实训报告)
基于javaweb的仓库管理系统(java+springboot+layui+html+thymeleaf+mysql+实训报告) 运行环境 Java≥8.MySQL≥5.7 开发工具 eclipse ...
- stm32 c语言编程pdf,STM32-MCX314 基于C语言编写的STM32控制运动控制芯片MCX314的整套控制程序 - 下载 - 搜珍网...
STM32 MCX314/例程说明(中文).txt STM32 MCX314/删除目标文件(用于打包备份).bat STM32 MCX314/修改日志.doc STM32 MCX314/圆弧-矩形.P ...
- C++课程设计实训_基于多态书籍信息管理系统的设计与实现、附源码、有过程截图
C++课程设计实训_基于多态书籍信息管理系统的设计与实现.附源码,有过程截图 书籍信息管理系统的设计与实现(基于多态) 学生姓名: 学 号: 指导老师: 所 在 系: 专 业: 班 级: C++课程设 ...
- 《C语言编程魔法书:基于C11标准》——第一篇 预备知识篇 第1章 C魔法概览1.1 例说编程语言...
本节书摘来自华章计算机<C语言编程魔法书:基于C11标准>一书中的第1章,第1.1节,作者: 陈轶 更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第一篇 预备 ...
- 《C语言编程魔法书:基于C11标准》——1.3 主流C语言编译器介绍
本节书摘来自华章计算机<C语言编程魔法书:基于C11标准>一书中的第1章,第1.3节,作者: 陈轶 更多章节内容可以访问云栖社区"华章计算机"公众号查看. 1.3 主流 ...
- c语言魔法书,C语言编程魔法书:基于C11标准
C语言编程魔法书:基于C11标准 作者:陈轶 著 出版日期:2017年05月 文件大小:10.29M 支持设备: ¥60.00在线试读 适用客户端: 言商书局 iPad/iPhone客户端:下载 An ...
- c语言程序设计资料书下载,C语言编程魔法书:基于C11标准 (陈轶著) 完整pdf高清版[20MB]...
C语言编程魔法书:基于C11标准主要讲解C11标准的语法内容,并且从整个编译.连接到加载过程都会涉及.同时在后会分别介绍GCC编译器与Clang编译器的C语言语法扩展.通过阅读本书,读者能够完全掌握新 ...
- 《C语言编程魔法书:基于C11标准》——2.9 本章小结
本节书摘来自华章计算机<C语言编程魔法书:基于C11标准>一书中的第2章,第2.9节,作者: 陈轶 更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2.9 本章 ...
- 《C语言编程魔法书:基于C11标准》——3.3 本章小结
本节书摘来自华章计算机<C语言编程魔法书:基于C11标准>一书中的第3章,第3.3节,作者 陈轶,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 3.3 本章小 ...
最新文章
- 力扣1002.查找常用字符
- linux系统yum源,Linux开启安装EPEL YUM源
- 八、爬虫解析利器 PyQuery 的使用
- element ui 二级菜单_基于avue和element-ui集成解决方案avue-cli
- GARFIELD@04-14-2005
- java填充二维数组_Java用Arrays.fill()初始化二维数组的实现
- mysql group_concat去重_mysql 数据库group_concat函数的一些用法
- 运用ffmpeg生成MP4文件
- pic系列单片机c语言编程与应用实例,PIC系列单片机C语言编程与应用实例
- 【文献翻译】基于CVSS的IT系统网络安全风险定量评估方法-A Quantitative CVSS-Based Cyber Security Risk Assessment Methodology
- WPS Office 2019 v11.8.2专业增强版
- 怎么把vob格式的视频转换成mp4格式
- 小白股市扫盲系列--美联储加息减息对市场究竟有什么影响?
- 全连接神经网络基础——正向传播及损失函数
- B2C电商网站提交订单支付流程
- C++一周学习总结(2021/05/03)
- 10nm 以一敌二 — 雷蛇灵刃潜行 2020 水银版评测
- android动态扩容数组,ArrayList 扩容 Android Java 真的不一样
- Linux 命令详解之df命令
- 数据库系统原理选择题总结