电子信息技术综合实训报告

竞赛题名称:基于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转换器的驱动程序的设计 实训报告...相关推荐

  1. 基于javaweb的仓库管理系统(java+springboot+layui+html+thymeleaf+mysql+实训报告)

    基于javaweb的仓库管理系统(java+springboot+layui+html+thymeleaf+mysql+实训报告) 运行环境 Java≥8.MySQL≥5.7 开发工具 eclipse ...

  2. stm32 c语言编程pdf,STM32-MCX314 基于C语言编写的STM32控制运动控制芯片MCX314的整套控制程序 - 下载 - 搜珍网...

    STM32 MCX314/例程说明(中文).txt STM32 MCX314/删除目标文件(用于打包备份).bat STM32 MCX314/修改日志.doc STM32 MCX314/圆弧-矩形.P ...

  3. C++课程设计实训_基于多态书籍信息管理系统的设计与实现、附源码、有过程截图

    C++课程设计实训_基于多态书籍信息管理系统的设计与实现.附源码,有过程截图 书籍信息管理系统的设计与实现(基于多态) 学生姓名: 学 号: 指导老师: 所 在 系: 专 业: 班 级: C++课程设 ...

  4. 《C语言编程魔法书:基于C11标准》——第一篇 预备知识篇 第1章 C魔法概览1.1 例说编程语言...

    本节书摘来自华章计算机<C语言编程魔法书:基于C11标准>一书中的第1章,第1.1节,作者: 陈轶 更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第一篇 预备 ...

  5. 《C语言编程魔法书:基于C11标准》——1.3 主流C语言编译器介绍

    本节书摘来自华章计算机<C语言编程魔法书:基于C11标准>一书中的第1章,第1.3节,作者: 陈轶 更多章节内容可以访问云栖社区"华章计算机"公众号查看. 1.3 主流 ...

  6. c语言魔法书,C语言编程魔法书:基于C11标准

    C语言编程魔法书:基于C11标准 作者:陈轶 著 出版日期:2017年05月 文件大小:10.29M 支持设备: ¥60.00在线试读 适用客户端: 言商书局 iPad/iPhone客户端:下载 An ...

  7. c语言程序设计资料书下载,C语言编程魔法书:基于C11标准 (陈轶著) 完整pdf高清版[20MB]...

    C语言编程魔法书:基于C11标准主要讲解C11标准的语法内容,并且从整个编译.连接到加载过程都会涉及.同时在后会分别介绍GCC编译器与Clang编译器的C语言语法扩展.通过阅读本书,读者能够完全掌握新 ...

  8. 《C语言编程魔法书:基于C11标准》——2.9 本章小结

    本节书摘来自华章计算机<C语言编程魔法书:基于C11标准>一书中的第2章,第2.9节,作者: 陈轶 更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2.9 本章 ...

  9. 《C语言编程魔法书:基于C11标准》——3.3 本章小结

    本节书摘来自华章计算机<C语言编程魔法书:基于C11标准>一书中的第3章,第3.3节,作者 陈轶,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 3.3 本章小 ...

最新文章

  1. 力扣1002.查找常用字符
  2. linux系统yum源,Linux开启安装EPEL YUM源
  3. 八、爬虫解析利器 PyQuery 的使用
  4. element ui 二级菜单_基于avue和element-ui集成解决方案avue-cli
  5. GARFIELD@04-14-2005
  6. java填充二维数组_Java用Arrays.fill()初始化二维数组的实现
  7. mysql group_concat去重_mysql 数据库group_concat函数的一些用法
  8. 运用ffmpeg生成MP4文件
  9. pic系列单片机c语言编程与应用实例,PIC系列单片机C语言编程与应用实例
  10. 【文献翻译】基于CVSS的IT系统网络安全风险定量评估方法-A Quantitative CVSS-Based Cyber Security Risk Assessment Methodology
  11. WPS Office 2019 v11.8.2专业增强版
  12. 怎么把vob格式的视频转换成mp4格式
  13. 小白股市扫盲系列--美联储加息减息对市场究竟有什么影响?
  14. 全连接神经网络基础——正向传播及损失函数
  15. B2C电商网站提交订单支付流程
  16. C++一周学习总结(2021/05/03)
  17. 10nm 以一敌二 — 雷蛇灵刃潜行 2020 水银版评测
  18. android动态扩容数组,ArrayList 扩容 Android Java 真的不一样
  19. Linux 命令详解之df命令
  20. 数据库系统原理选择题总结

热门文章

  1. android动态权限依赖库,动态申请app权限:郭霖大神的PermissionX库带你告别原生
  2. 计算机打字键盘怎么控制,电脑键盘打字技巧
  3. WordPress 安全漏洞
  4. 对 广义相对论 的 评价
  5. 独家 | 零基础入门优化问题
  6. 【云驻共创】初探数通网络开放可编程
  7. 小白一键重装linux系统重装,小白一键重装系统官网
  8. 抓包PC微信小程序失败解决方法
  9. 纽约Airbnb房源数据挖掘与房价预测评估模型
  10. java装饰器模式与java.io包