基于AD转换模块的单片机仿真和C语言开发课程设计.docx
- 文档编号:23560983
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:32
- 大小:338.37KB
基于AD转换模块的单片机仿真和C语言开发课程设计.docx
《基于AD转换模块的单片机仿真和C语言开发课程设计.docx》由会员分享,可在线阅读,更多相关《基于AD转换模块的单片机仿真和C语言开发课程设计.docx(32页珍藏版)》请在冰豆网上搜索。
基于AD转换模块的单片机仿真和C语言开发课程设计
课程设计任务书
学生姓名:
专业班级:
电信0904
指导教师:
阮军工作单位:
信息工程学院
题目:
基于A/D转换模块的单片机仿真和C语言开发
初始条件:
本课程设计,要求用使用Proteus仿真软件进行系统设计与仿真。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
1、课程设计工作量:
1周内完成对系统的设计、仿真。
2、技术要求:
1)设计一种多路模拟信号采集模块,从多个通道轮流采集数据一次,并将采集的结果存放在数组中。
要求进行电路仿真实验,并使用C语言进行程序的开发。
2)要求学生主动思考,自主发挥,实现系统的特色功能。
3、查阅至少5篇参考文献。
按《武汉理工大学课程设计工作规范》要求撰写设计报告书。
全文用A4纸打印,图纸应符合绘图规范。
提交报告的主要内容:
(使用Proteus7.5sp3)
1)题目
2)仿真所完成的主要功能和特色简介——摘要(特别是自己扩展的功能,根据特色功能评优)
3)Proteus仿真的基本流程
4)所使用芯片以及引脚功能简介(需要提供对应芯片DataSheet的下载链接)
5)设计方案与工作原理,给出仿真电路图
6)实验记录与结果分析
时间安排:
1)2012年7月9日,查阅相关资料,学习设计原理。
2)2012年7月10~11日,方案选择和电路设计仿真。
3)2012年7月12日,设计说明书撰写。
4)2012年7月13日上交报告,同时进行答辩。
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
目录
一、软件介绍3
1.1、protues仿真软件3
1.2、C编译器Keil介绍3
二、总体设计4
三、硬件模块设计4
3.1、控制系统模块4
3.2、AD数据采集模块6
3.2.1、tlc2543引脚介绍6
3.2.2、TLC2543工作时序8
3.2.3、转换过程9
3.3、液晶显示模块9
3.4、键盘模块10
四、软件设计10
五、实验记录与结果分析11
5.1、仿真流程11
5.2、仿真结果12
5.3、实物测试12
六、心得体会13
七、参考文献14
附录一:
15
附录二:
16
附录三:
17
摘要:
本设计要求作出一种多路模拟信号采集模块,从多个通道轮流采集数据一次,并将数据保存于记录。
本系统采用AT89C52作为控制系统,核心器件采用TI公司的高精度12BIT,11通道一步采样AD芯片TLC2543。
分别从11路采样模拟信号,实现11路数据采集。
为了做出发挥部分的特色,这里采用按键扫描方式,选择显示的通道以及数据,用键盘操控数据采集系统。
显示部分采用LCD1602.实时根据按键的扫描情况更新采集的数据,并且显示。
关键词:
LTC2543LCD1602键盘扫描
一、软件介绍
1.1、protues仿真软件
Protues软件是来自英国Labcenterelectronics公司的EDA工具软件,Protues软件有20年的历史,在全球广泛使用。
它除了具有和其它EDA工具一样的原理布图、PCB自动或人工布线及电路仿真的功能外,其革命性的功能是,它的电路仿真是交互的,可视化的,针对微处理器的应用,还可以直接在基于原理图的虚拟原型上编程,并实现软件源码级的实时调试,如有显示及输出,还能看到运行后输入输出的效果,配合系统配置的虚拟仪器如示波器、逻辑分析仪等,可以测量仿真的波形及记录仿真数据。
在不需要硬件设备投入的情况下Proteus软件可以建立完整的电子学习设计开发环境,缩短研发周期,并且降低开发成本。
Proteus组合了高级原理布图、混合模式SPICE仿真,PCB设计以及自动布线来实现一个完整的电子设计系统。
此系统受益于多年来的持续开发,被《电子世界》在其对PCB设计系统的比较文章中评为最好产品—“TheRoutetoPCBCAD”。
Proteus产品系列也包含了我们革命性的VSM技术,用户可以对基于微控制器的设计连同所有的周围电子器件一起仿真。
用户甚至可以实时采用诸如LED/LCD、键盘、RS232终端等动态外设模型来对设计进行交互仿真。
其功能模块:
—个易用而又功能强大的ISIS原理布图工具;PROSPICE混合模型SPICE仿真;ARESPCB设计。
PROSPICE仿真器的一个扩展PROTEUSVSM:
便于包括所有相关的器件的基于微处理器设计的协同仿真。
此外,还可以结合微控制器软件使用动态的键盘,开关,按钮,LED甚至LCD显示CPU模型。
Protues主要特征:
1、支持许多通用的微控制器,如ARM,PIC,AVR,以及8051.
2、交互的装置模型包括:
LED和LCD显示,RS232终端,通用键盘
3、强大的调试工具,包括寄存器和存储器,断点和单步模式
4、IARC-SPY和KeiluVision4等开发工具的源层调试
1.2、C编译器Keil介绍
KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。
KeilSoftware公司推出的uVision4是一款可用于多种8051MCU的集成开发环境(IDE),该IDE同时也是PK51及其它开发套件的一个重要组件。
除增加了源代码、功能导航器、模板编辑以及改进的搜索功能外,uVision3还提供了一个配置向导功能,加速了启动代码和配置文件的生成。
此外其内置的仿真器可模拟目标MCU,包括指令集、片上外围设备及外部信号等。
uVision3提供逻辑分析器,可监控基于MCUI/O引脚和外设状态变化下的程序变量。
uVision4提供对多种最新的8051类微处理器的支持,包括AnalogDevices的ADuC83x和ADuC84x,以及Infineon的XC866等。
二、总体设计
本设计采用AT89C52做控制系统,利用11路通道12位高精度ADTLC2543采集数据,通过按键扫描选择控制,将采样的通道以及采用的数据实时更新在LCD1602上。
图1总体框图
三、硬件模块设计
3.1、控制系统模块
本设计控制系统采用AT89C52。
采用12M晶振,整体控制多通道数据采集显示和键盘扫描。
图2
AT89C52结构介绍:
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
3.2、AD数据采集模块
本设计为了实现高速高精度多路数据采集。
特选用TI公司的12位66kSPSADC串行输出,可编程MSB/LSB优先,可编程断电/输出数据长度,11通道的TLC2543。
TLC2543的资料PDF可从
3.2.1、tlc2543引脚介绍
TLC2543是德州仪器公司生产的12位开关电容型逐次逼近模数转换器,它具有三个控制输入端,采用简单的3线SPI串行接口可方便地与微机进行连接,是12位数据采集系统的最佳选择器件之一。
图3
AIN0~AIN10:
模拟输入端,由内部多路器选择。
对4.1MHz的I/OCLOCK,驱动源阻抗必须小于或等于50Ω;
CS:
片选端,CS由高到低变化将复位内部计数器,并控制和使能DATAOUT、DATAINPUT和I/OCLOCK。
CS由低到高的变化将在一个设置时间内禁止DATAINPUT和I/OCLOCK;
DATAINPUT:
串行数据输入端,串行数据以MSB为前导并在I/OCLOCK的前4个上升沿移入4位地址,用来选择下一个要转换的模拟输入信号或测试电压,之后I/OCLOCK将余下的几位依次输入;
DATAOUT:
A/D转换结果三态输出端,在CS为高时,该引脚处于高阻状态;当CS为低时,该引脚由前一次转换结果的MSB值置成相应的逻辑电平;EOC:
转换结束端。
在最后的I/OCLOCK下降沿之后,EOC由高电平变为低电平并保持到转换完成及数据准备传输;
VCC、GND:
电源正端、地;
REF+、REF-:
正、负基准电压端。
通常REF+接VCC,REF-接GND。
最大输入电压范围取决于两端电压差;
I/OCLOCK:
时钟输入/输出端。
3.2.2、TLC2543工作时序
TLC2543每次转换和数据传送使用16个时钟周期,且在每次传送周期之间插入CS的时序。
时序如图4所示。
图4
以MSB为前导,用CS进行12个时钟传送的工作时序如图4。
图5
从时序图可以看出,在TLC2543的CS变低时开始转换和传送过程,I/OCLOCK的前8个上升沿将8个输入数据位键入输入数据寄存器,同时它将前一次转换的数据的其余11位移出DATAOUT端,在I/OCLOCK下降沿时数据变化。
当CS为高时,I/OCLOCK和DATAINPUT被禁止,DATAOUT为高阻态。
3.2.3、转换过程
上电后,片选CS必须从高到低,才能开始一次工作周期,此时EOC为高,输入数据寄存器被置为0,输出数据寄存器的内容是随机的。
开始时,CS片选为高,I/OCLOCK、DATAINPUT被禁止,DATAOUT呈高阻状,EOC为高。
使CS变低,I/OCLOCK、DATAINPUT使能,DATAOUT脱离高阻状态。
12个时钟信号从I/OCLOCK端依次加入,随着时钟信号的加入,控制字从DATAINPUT一位一位地在时钟信号的上升沿时被送入TLC2543(高位先送入),同时上一周期转换的A/D数据,即输出数据寄存器中的数据从DATAOUT一位一位地移出。
TLC2543收到第4个时钟信号后,通道号也已收到,此时TLC2543开始对选定通道的模拟量进行采样,并保持到第12个时钟的下降沿。
在第12个时钟下降沿,EOC变低,开始对本次采样的模拟量进行A/D转换,转换时间约需10μs,转换完成后EOC变高,转换的数据在输出数据寄存器中,待下一个工作周期输出。
此后,可以进行新的工作周期。
3.3、液晶显示模块
本系统采用液晶LCD1602显示通道以及采样值。
并且实时更新新的采样数据。
以下是1602液晶引脚的接线图,中间没有接线的为数据控制端口。
液晶采用固定指令,先按照PDF连接好后再写入控制指令,设置好屏幕清除光标显示以及屏幕的移动在实物中把液晶可见度调节至最佳,将数据更新在LCD1602上,如图6。
图6
3.4、键盘模块
本题的扩展部分采用键盘控制通道以及显示通道采样值。
在程序中应用循环扫描按键,再更新相应数据。
图7
四、软件设计
本作品主要核心器件为TLC1543,用AT89C52来控制总体,并且把采样的串行数据更新在LCD1602上面,并且显示相应通道。
图8程序流程图
五、实验记录与结果分析
5.1、仿真流程
在Keil软件中编写好C语言程序,编译生成.hex文件。
图9
在Protues软件中画好电路元件图,并将连线接好。
点击AT89C52,将HEX文件导入单片机中。
图10
5.2、仿真结果
图11输入通道值
图12液晶显示采样值
5.3、实物测试
在软件模拟里面采样值与设定的电压值完全一样,没有误差下表为实物测量数据,液晶将选择的通道值以及采样回来的数据显示出来,由于精度为12位,误差很小。
表一通道0采样
设点电压/mv
0010
0100
0500
0872
0987
1023
2093
3082
4666
采样电压/mv
0010
0101
0505
0879
0987
1028
2091
3089
4658
表二通道5采样
设点电压/mv
0020
0300
0540
0772
0946
1223
2153
3652
4466
采样电压/mv
0023
0305
0533
0768
0939
1231
2157
3658
4459
表三通道9采样
设点电压/mv
0078
0098
0499
0862
0997
1013
2083
3082
3997
采样电压/mv
0075
0103
0498
0867
0993
1018
2089
3076
4002
六、心得体会
程序不是全部的,只是主函数里面的程序,还有一个TLC2543的时序。
由于我们课设成绩还没出来。
时序没有附上。
要完整程序的学弟们可以找我要,Q359494610
七、参考文献
[1]李群芳,张士军,黄建单片微型计算机与接口技术电子工业出版社2008
[2]李群芳单片机原理接口与应用清华大学出版社2005
[3]张迎新.单片微型计算机原理、应用及接口技术国防工业出版社1999
[4]高峰单片微机应用系统设计及使用技术机械工业出版社2007
[5]彭伟.单片机C语音程序设计实例基于protues仿真电子工业出版社2007
[6]郭惠单片机C语言程序设计完全自学手册电子工业出版社2008
[7]刘瑞新等单片机原理及应用教程机械工业出版社2003
[8]黄根春全国大学生电子设计竞赛教程 电子工业出版社2011
附录一:
总体电路图
附录二:
实物图
附录三:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
/*下面是引脚连接关系*/
sbitAD_EOC=P2^4;/*转换完成指示*/
sbitAD_IOCLK=P2^3;/*时钟*/
sbitAD_DATIN=P2^2;/*数据入*/
sbitAD_DATOUT=P2^1;/*数据出*/
sbitAD_CS=P2^0;/*片选*/
uintad_result;/*存各模拟通道的数据*/
sbitE=P2^7;
sbitrs=P2^6;
sbitrw=P2^5;
sbitS1=P3^0;
sbitS2=P3^1;
sbitS3=P3^2;
sbitS4=P3^3;
sbitS5=P3^4;
sbitS6=P3^5;
sbitS7=P3^6;
sbitS8=P3^7;
sbitS9=P1^5;
sbitS10=P1^6;
sbitS11=P1^7;
ucharcodezengzhen[]={"wuhanligongdaxue"};
ucharcodezengzhen1[]={"Cha:
mV"};
uinti,j;
ucharsum;
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidwrite_com(ucharcom)
{
rs=0;
rw=0;
P0=com;
E=0;
delay
(1);
E=1;
delay
(1);
E=0;
}
voidwrite_date(uchardate)
{
rs=1;
rw=0;
P0=date;
E=0;
delay
(1);
E=1;
delay
(1);
E=0;
}
voidinit()
{
E=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
voiddisplay(uintk,ucharadd)
{
uchara,b,c,d;
floatj=k*5.0/4.095;
uinti=j/1;
a=i/1000;
b=i%1000/100;
c=i%100/10;
d=i%10;
write_com(add);
write_date(a+0x30);
write_date(b+0x30);
write_date(c+0x30);
write_date(d+0x30);
delay(300);
}
/************显示程序*************/
/*主程序*/
voidscan()
{
if(S1==0)
{
delay(5);
if(S1==0)
{
while(!
S1);
sum=1;
}
}
if(S2==0)
{
delay(5);
if(S2==0)
{
while(!
S2);
sum=2;
}
}
if(S3==0)
{
delay(5);
if(S3==0)
{
while(!
S3);
sum=3;
}
}
if(S4==0)
{
delay(5);
if(S4==0)
{
while(!
S4);
sum=4;
}
}
if(S5==0)
{
delay(5);
if(S5==0)
{
while(!
S5);
sum=5;
}
}
if(S6==0)
{
delay(5);
if(S6==0)
{
while(!
S6);
sum=6;
}
}
if(S7==0)
{
delay(5);
if(S7==0)
{
while(!
S7);
sum=7;
}
}
if(S8==0)
{
delay(5);
if(S8==0)
{
while(!
S8);
sum=8;
}
}
if(S9==0)
{
delay(5);
if(S9==0)
{
while(!
S9);
sum=9;
}
}
if(S10==0)
{
delay(5);
if(S10==0)
{
while(!
S10);
sum=10;
}
}
if(S11==0)
{
delay(5);
if(S11==0)
{
while(!
S11);
sum=11;
}
}
}
voidfw()
{
write_com(0x80+0x40+2);
for(j=0;j<12;j++)
{
write_date(zengzhen1[j]);
delay(5);
}
}
voidmain(void)
{
ucharh;
uints=0;
init();
delay(23);
write_com(0x80);
for(j=0;j<16;j++)
{
write_date(zengzhen[j]);
delay(5);
}
write_com(0x80+0x40+2);
for(j=0;j<12;j++)
{
write_date(zengzhen1[j]);
delay(5);
}
while
(1)
{
if(sum==11)
{
scan();
if(sum!
=11)
{
fw();
}
}
scan();
if(sum==1)
{
for(h=0;h<15;h++)
{
ad_result=read2543(0);
while(!
AD_EOC);
s+=ad_result;
}
s=s/15;
write_com(0x80+0x40+5);
write_date(0+0x30);
display(s,0x80+0x40+7);
s=0;
}
if(sum==2)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 AD 转换 模块 单片机 仿真 语言 开发 课程设计