《哈尔滨理工大学自动化单片机课程设计.doc》由会员分享,可在线阅读,更多相关《哈尔滨理工大学自动化单片机课程设计.doc(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、单片机课程设计任务书题目:基于单片机的温度数据采集系统设计一设计要求1被测量温度范围:0500,温度分辨率为0.5。2被测温度点:4个,每2秒测量一次。3显示器要求:通道号1位,温度4位(精度到小数点后一位)。显示方式为定点显示和轮流显示。4键盘要求:(1)定点显示设定;(2)轮流显示设定;(3)其他功能键。二设计内容1单片机及电源管理模块设计。 单片机可选用AT89S51及其兼容系列,电源管理模块要实现高精密稳压输出,为单片机及A/D转换器供电。2传感器及放大器设计。 传感器可以选用镍铬镍硅热电偶(分度号K),放大器要实现热电偶输出的mV级信号到A/D输入V级信号放大。3多路转换开关及A/D
2、转换器设计。 多路开关可以选用CD4052,A/D可选用MC14433等。4显示器设计。 可以选用LED显示或LCD显示。5键盘电路设计。 实现定点显示按键;轮流显示按键;其他功能键。6系统软件设计。 系统初始化模块,键盘扫描模块,显示模块,数据采集模块,标度变换模块等。引言:在生产和日常生活中,温度的测量及控制十分重要,实时温度检测系统在各个方面应用十分广泛。消防电气的非破坏性温度检测,大型电力、通讯设备过热故障预知检测,各类机械组件的过热预警,医疗相关设备的温度测试等等都离不开温度数据采集控制系统。随着科学技术的发展,电子学技术也随之迅猛发展,同时带动了大批相关产业的发展,其应用范围也越来
3、越广泛。近年来单片机发展也同样十分迅速,单片机已经渗透到工业、农业、国防等各个领域,单片机以其体积小,可靠性高,造价低,开发周期短的特点被广泛推广与应用。传统的温度采集不仅耗时而且精度低,远不能满足各行业对温度数据高精度,高可靠性的要求。温度的控制及测量对保证产品质量、提高生产效率、节约能源、生产安全、促进国民经济的发展起到重要作用。在单片机温度测量系统中关键是测量温度,控制温度和保持温度。温度测量是工业对象的主要被控参数之一。本此题目的总体功能就是利用单片机和热敏原件实现温度的采集与读数,利用五位LED显示温度读数和所选通道号,实现热电转化,实现温度的精确测量。本设计是以Atmel公司的AT
4、89S51单片机为控制核心,通过MC14433模数转换对所测的温度进行数字量变化,且通过数码管进行相应的温度显示。采用微机进行温度检测,数字显示,信息存储及实时控制,对于提高生产效率和产品质量、节约能源等都有重要作用。目录:一、系统总体功能及技术指标的描述5二、各模块电路原理描述52.1单片机及电源模块设计5 2.2、AT89S51引脚说明7 2.3、数据采集模块设计11 2.4、多路开关12 2.5、放大器15 2.6、A/D转换器16 2.7、显示器设计21 2.8、键盘电路设计22 2.9、电路总体设计图22三、软件流程图 24四、 程序清单25五、设计总结及体会31六、参考资料32一、
5、系统总体功能及技术指标的描述1. 系统的总体功能:温度数据采集系统,实现温度的采集与读书,利用五位LED显示温度读数和所选通道号,实现热电转化的原理过程。被测量温度范围:0500,温度分辨率为0.5。被测温度点4个,每2秒测量一次。显示器要求:通道号1位,温度4位(精度到小数点后一位)。显示方式为定点显示和轮流显示,可以通过按键改变显示方式。2. 技术指标要求:1被测量温度范围:0500,温度分辨率为0.5。2被测温度点:4个,每2秒测量一次。3显示器要求:通道号1位,温度4位(精度到小数点后一位)。显示方式为定点显示和轮流显示。4键盘要求:(1)定点显示设定;(2)轮流显示设定;(3)其他功
6、能键。二、各模块电路原理描述2.1单片机及电源模块设计如图所示为AT89S51芯片的引脚图。兼容标准MCS-51指令系统的AT89S51单片机是一个低功耗、高性能CHMOS的单片机,片内含4KB在线可编程Flash存储器的单片机。它与通用80C51系列单片机的指令系统和引脚兼容。AT89S51单片机片内的Flash可允许在线重新编程,也可用通用非易失性存储编程器编程;片内数据存储器内含128字节的RAM;有40个引脚,32个外部双向输入/输出(I/O)端口;具有两个16位可编程定时器;中断系统是具有6个中断源、5个中断矢量、2级中断优先级的中断结构;震荡器频率0到33MHZ,因此我们在此选用1
7、2MHZ的晶振是比较合理的;具有片内看门狗定时器;具有断电标志POF等等。AT89S51具有PDIP、TQFP和PLCC三种封装形式8。图5.1-1 AT89S51引脚图上图就是PDIP封装的引脚排列,下面介绍各引脚的功能。 2.2、AT89S51引脚说明P0口:8位、开漏级、双向I/O口。P0口可作为通用I/O口,但须外接上拉电阻;作为输出口,每各引脚可吸收8各TTL的灌电流。作为输入时,首先应将引脚置1。P0也可用做访问外部程序存储器和数据存储器时的低8位地址/数据总线的复用线。在该模式下,P0口含有内部上拉电阻。在FLASH编程时,P0口接收代码字节数据;在编程效验时,P0口输出代码字节
8、数据(需要外接上拉电阻)。P1口:8位、双向I/0口,内部含有上拉电阻。P1口可作普通I/O口。输出缓冲器可驱动四个TTL负载;用作输入时,先将引脚置1,由片内上拉电阻将其抬到高电平。P1口的引脚可由外部负载拉到低电平,通过上拉电阻提供电流。在FLASH并行编程和校验时,P1口可输入低字节地址。在串行编程和效验时,P1.5/MO-SI,P1.6/MISO和P1.7/SCK分别是串行数据输入、输出和移位脉冲引脚。 P2口:具有内部上拉电阻的8位双向I/O口。P2口用做输出口时,可驱动4各TTL负载;用做输入口时,先将引脚置1,由内部上拉电阻将其提高到高电平。若负载为低电平,则通过内部上拉电阻向外
9、部输出电流。CPU访问外部16位地址的存储器时,P2口提供高8位地址。当CPU用8位地址寻址外部存储时,P2口为P2特殊功能寄存器的内容。在FLASH并行编程和校验时,P2口可输入高字节地址和某些控制信号。P3口:具有内部上拉电阻的8位双向口。P3口用做输出口时,输出缓冲器可吸收4各TTL的灌电流;用做输入口时,首先将引脚置1,由内部上拉电阻抬位高电平。若外部的负载是低电平,则通过内部上拉电阻向输出电流。在与FLASH并行编程和校验时,P3口可输入某些控制信号。P3口除了通用I/O口功能外,还有替代功能,如表5.3-1所示。表5.3-1 P3口的替代功能引脚符号说明P3.0RXD串行口输入P3
10、.1TXD串行口输出P3.2/INT0外部中断0P3.3/INT1外部中断1P3.4T0T0定时器的外部的计数输入P3.5T1T1定时器的外部的计数输入P3.6/WR外部数据存储器的写选通P3.7/RD外部数据存储器的读选通RST:复位端。当振荡器工作时,此引脚上出现两个机器周期的高电平将系统复位。ALE/ :当访问外部存储器时,ALE(允许地址锁存)是一个用于锁存地址的低8位字节的书粗脉冲。在Flash 编程期间,此引脚也可用于输入编程脉冲()。在正常操作情况下,ALE以振荡器频率的1/6的固定速率发出脉冲,它是用作对外输出的时钟,需要注意的是,每当访问外部数据存储器时,将跳过一个ALE脉冲
11、。如果希望禁止ALE操作,可通过将特殊功能寄存器中位地址为8EH那位置的“0”来实现。该位置的“1”后。ALE仅在MOVE或MOVC指令期间激活,否则ALE引脚将被略微拉高。若微控制器在外部执行方式,ALE禁止位无效。:外部程序存储器读选取通信号。当AT89S51在读取外部程序时, 每个机器周期 将PSEN激活两次。在此期间内,每当访问外部数据存储器时,将跳过两个信号。/Vpp:访问外部程序存储器允许端。为了能够从外部程序存储器的0000H至FFFFH单元中取指令,必须接地,然而要注意的是,若对加密位1进行编程,则在复位时,的状态在内部被锁存。执行内部程序应接VCC。不当选择12V编程电源时,
12、在Flash编程期间,这个引脚可接12V编程电压。XTAL1:振荡器反向放大器输入端和内部时钟发生器的输入端。XTAL2:振荡器反相放大器输出端9。电源模块设计在影响单片机系统可靠性的诸多因素中,电源干扰可谓首屈一指,据统计,计算机应用系统的运行故障有90以上是由电源噪声引起的。为了提高系统供电可靠性,交流供电应采用交流稳压器,防止电源的过压和欠压,直流电源抗干扰措施有采用高质量集成稳压电路单独供电,采用直流开关电源,采用DC-DC变换器。本次设计决定采用MAXim公司的高电压低功耗线性变换器MAX 1616作为电压变换,采用该器件将输入的24V电压变换为5V电压,给外围5V的器件供电。MAX
13、1616具有如下特点:1.428V电压输入范围。2.最大80uA的静态工作电流。3.3V/5V电压可选输出。4.30mA输出电流。5.2的电压输出精度。电源管理模块电路图如下:本电路采用该器件将输入的24V电压变成5V电压,给外围5V的器件供电,其中二极管D1是保护二极管,防止输入电压接反可能带来的对电路的影响和破坏。2.3、数据采集模块设计数据采集是单片机测控系统的基本电路。数据采集的对象可以是温度、压力、流量、电压等各种物理量。数据采集系统可以是复杂的控制系统的一部分,也可以是配备了显示输出的独立系统。模拟输入通道的组成:1. 传感器及放大器设计传感器是把被测的物理量(如温度,压力等)作为
14、输入参数转为电量(电流,电压,电阻等)输出。本次设计采用镍铬-镍硅热电偶(分度号K),放大器要实现热电偶输出的mV级信号到A/D输入V级信号放大。2.4、多路开关多路开关采用CD4052。多路转换开关的作用是可以利用A/D转换器进行多路模拟量的转换。利用多路开关轮流切换各被测回路与A/D转换器,以达分时享用A/D转换器的目的。CD4052的逻辑图CD4052引脚图CD4052/CC4052是一个差分4通道数字控制模拟开关,有A、B两个二进制控制输入端和INH输入,具有低导通阻抗和很低的截止漏电流。幅值为4.520V的数字信号可控制峰峰值至20V的模拟信号。例如,若V DD=+5V,VSS=0,
15、VEE=-13.5V,则05V的数字信号可控制-13.54.5V的模拟信号,这些开关电路在整个VDD-VSS和VDD-VEE电源范围内具有极低的静态功耗,与控制信号的逻辑状态无关,当INH输入端=“1”时,所有通道截止。二位二进制输入信号选通4对通道中的一通道,可连接该输入至输出。CD4052引脚功能说明引脚号符号功能1 2 4 5 IN/OUTY 通道输入/输出端11 12 14 15IN/OUTX 通道输入/输出端9 10A B地址端3OUT/INY 公共输出/输入端13OUT/INX 公共输出/输入端6INH禁止端7VEE模拟信号接地端8Vss数字信号接地端16VDD电源+2.5、放大器
16、本次设计采用TLC2712低功耗精密预算放大器,单电源供电,超低功耗,采用数字电位器X9c104和X9c504。进行信号的调零和满量程调整。信号处理模块电路2.6、A/D转换器本次设计的转换器采用MC14433。具体特点如下:MC14433是美国Motorola公司推出的单片3 1/2位A/D转换器,其中集成了双积分式A/D转换器所有的CMOS模拟电路和数字电路。具有外接元件少,输入阻抗高,功耗低,电源电压范围宽,精度高等特点,并且具有自动校零和自动极性转换功能,只要外接少量的阻容件即可构成一个完整的A/D转换器,其主要功能特性如下:1.精度:读数的0.05%1字2.模拟电压输入量程:1.99
17、9V和199.9mV两档3.转换速率:2-25次/s4.输入阻抗:大于1000M5.输入阻抗:大于1000M6.功耗:8mW(5V电源电压时,典型值)7.功耗:8mW(5V电源电压时,典型值)MC14433最主要的用途是数字电压表,数字温度计等各类数字化仪表及计算机数据采集系统的A/D转换接口。MC14433的引脚说明: 1. Pin1(VAG)模拟地,为高科技阻输入端,被测电压和基准电压的接入地。2. Pin2(VR)基准电压,此引脚为外接基准电压的输入端。MC14433只要一个正基准电压即可测量正、负极性的电压。此外,VR端只要加上一个大于5个时钟周期的负脉冲(VR),就能够复为至转换周期
18、的起始点。3. Pin3(Vx)被测电压的输入端,MC14433属于双积分型A/D转换器,因而被测电压与基准电压有以下关系: 因此,满量程的Vx=VR。当满量程选为1.999V,VR可取2.000V,而当满量程为199.9mV时,VR取200.0mV,在实际的应用电路中,根据需要,VR值可在200mV2.000V之间选取。 4. Pin4-Pin6(R1/C1,C1)外接积分元件端。次三个引脚外接积分电阻和电容,积分电容一般选0.1uF聚脂薄膜电容,如果需每秒转换4次,时钟频率选为66kHz,在2.000V满量程时,电阻R1约为470k,而满量程为200mV时,R1取27k。5. Pin7、P
19、in8(C01、C02)外接失调补偿电容端,电容一般也选0.1uF聚脂薄膜电容即可。6. Pin9(DU)更新显示控制端,此引脚用来控制转换结果的输出。如果在积分器反向积分周期之前,DU端输入一个正跳变脉冲,该转换周期所得到的结果将被送入输出锁存器,经多路开关选择后输出。否则继续输出上一个转换周期所测量的数据。这个作用可用于保存测量数据,若不需要保存数据而是直接输出测量数据,将DU端与EOC引脚直接短接即可。7. Pin10、Pin11(CLK1、CLK0)时钟外接元件端,MC14433内置了时钟振荡电路,对时钟频率要求不高的场合,可选择一个电阻即可设定时钟频率,时钟频率为66kHz时,外接电
20、阻取300k即可。若需要较高的时钟频率稳定度,则需采用外接石英晶体或LC电路,参考附图。 8. Pin12(VEE负电源端。VEE是整个电路的电压最低点,此引脚的电流约为0.8mA,驱动电流并不流经此引脚,故对提供此负电压的电源供给电流要求不高。9. Pin13(Vss)数字电路的负电源引脚。Vss工作电压范围为VDD-5VVssVEE。除CLK0外,所有输出端均以Vss为低电平基准。10. Pin14(EOC)转换周期结束标志位。每个转换周期结束时,EOC将输出一个正脉冲信号。11. Pin15(OR非)过量程标志位,当|Vx|VREF时, 输出为低电平。12. Pin16、17、18、19
21、(DS4、DS3、DS2、DS1)多路选通脉冲输出端。DS1、DS2、DS3和DS4分别对应千位、百位、十位、个位选通信号。当某一位DS信号有效(高电平)时,所对应的数据从Q0、Q1、Q2和Q3输出,两个选通脉冲之间的间隔为2个时钟周期,以保证数据有充分的稳定时间。13. Pin20、21、22、23(Q0、Q1、Q2、Q3)BCD码数据输出端。该A/D转换器以BCD码的方式输出,通过多路开关分时选通输出个位、十位、百位和千位的BCD数据。同时在DS1期间输出的千位BCD码还包含过量程、欠量程和极性标志信息,这些信息所代表的意义见下表。13. Pin24(VDD)正电源电压端。数据采集模块电路
22、如下图2.7、显示器设计五位共阳极LED显示器,段选(a-h)由P0口控制,位选由P2.2-P2.7控制。数码管由2N5401驱动。一位通道号,四位温度显示2.8、键盘电路设计键盘电路流程图:2.9、电路总体设计图系统流程图三、软件流程图 四、 程序清单 #include #define uchar unsigned char#define uint unsigned intsbit P33=P33;sbit P27=P27;sbit P26=P26;sbit P25=P25;sbit P24=P24;sbit P23=P23;sbit P22=P22;sbit cs=P35;sbit clk
23、=P21;sbit d0=P37;sbit di=P36;/MC14433控制端bit write;bit flag;bit channel;sbit sda=P34;sbit sck=P32;uint tcnt;uchar ucADC;void delay1(uint);void Delayms(unsigned char ucDelay); /延时unsigned char GetValue0832(bit Channel); /获取MC14433的转换值void Display(void); /数码管显示函数unsigned char LED= 0xC0,/*0*/0xF9,/*1*/0
24、xA4,/*2*/0xB0,/*3*/0x99,/*4*/0x92,/*5*/0x82,/*6*/0xF8,/*7*/0x80,/*8*/0x90,/*9*/;void delay();void start()/开始信号sda=1;delay();sck=1;delay();sda=0;delay();void stop()/结束信号sda=0;delay();sck=1;delay();sda=1;delay();void respons()/应答uchar i;sck=1;delay();while(sda=1)&i250)i+;sck=0;delay();void init()/初始化
25、sda=1;delay();sck=1;delay();void write_byte(uchar date)/写字节uchar i,temp;temp=date;for(i=0;i8;i+) temp=temp1;sck=0;delay();sda=CY;delay();sck=1;delay();sck=0;delay();sda=1;delay();uchar read_byte()/读字节uchar i,k;sck=0;delay();sda=1;delay();for(i=0;i8;i+) sck=1;delay();k=(k1)|sda;sck=0;delay();return k
26、;void write_add(uchar address,uchar date)/写入外存储器中start();write_byte(0xa0);respons();write_byte(address);respons();write_byte(date);respons();stop();uchar read_add(uchar address)/从外存储器中读出数据uchar date;start();write_byte(0xa0);respons();write_byte(address);respons();start();write_byte(0xa1);respons();d
27、ate=read_byte();stop();return date;void display2(uchar a,uchar b)/显示通道的函数 P23=0;P0=LEDa;/Delayms(5);delay1(200);P23=1;P22=0;P0=LEDb;/Delayms(5);delay1(200);P22=1;uint keyscan() uchar temp; P33=0;temp=P2&0xf0;if(temp!=0xf0)Delayms(10);temp=P2&0xf0;if(temp!=0xf0)switch(temp)case 0x70:return 1;break;ca
28、se 0xb0:return 2;break;case 0xd0:return 3;break;case 0xe0:return 4;break;/主函数void main( void)uint num;write=0;flag=0;channel=0;init();ucADC=read_add(2);TMOD=0x01;ET0=1;EA=1;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;while(1)num=keyscan();switch(num)case 1:channel=0; break;case 2:channel=1; br
29、eak;case 3:flag=1;break;case 4:flag=0;break;ucADC = GetValue0832(channel);Display();display2(channel,1);if(write=1)write=0;write_add(2,ucADC);void t0() interrupt 1/定时器0 TH0=(65536-50000)/256; TL0=(65536-50000)%256; tcnt+;if (tcnt=100) tcnt=0; write=1; if(flag=1) channel=channel; unsigned char GetVal
30、ue0832(bit Channel)/AD转换后的数据unsigned char i,data1=0,data2=0;clk=0;d0=1;di=1;cs=0;/cs=0时MC14433有效clk=1;/delay();clk=0;/第一个脉冲,开始位d0=1;di=1;clk=1;/delay();clk=0;/第二个脉冲,模式选择di=Channel;d0=channel;/通道选择clk=1;/delay();clk=0; /第三个脉冲,通道选择d0=1;di=1;for(i=0;ii;for(i=0;i8;i+) /第二次从低到高读数,下降沿有效if(d0=1&di=1)data2|
31、=0x01 0;ucDelay-)for(i = 112;i 0;i-);void delay1(uint z)while(-z);五、设计总结及体会在基于单片机的温度采集系统的设计过程中,通过在网上查找各种资料我了解和初步掌握了Altim designer 6,visio软件的用法,MC14433,MAX1616,74LS273及电源模块的设计和使用。数码管和键盘的扫描利用,A/D转换设计,显示器设计,系统软件设计,进一步巩固了所学的单片机知识。本次设计将我以前所学习的知识进一步加以融合,重新有了一个清晰而又深刻的认识。经过本次设计,我深深认识到自学的重要性,和对所学知识及互联网上知识资源的利用。我通过本次设计还体会到了团结合作的力量,彼此探讨芯片功能,软件的互相指导使得经过本次设计我有了很大的收获。最后要感谢仲老师的指导和同学的帮助,在以后的学习实践中我会更加努力,学以致用,努力提高自己的动手能力。六、参考资料1. 李全利,单片机原理及接口技术,高等教育出版社,20042. 于永,51单片机常用模块与综合系统设计实例精讲,电子工业出版社,2007