题 目 : 单片机系统设计
学 院 : 信息工程学院
专 业 : 电子信息工程
班 级 :
学生姓名 :
学 号 :
指导教师 :
8月14日至8月29日共2周
课程设计任务书:
一、设计内容
设计一单片机教学实验板电路,要求实现大多数单片机实验功能,尽量简化接口管理软件的设计。在本设计中,运用STC系列单片机STCC52RC可编程芯片,经过模拟调试无误后,可以直接使用ISP软件将程序通过串口线下载到实验板上,并观察程序运行结果功能。
二、设计原始资料
(1)单片机接口设计的研究意义及国内外发展方向;
(2)单片机接口的基本特性;
(3)ECMT-1型单片机教学实验板
(4)keilμVision集成开发工具
(5)STC-ISP.exe软件
三、设计完成后提交的文件和图表
1.计算说明书部分:
(1)开题报告;
(2)设计原理比较;
(3)各集成电路原理及参数。
2、图纸部分:
(1)综合电路图;
(2)部分调用程序源代码;
五、主要参考资料
[1] 孔德任,仪表总线技术应用,北京:国防工业出版社,2005年8月
[2] 赵茂泰,智能仪器原理应用,二版,北京:电子工业出版社,2004年7月
[3] 于英民,计算机接口技术L,二版,北京:电子工业出版社,1999年10月
[4] 戚新波,检测技术与智能仪器,北京:电子工业出版社,2005年8月
[5] 张弥左,微型计算机接口技术,北京:机械工业出版社,2004年8月
[6] 高春甫,微机测控技术,北京:科学出版社,2005年
开题报告
1、单片机介绍
随着大规模集成电路的发展,组成微型计算机的各功能部件:处理器、存储器、串/并行输入输出接口、定时器/计数器、中断控制器,以及许多特殊功能单元,如:A/D、D/A转换器、高速输入输出部件、DMA、浮点运算等已集成在一块半导体芯片上,构成一完整的微型计算机——单片机。
单片机是指一个集成在一块芯片上的完整计算机系统。尽管他的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:CPU、内存、内部和外部总线系统,目前大部分还会具有外存。同时集成诸如通讯接口、定时器,实时时钟等外围设备。而现在最强大的单片机系统甚至可以将声音、图像、网络、复杂的输入输出系统集成在一块芯片上。
单片机也被称为微控制器(Microcontroller),是因为它最早被用在工业控制领域。它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。
单片机由芯片内仅有CPU的专用处理器发展而来。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬镳。
单片机比专用处理器更适合应用于嵌入式系统,因此它得到了最多的应用。事实上单片机是世界上数量最多的计算机。现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电脑配件中都配有1-2部单片机。我们现在用的全自动滚筒洗衣机、排烟罩、VCD等等的家电里面都可以看到它的身影!......它主要是作为控制部分的核心部件。而个人电脑中也会有为数不少的单片机在工作。汽车上一般配备40多部单片机,复杂的工业控制系统上甚至可能有数百台单片机在同时工作!单片机的数量不仅远超过PC机和其他计算的综合,甚至比人类的数量还要多。
它是一种在线式实时控制计算机,在线式就是现场控制,需要的是有较强的抗干扰能力,较低的成本,这也是和离线式计算机的(比如家用PC)的主要区别。
单片机是靠程序的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,这是别的器件需要费很大力气才能做到的,有些则是花大力气也很难做到的。一个不是很复杂的功能要是用美国50年代开发的74系列,或者60年代的CD4000系列这些纯硬件来搞定的话,电路一定是一块大PCB板!但是如果要是用美国70年代成功投放市场的系列单片机,结果就会有天壤之别!只因为单片机的通过你编写的程序可以实现高智能,高效率,以及高可靠性!
由于单片机对成本是敏感的,所以目前占统治地位的软件还是最低级汇编语言,很多高级的语言已经达到了可视化编程的水平,没有用的原因很简单,就是单片机没有家用计算机那样的CPU,也没有像硬盘那样的海量存储设备。一个可视化高级语言编写的小程序里面即使只有一个按钮,也会达到几十K的尺寸!对于家用PC的硬盘来讲没什么,可是对于单片机来讲是不能接受的。 单片机在硬件资源方面的利用率必须很高才行,所以汇编虽然原始却还是在大量使用。一样的道理,如果把巨型计算机上的操作系统和应用软件拿到家用PC上来运行,家用PC的也是承受不了的。 单片机历史
早期的单片机都是8位或4位的。其中最成功的是INTEL的8031,因为简单可靠而性能不错获得了很大的好评。此后在8031上发展出了MCS51系列单片机系统。基于这一系统的单片机系统直到现在还在广泛使用。随着工业控制领域要求的提高,开始出现了16位单片机,但因为性价比不理想并未得到很广泛的应用。90年代后随着消费电子产品大发展,单片机技术得到了巨大的提高。随着INTEL i960系列特别是后来的ARM系列的广泛应用,32位单片机迅速取代16位单片机的高端地位,并且进入主流市场。而传统的8位单片机的性能也得到了飞速提高,处理能力比起80年代提高了数百倍。目前,高端的32位单片机主频已经超过300MHz,性能直追90年代中期的专用处理器,而普通的型号出厂价格跌落至1美元,最高端的型号也只有10美元。当代单片机系统已经不再只在裸机环境下开发和使用,大量专用的嵌入式操作系统被广泛应用在全系列的单片机上。而在作为掌上电脑和手机核心处理的高端单片机甚至可以直接使用专用的Windows和Linux操作系统。
单片机诞生于20世纪70年代末,经历了SCM、MCU、SoC三大阶段。
1.SCM即单片微型计算机(Single Chip Microcomputer)阶段,主要是寻求最佳的单片形态嵌入式系统的最佳体系结构。“创新模式”获得成功,奠定了SCM与通用计算机完全不同的发展道路。在开创嵌入式系立发展道路上,Intel公司功不可没。
2.MCU即微控制器(Micro Controller Unit)阶段,主要的技术发展方向是:不断扩展满足嵌入式应用时,对象系统要求的各种外围电路与接口电路,突显其对象的智能化控制能力。它所涉及的领域都与对象系统相关,因此,发展MCU的重任不可避免地落在电气、电子技术厂家。从这一角度来看,Intel逐渐淡出MCU的发展也有其客观因素。在发展MCU方面,最著名的厂家当数Philips公司。
Philips公司以其在嵌入式应用方面的巨大优势,将MCS-51从单片微型计算机迅速发展到微控制器。
3.单片机是嵌入式系统的发展之路,向MCU阶段发展的重要因素,就是寻求应用系统在芯片上的最大化解决;因此,专用单片机的发展自然形成了SoC化趋势。随着微电子技术、IC设计、EDA工具的发展,基于SoC的单片机应用系统设计会有较大的发展。因此,对单片机的理解可以从单片微型计算机、单片微控制器延伸到单片应用系统。
2、单片机的应用领域
目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。
单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴:
1.在智能仪器仪表上的应用
单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。例如精密的测量设备(功率计,示波器,各种分析仪)。
2.在工业控制中的应用
用单片机可以构成形式多样的控制系统、数据采集系统。例如工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等。
3.在家用电器中的应用
可以这样说,现在的家用电器基本上都采用了单片机控制,从电饭褒、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子秤量设备,五花八门,无所不在。
4.在计算机网络和通信领域中的应用
现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上都实现了单片机智能控制,从手机,电话机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动电话,集群移动通信,无线电对讲机等。
5.单片机在医用设备领域中的应用
单片机在医用设备中的用途亦相当广泛,例如医用呼吸机,各种分析仪,监护仪,超声诊断设备及病床呼叫系统等等。
6.在各种大型电器中的模块化应用
某些专用单片机设计用于实现特定功能,从而在各种电路中进行模块化应用,而不要求使用人员了解其内部结构。如音乐集成单片机,看似简单的功能,微缩在纯电子芯片中(有别于磁带机的原理),就需要复杂的类似于计算机的原理。如:音乐信号以数字的形式存于存储器中(类似于ROM),由微控制器读出,转化为模拟音乐电信号(类似于声卡)。
在大型电路中,这种模块化应用极大地缩小了体积,简化了电路,降低了损坏、错误率,也方便于更换。
7.单片机在汽车设备领域中的应用
单片机在汽车电子中的应用非常广泛,例如汽车中的发动机控制器,基于CAN总线的汽车发动机智能电子控制器,GPS导航系统,abs防抱死系统,制动系统等等。
此外,单片机在工商,金融,科研、教育,国防航空航天等领域都有着十分广泛的用途。
3、单片机的开发过程
我们假设已设计并制作好硬件,下面就是编写软件的工作。在编写软件之前,首先要确定一些常数、地址,事实上这些常数、地址在设计阶段已被直接或间接地确定下来了。如当某器件的连线设计好后,其地址也就被确定了,当器件的功能被确定下来后,其控制字也就被确定了。然后用文本编辑器(如EDIT、CCED等)编写软件,编写好后,用编译器对源程序文件编译,查错,直到没有语法错误,除了极简单的程序外,一般应用仿真机对软件进行调试,直到程序运行正确为止。运行正确后,就可以写片(将程序固化在EPROM中)。在源程序被编译后,生成了扩展名为HEX的目标文件,一般编程器能够识别这种格式的文件,只要将此文件调入即可写片。
4、常用单片机芯片
●PIC单片机:
由美国Microchip公司推出的PIC单片机系列产品,首先采用了RISC结构的嵌入式微控制器,其高速度、低电压、低功耗、大电流LCD驱动能力和低价位OTP技术等都体现出单片机产业的新趋势。其突出的特点是体积小,功耗低,精简指令集,抗干扰性好,可靠性高,有较强的模拟接口,代码保密性好,大部分芯片有其兼容的FLASH程序存储器的芯片.
PIC输入与COMS兼容,所以PIC输出可驱动TTL或CMOS逻辑芯片。每个输出引脚可以流出或吸入20mA电流,即使一次只用了一个引脚亦是如此。
PIC16F84还有一些其它功能,如用来长期存放数据的EEPROM、定时器/计数器模块等。
PIC单片机与MCS-51系列单片机的区别:
(1)总线结构:MCS-51单片机的总线结构是冯-诺依曼型,计算机在同一个存储空间取指令和数据,两者不能同时进行;而PIC单片机的总线结构是哈佛结构,指令和数据空间是完全分开的,一个用于指令,一个用于数据,由于可以对程序和数据同时进行访问,所以提高了数据吞吐率。正因为在PIC单片机中采用了哈佛双总线结构,所以与常见的微控制器不同的一点是:程序和数据总线可以采用不同的宽度。数据总线都是8位的,但指令总线位数分别位12、14、16位。
(2)流水线结构:MCS-51单片机的取指和执行采用单指令流水线结构,即取一条指令,执行完后再取下一条指令;而PIC的取指和执行采用双指令流水线结构,当一条指令被执行时,允许下一条指令同时被取出,这样就实现了单周期指令。
(3)寄存器组:PIC单片机的所有寄存器,包括I/O口,定时器和程序计数器等都采用RAM结构形式,而且都只需要一个指令周期就可以完成访问和操作;而MCS-51单片机需要两个或两个以上的周期才能改变寄存器的内容。
●STC单片机:
是STC公司采用宏晶技术生产的单片机,具有以下优点:
(1)加密性强,很难解密或破解,解密费用很高,国内能解密的人少,一般的仿制者望而却步。
(2)超强抗干扰:高抗静电、轻松过2KV/4KV快速脉冲干扰(EFT测试)、宽电压,不怕电压抖动、款温度范围、I/O以及单片机内部的电源供电系统、时钟电路、复位电路和看门狗电路都经过特殊处理。
(3)三大降低单片机时钟对外部电磁辐射的措施:禁止ALE输出;如选6时钟/机器周期,外部时钟频率可降一半;单片机时钟振荡器增益可设为1/2Gain。
(4)超低功耗:掉电模式典型功耗<0.1μA;空闲模式典型功耗2mA;正常工作模式典型功耗4mA-7mA;掉电模式可由外部中断唤醒,适用于电池供电系统。
(5)在系统可编程,无需编程器,可远程升级。
(6)可送STC-ISP下载编程器。
(7)可供应内部集成MAX810专用复位电路的单片机。
(8)STC单片机直接替换ATMEL,PHILIPS,Winbond产品。
●EMC单片机:
是义隆公司的产品,有很大一部分与PIC 8位单片机兼容,且相兼容产品的资源相对比PIC的多,价格便宜,有很多系列可选,但抗干扰较差.
●ATMEL单片机(51单片机):
ATMEl公司的8位单片机有AT、AT90两个系列,AT系列是8位Flash单片机,与8051系列单片机相兼容,静态时钟模式;AT90系列单片机是增强RISC结构、全静态工作方式、内载在线可编程Flash的单片机,也叫AVR单片机.
ATmega8是AVR高档单片机,它的芯片内部集成了较大容量的存储器和丰富强大的硬件接口电路,具备AVR高档单片机MEGE系列的全部性能和特点,采用了小引脚封装(为DIP 28和TQFP/MLF32),所以其价格仅与低档单片机相当,再加上AVR单片机的系统内可编程特性,使得无需购买昂贵的仿真器和编程器也可进行单片机嵌入式系统的设计和开发,同时也为单片机的初学者提供了非常方便和简捷的学习开发环境。
●PHLIPIS 51PLC系列单片机(51单片机):
PHILIPS公司的单片机是基于80C51内核的单片机,嵌入了掉电检测、模拟以及片内RC振荡器等功能,这使51LPC在高集成度、低成本、低功耗的应用设计中可以满足多方面的性能要求.
PC51RD2是PHILIPS公司内核基于8位80C51单片机的派生产品,在完全保留80C51指令系统和硬件结构的大框架下,进行了多方面的加强、扩展和创新,最大限度地利用了原有结构的方方面面。
PC51RD2最显著的特点莫过于其ISP(In-System Programming,在系统可编程)功能和IAP(InAPPlication Programming,在应用可编程)功能。
ISP指电路板上的空白器件可以编程写入最终用户代码,而不需要从电路板上取下器件,已经编程的器件也可以用ISP方式擦除或再编程。
IAP指MCU可以在系统中获取新代码并对自己重新编程,即可用程序来改变程序。ISP和IAP技术是未来仪器仪表的发展方向。
PHILIPS公司为了使ISP技术和IAP技术得以推广,在芯片上免费提供了Boot ROM固件,并且巧妙地解决了固件和FLASH的地址覆盖问题及一些具体实现细节问题,使它们的实现变得简单而现成。
●HOLTEK单片机:
盛扬半导体的单片机,价格便宜,种类较多,但抗干扰较差,适用于消费类产品.
●TI公司单片机(51单片机):
德州仪器提供了TMS370和MSP430两大系列通用单片机.TMS370系列单片机是8位CMOS单片机,具有多种存储模式、多种外围接口模式,适用于复杂的实时控制场合;MSP430系列单片机是一种超低功耗、功能集成度较高的16位低功耗单片机,特别适用于要求功耗低的场合。
五、单片机的现状及发展趋势
1、单片机与嵌入式系统
嵌入式系统源于计算机的嵌入式应用,早期嵌入式系统为通用计算机经改装后嵌入到对象体系中的各种电子系统,如舰船的自动驾驶仪,轮机监测系统等。嵌入式系统首先是一个计算机系统,其次它被嵌入到对象体系中、在对象体系中实现对象要求的数据采集、处理、状态显示、输出控制等功能,由于嵌入在对象体系中,嵌入式系统的计算机没有计算机的形式及功能。单片机完全是按照嵌入式系统要求设计的,因此单片机是最典型的嵌入式系统。早期的单片机只是按嵌入式应用技术要求设计的计算机单芯片集成,故名单片机。随后,单片机为满足嵌入式应用要求不断增强其控制功能与外围接口功能,尤其是突出控制功能,因此国际上已将单片机正名为微控制器(MCU,Microcontroller Unit)。
2、单片机构成的现代电子系统将成为主流电子系统
单片机是器件级计算机系统,它可以嵌入到任何对象体系中去,实现智能化控制。小到微型机械,如手表、助听器。集成器件级的低价位,低到几元、十几元,足以使单片机普及到许多民用家电、电子玩具中去。单片机构成的现代电子系统已深入到各家各户,正改变我们的生活,如家庭中的音响、电视机、洗衣机、微波炉、电话、防盗系统、空调机等。单片机革新了原有电子系统,如微波炉采用单片机控制后,可方便地进行时钟设置、程序记忆、功率控制;空调机采用单片机后不但遥控参数设置方便,运行状态自动变换,还可实现变频控制。目前许多家用电器如VCD、DVD只有单片机出现后才可能实现其功能。
3、嵌入式系统带动了整个电子产业
目前电子元器件产业除了微处理器、嵌入式系统器件外,大多是围绕现代电子系统配套的元器件产业,例如满足人机交互用的按键,LED/LCD显示驱动、LED/LCD显示单元、语音集成器件等,满足数据采集通道要求的数字传感器、ADC、数据采集模块、信号调理模块等,满足伺服驱动控制的DAC、固体继电器、步进电机控制器、变频控制单元等,满足通信要求的各种总线驱动器、电平转换器等。
世界电子元器件在嵌入式系统带动下,沿着充分满足嵌入式应用的现代电子系统要求发展。这就使原来经典电子系统的天地愈来愈小。电子系统中的各类从业人员应尽早转向现代电子系统的康庄大道。
4、单片机带你进入智能化电子领域
若将经典电子系统当作一个僵死的电子系统,那么智能化的现代电子系统则是一个具有“生命”的电子系统。单片机应用系统的硬件结构给予电子系统“身躯”,单片机应用系统的应用程序赋予其“生命”。例如,在设计智能化仪器显示器的显示功能时,可在开机时显示系统自检结果,未进入工作时显示各种待机状态,仪器运行时显示运行过程,工作结束后可显示当前结果、自检结果、原始数据、各种处理报表等。在无人值守时,可给定各种自动运行功能。
电子系统的智能化为无止境境界,常常不需硬件资源的增添就能实现各种翻新功能。这也是当前许多家用电器功能大量增设的因素之一。
5、单片机带你进入计算机工控领域
21世纪是全人类进入计算机时代的世纪,许多人不是在制造计算机便是在使用计算机。在使用计算机的人们中,只有从事嵌入式系统应用的人才真正地进入到计算机系统的内部软、硬件体系中,才能真正领会计算机的智能化本质并掌握智能化设计的知识。从学习单片机应用技术入手是当今培养计算机应用软、硬件技术人才的最佳道路之一。
6、单片机带你进入最具魅力的电子世界
独具魅力的单片机能使你体会到电脑的真谛,你可以用单片机亲自动手设计智能玩具,可以设计不同的应用程序实现不同的功能。既有硬件制作又有软件设计,既动脑、又动手。初级水平可开发智能玩具,用宏指令编程。围绕单片机及嵌入式系统形成的电子产业的未来,将会为电子爱好者提供广阔的天地,一个比当年无线电世界更广阔、更丰富、更持久、更具魅力的电子世界。
正文:
单片机系统实验板设计
摘要:本设计的核心为STC系列单片机STC98C52。共有9个模块,分别为AD模块、DA模块、温度传感器模块、电源模块、复位模块、晶振模块、显示输出模块、矩阵键盘模块、串行通信模块。
关键字:STC98C52单片机、系统设计
第一部分 系统设计:
STC98C52单片机是一种增强型的51系列单片机,其最大的特点就是“在系统编程”(ISP)功能,还具有双数据指针,看门狗等特性。
用户编写完程序,经过模拟调试无误后,可以直接使用ISP软件将程序下载到实验板上观察程序运行结果。免去了插、拔芯片的麻烦,更主要是免去了单片机中必须的昂贵的硬件仿真器和专用编程器的开销。
系统框图如图1所示:
图1 系统框图
STCC52RC是STC公司生产的单片机,具有加密性强、超强抗干扰、超低价、超低功耗等特点。
STCC52RC引脚说明如下:
1-8:I/OP1口(P1.0-P1.7);
9:复位脚(RST/Vpd);
10-17:I/OP3口(P3.0=RXD,P3.1=TXD,P3.2=-INT0,P3.3=-INT1,P3.4=T0,P3.5=T1, P3.6=-WR,P3.7=-RD);
18、19:晶振(18=XTAL2,19=XTAL1);
20:地(Vss);
21-28:I/OP2口(P2.0-P2.7);
29:-PSEN;
30:ALE/-PROG;
31:-EA/Vpp
32-39:I/OP0口(P0.7-P0.0);
40:+5V电源。
注:引脚功能前加“-”,说明其是低电平有效。如P3.2=-INT0。
STCC52RC芯片管脚如图2所示:
图2 STCC52R管脚图
各功能模块说明如下:
1、AD模块
系统AD转换部分电路原理图如图3所示,其中AD转换芯片采用德州仪器(TI)公司的TLC0832,它是一款被广泛应用的8为AD转换器,有2路模拟输入,输入端可以软件配置成单端或差分模式;输出采用串行SPI接口,可以方便的与微控制器进行连接。
图3 AD转换模块
在上述电路中,端子J2是系统的模拟量输入端,2脚输入的模拟信号通过R1与C5组成的RC滤波电路接入AD转换器的通道0,3脚输入的模拟信号可直接接入AD转换器的通道1.另外,可以通过调节可变电阻R的大小来调节输入通道1的模拟量大小。
TLC0832实现将0-5V的模拟量转换成0x00-0Xff的数字量,单片机读取到转换的直接结果只是一个字节的二进制数,需要把它转换成对应的模拟量数值才有实际意义。默认AD转换时线性变化的,所以转换的公式可以按如下描述:
X=(D/256)*5V
其中D表示AD转换器输出的二进制数,X表示计算得到的模拟量输入电压值。
TLC0832是美国德州仪器公司生产的串行控制模数转换器,是串行I/O接口8位A/D转换器,有两个可多路选择的输入通道,与单片机或控制器通过三线接口连接。
1)芯片特点 TLC0832芯片具有以下特点:8位分辨率;5V单电源供电,基准电压为5V;输入模拟信号电压范围为0 ~ 5V;输入和输出电平与TTL和CMOS兼容;可直接和微处理器接口或使用;在250kHz时钟频率时,转换时间为32us;有两个可多路选择的模拟输入通道。
2)引脚分配
TLC0832有SOIC和DIP两种封装,DIP封装的TLC0832引脚分配如图4所示
图4 TLC0832的引脚分配图
各引脚说明如下:
(1)为片选端,低电平有效;
(2)CH0、CHI为模拟信号输入端;
(3)DI为多路器地址选择输入端;
(4)DO为模数转换结果串行输出端;
(5)CLK 为串行时钟输入端
(6)GND为电源地
(7)Vcc/REF为正电源端和基准电压输入端
2) 工作原理
(1)配置位说明
TLC0832工作时,选择哪个模拟通道,取决于输入时序中的配置位。同时,配置位也决定了输入是单端输入还是差分输入。当输入是差分时,要分配输入通道的极性;两个输入通道的任一个通道都可作为正极或负极。TLC0832的配置位逻辑表如表1所列。表1中:+表示输入通道的端点为正极性,一表示输入通道的端点为负极性,H或L表示高、低电平。输入配置位时,高位在前,低位在后。
表1 TLC0832的配置位逻辑表
配置位 | 选择通道号 | ||
CH0 | CH1 | ||
L | L | + | - |
L | H | - | + |
H | L | + | |
H | H | + |
TLC0832的工作时序如图5所示。由时序可以看出,置为低电平时,选中TLC0832,使所有逻辑电路使能。在每个时钟CLK 的上升跳变时,DI端的数据移入TLC0832内部移位寄存器。在第一个时钟期间,DI为高,表示起始位,紧接着要输入两位配置位。当输入起始位和配置位后,选通输入模拟通道,转换开始。转换开始后,先提供一个时钟,以使选定的通道稳定。TLC0832接着输出转换的数据,数据输出时先输出最高位;输出完转换的数据后,又以最低位开始重新输出一遍数据。当片选CS变高时,内部所有寄存器清零,输出变为高阻状态。如果要想再一次进行转换,片选必须要有再次从高变低的跳变,后面再输入起始位和配置位。由于DI端只在多路寻址时被检测,而此时DO端仍为高阻状态,因此DI端和DO端可以连在一起。
图5 TLC0832工作时序图
2、DA模块
系统DA转换部分电路原理如图6所示,其中DA芯片采用Mxim生产的MAX549,它是一款被广泛应用的8位DA转换器,使用SPI串行接口时序进行控制,具备2路模拟量输出,可采用2.7V-5.25V单电源供电。使用5V供电时模拟量电压输出范围为0V-5V。
图6 DA模块电路
单片机的P2.4引脚模拟SPI接口的MOSI(主输出从输入)信号,P3.6引脚模拟SPI接口的CLK(时钟)信号,实现SPI串行接口的控制。MAX549的2路模拟量输出端分别连接到输出端子CON3的1脚和2脚。
MAX549是Maxim公司出品的8位DA转换器,可提供双通道电阻分压器、双通道可变电阻或电阻分压器/可变电阻配置结构,具有超低功耗的特点。
3)DIP封装的MAX549引脚分配如图7所示
各引脚说明如下:
GND:为电源地;
OUTA和OUTB:为数模转换器输出电压的两个通道;
:为片选端,低电平有效;
DIN:串行数据输入端;
SCLK:串行时钟输入;
REF:外部参考电压输入端(2.5V~VDD)
VDD:正电源( +2.5 V至+5.5V)
图7 MAX549引脚图
4)工作原理:
MAX549的串行输入移位寄存器是16位:包括8位控制字节和8位的DAC输入数据。根据输入的控制字,可以选择不同的通道进行转换,串行接口的编辑命令如表2所示。表2 串行接口的编辑命令
控制位 | 数据位 | 命令 | ||||||||||||||
UB1 | UB2 | UB3 | C2 | C1 | C0 | A1 | A0 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 上电初始化 |
x | x | x | 0 | 0 | 0 | x | x | x | x | x | x | x | x | x | x | |
x | x | x | x | x | 1 | x | x | x | x | x | x | x | x | x | x | 无命令 |
x | x | x | 0 | 1 | 0 | 0 | 1 | 8位DAC数据 | 上升沿来选择通道A转换 | |||||||
x | x | x | 0 | 1 | 0 | 1 | 0 | 8位DAC数据 | 上升沿来选择通道B转换 | |||||||
x | x | x | 0 | 1 | 0 | 1 | 1 | 8位DAC数据 | 上升沿来选择通道A、B转换 | |||||||
x | x | x | 1 | 0 | 0 | 1 | 1 | x | x | x | x | x | x | x | x | A、B输出为0 |
x | x | x | 1 | 1 | 0 | 1 | 1 | 8位DAC数据 |
图8 MAX549工作时序图
其工作时序图如图8所示
由时序可以看出,置为低电平时,选中MAX549,在时钟CLK 的上升沿到来时,数据进入串行输入移位寄存器,首先输入八位控制字节,根据控制位字节可选择转换的通道,接着再输入八位要转换的数据位,当由低电平变为高电平时,启动D/A转换;MAX549有一个内部上电复位,转换结束后,所有内部寄存器被重置为零。
表3显示如何在计算输出电压的基础上输入代码。
表 3
8位DAC数据 | 电压输出 (V) | |||||||
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | +VREF(255/256) |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | +VREF(129/256) |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +VREF(128/256) |
0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | +VREF(127/256) |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | +VREF(1/256) |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
系统显示和输出模块包括LCD液晶显示电路,发光二极管、蜂鸣器电路,数码管显示电路和流水灯电路,电路图如图9所示。一个数码管由8个发光二极管组成,由于是共阴极,所以高电平选通。如图9.3所示,SN74ALS245A接成直通方式通过P0口驱动数码管。由74LS138对P2口译码控制SN74ALS245A驱动6个数码管的位选,剩余两路,一路接到发光二极管,另一路控制蜂鸣器,由程序进行选通控制。
图9.1 流水灯电路
图9.2 LCD液晶显示电路
图9.3 发光二极管、蜂鸣器和数码管显示电路
4、复位模块
一个芯片,尤其是可编程芯片,通常在上电的瞬间需要一个短暂的时间进行内部参数的初始化,这个时候芯片无法立即进入工作状态。通常称上电初始化这些工作为复位。在要求不高的场合,复位电路都是利用RC来制作的。
复位电路的基本功能是:系统上电时提供复位信号,直至电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时(共大于两个机器周期)才撤销复位信号,以防电源开关或电源插头分—合过程中引起抖动而影响复位。
系统采用手动按键复位方式实现系统的复位操作。在单片机运行期间,用按钮开关操作使单片机复位。手动按键复位是通过按键将电阻R2与VCC接通来实现。电路如图10所示:
图10 复位电路
5、电源模块
系统电源部分电路原理图如图11所示,电源接通时LED灯亮。
图11 电源模块电路
6、晶振模块
晶振是为电路提供频率基准的元器件,通常分为有源晶振和无源晶振两个大类,无源晶振需要芯片内部有震荡器,并且晶振的信号电压根据起振电路而定,允许不同的电压,但无源晶振通常信号质量和精度较差,需要精确的匹配外围电路,如需更换晶振时要同时更换外围电路有源晶振不需要芯片的内部振荡器,可以提供高精度的频率基准,信号质量也较无源晶振要好。实际应用中多采用无源晶振设计的电路居多。
本单片机系统晶振电路如图12。在引脚XTAL1和XTAL2跨接晶振Y和微调电容C6、C7就构成了内部震荡方式,由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成自激振荡器并产生震荡时钟脉冲。
图12 晶振模块电路
7、键盘模块
本系统矩阵键盘模块部分的电路原理图如图13所示,设计使用P1口的高四位作为矩阵键盘的列扫描信号,低四位作为行扫描信号。
图13 矩阵键盘模块电路
8、温度传感器模块
系统的温度传感器部分电路原理图如图14所示,此电路的温度传感器采用美国DALLAS公司生产的 DS18B20。
DS18B20内部结构主要由四部分组成:位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20具有以下特点:独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯;测温范围 -55℃~+125℃,固有测温分辨率0.5℃; 支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现多点测温;工作电源: 3~5V/DC;在使用中不需要任何外围元件。
图14 温度传感器模块电路
9、串行通信模块
系统串行接口部分的电路原理图如图15所示,其中MAX232是RS232接口芯片,目前 RS-232是PC机与通信工业中应用最广泛的一种串行接口。RS-232被定义为一种在低速率串行通讯中增加通讯距离的单端标准。RS-232采取不平衡传输方式,即所谓单端通讯。单片机的RXD和TXD引脚作为UAET的接收端和发送端,通过MAX232接口芯片分别连接到J5接口端子的2脚和3脚。
图15 串行通信模块电路
MAX232主要负责信号不同标准电平间的转换,很多情况下串行通信的故障都是有MAX232芯片的故障造成。根据芯片手册,MAX232在正常工作时,第2引脚CAP+应该输出+8.5V的电压,第6引脚CAP-应该输出-8.5V的电压。因此,实际工作中可以通过测量这两个引脚的工作电压是否正常来判断MAX232芯片是否正常工作。
第二部分 程序设计:
系统程序如下:
/*功能说明:按K1键:LED2和蜂鸣器交替工作;按K6键:数码管轮流全显4.02345和HELLO*/
/*按K11键:是出口自发自首程序(要将DB9旁的JP7的下面两个短接),并可在数模管上显示*/
/*按K16键启动AD和DA,并将滑动变阻器可调端的电压值在数模管上显示(将TLC0832旁的短接块短接,并调节滑动变阻器改变可调端的电压值)*/
/*除上四个键外,按其他键将在不同的数码管上显示不同的数字*/
/*单脉冲产生电路中的开关在不同的位置分别产生1和0,可作为中断源和外部计数源*/
/*脉冲产生电路可产生频率和占空比都可调的方波脉冲,也可作为中断源和外部计数。如需要也可作为一方波发生器*/
#include #include #include #define NOP _nop_() #include //unsigned char code a[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xa6,0xdb,0xcf,0xe6,0xed,0xff}; //数码管段位 unsigned char code a[6]={0x76,0x79,0x38,0x38,0x3f,0x80}; //HELLO段码 unsigned char code b[6]={0x00,0x20,0x40,0x60,0x80,0xa0}; //数码管位选 unsigned char code c[6]={0xe6,0x3f,0x5b,0x4f,0x66,0x6d}; //LED扫描显示位 unsigned char code d[4][4]={{0x3f,0x06,0x5b,0x4f},{0x66,0x6d,0x7d,0x07},{0x7f,0x6f,0xa6,0xdb},{0xcf,0xe6,0xed,0xff}}; //除四个功能键外,不同按键显示不同的数字 unsigned char code e[4][4]={{0x00,0x20,0x40,0x60},{0x80,0xa0,0x00,0x20},{0x40,0x60,0x80,0xa0},{0x00,0x20,0x40,0x60}}; //除四个功能键外,显示数字的位选 unsigned int f[3]; //数组用来放AD转换出来电压值的个位,十分位和百分位 unsigned int code g[3]={0x00,0x20,0x40}; //显示AD转换电压值的三个数码管的位选 unsigned char data t_buffer; unsigned char data r_buffer; unsigned char data ch; //AD转换返回值 unsigned char data rnum; //键盘扫描行变量 unsigned char data lnum; //键盘扫描列变量 unsigned int data temp; /*定义SPI总线*/ sbit adcs=P3^4; //用口线模拟SPI总线, sbit csda=P3^5; //sbit是位变量,定义AD和DA的SPI总线 sbit clk=P3^6; sbit addo=P3^7; sbit din=P1^4; sbit addi=P1^4; sbit a_138=P1^5; //定义3-8译码器的a,b,c sbit b_138=P1^6; sbit c_138=P1^7; /*函数声明*/ void delay(unsigned char x); //AD启动短暂延时 void DEL(unsigned int count); //大约1ms的延时子程序 void keyscan(void); //键盘扫描 unsigned int readad(void); //AD转换 void readda(); //DA转换 void adclk(void); //AD时钟 void ledscan(void); //LED扫描 void command(void); //命令处理 void led_bell(void); //LED和蜂鸣器检测 void Serial_inis(void); //串口初始化 void serial(void); //串口发送 void read_serial(void); //接收并显示 void AD_display(void); //AD电压显示 /*AD启动短暂延时*/ void delay(unsigned char x) { unsigned char data i; for(i=0;i /*1ms延时子程序*/ void DEL(unsigned int count) { unsigned char data t; while(count--!=0) { for(t=0;t<72;t++); } } /*AD启动*/ void adclk(void) { clk=1; delay(2); clk=0; delay(2); } /*AD转换*/ unsigned int readad (void) { unsigned char data i; adcs=0; adclk(); addi=1; adclk(); addi=1; adclk(); addi=1; adclk(); for(;addo==1;) { adclk(); } for(i=0;i<8;i++) { adclk(); ch=(ch<<1)|addo; } adcs=1; return(ch); } /*AD显示*/ void AD_display (void) { unsigned char l; l=0; while(l<255) { unsigned int data k_1; //电压值 unsigned int data j_1; //数码管灯显示位数 unsigned int data t_1; // 小数点后两位 unsigned int data m_1; // 整数 unsigned int data n_1; // 小数点后一位 unsigned int data p_1; // 循环次数 p_1=0; l++; temp=readad(); // 得到AD转换来的电压值,temp是8位二进制数 k_1=(int)((temp*125)/); //转换为十进制的电压值,并扩大100倍 m_1=(k_1/100); //电压值的个位 n_1=((k_1/10)%10); //电压值的十分位 t_1=((k_1%100)%10); //电压值的百分位 switch(m_1) //电压值的个位是0时,显示0.;个位是1时,显示1.;依次类推 { case 0: //电压为0-5V,所以个位只能是0,1,2,3,4,5 f[0]=0xbf; break; case 1: f[0]=0x86; break; case 2: f[0]=0xdb; break; case 3: f[0]=0xcf; break; case 4: f[0]=0xe6; break; case 5: f[0]=0xed; break; default: break; } switch(n_1) //十分位显示,0时显示0;1时显示1;2时显示2,依次类推 { case 0: f[1]=0x3f; break; case 1: f[1]=0x06; break; case 2: f[1]=0x5b; break; case 3: f[1]=0x4f; break; case 4: f[1]=0x66; break; case 5: f[1]=0x6d; break; case 6: f[1]=0x7d; break; case 7: f[1]=0x07; break; case 8: f[1]=0x7f; break; case 9: f[1]=0x6f; break; default: break; } switch(t_1) //百分位显示,同十分位显示 { case 0: f[2]=0x3f; break; case 1: f[2]=0x06; break; case 2: f[2]=0x5b; break; case 3: f[2]=0x4f; break; case 4: f[2]=0x66; break; case 5: f[2]=0x6d; break; case 6: f[2]=0x7d; break; case 7: f[2]=0x07; break; case 8: f[2]=0x7f; break; case 9: f[2]=0x6f; break; default: break; } while(p_1<500) //将电压值在数模管动态显示 { for(j_1=0;j_1<3;j_1++) { P0=f[j_1]; P1=g[j_1]; DEL(3); p_1++; } } } } /*DA转换*/ void readda (void) //DA转换,将AD转换的电压值又经过DA转换位电压值,用万用表可测得DA转换出的电压值与数码管值一致 { bit bdata bData; unsigned int data i; unsigned int data Data_h,Data_l; Data_h=0x09; //DA控制字 Data_l=temp; //DA要转换的8位二进制数 NOP; NOP; clk=0; csda=0; for(i=0;i<8;i++) { bData=Data_h&0x80; NOP; NOP; din=bData; clk=1; NOP; NOP; clk=0; Data_h=(Data_h<<1); } NOP; NOP; for(i=0;i<8;i++) { bData=Data_l&0x80; NOP; NOP; din=bData; clk=1; NOP; NOP; clk=0; Data_l=(Data_l<<1); } csda=1; } /*键盘扫描*/ void keyscan (void) { P2=0x0f; if((P2&0x0f)!=0x0f) { DEL(2); //消抖延时,确定有键按下 if((P2&0x0f)!=0x0f) //有键按下,判断行 { if(P2==0x0e) rnum=1; if(P2==0x0d) rnum=2; if(P2==0x0b) rnum=3; if(P2==0x07) rnum=4; } P2=0xf0; //有键按下,判断列 if((P2&0xf0)!=0xf0) { if(P2==0xe0) //行和列交叉即为按下的键 lnum=1; if(P2==0xd0) lnum=2; if(P2==0xb0) lnum=3; if(P2==0x70) lnum=4; } } if((rnum-lnum)==0) command(); else { P0=d[rnum-1][lnum-1]; P1=e[rnum-1][lnum-1]; DEL(1000); } } /*初始化程序*/ void Serial_inis(void) //串口初始化,波特率设置 { TMOD=0x20; SCON=0x50; TH1=0xfd; /*波特率为19200*/ TL1=0xfd; PCON=0x80; EA=1; ES=1; ET1=0; PS=1; TR1=1; } /*串口发送程序*/ void serial(void) //串口发送,没有用中断,而是用查询 { t_buffer=0x01; SBUF=t_buffer; while(TI==0); //查询数据数据发送完毕 TI=0; //中断标志位清零,为下一次发送数据准备 read_serial(); t_buffer=0x02; SBUF=t_buffer; while(TI==0); TI=0; read_serial(); t_buffer=0x03; SBUF=t_buffer; while(TI==0); TI=0; read_serial(); } /*串口接收程序及显示*/ void read_serial(void) //接收,用查询是否发送完毕 { while(RI==0); RI=0; r_buffer=SBUF; switch(r_buffer) { case 0x01: { P0=0x3f; P1=0x00; DEL(1500); } break; case 0x02: { P0=0x06; P1=0x20; DEL(1500); } break; case 0x03: { P0=0x5b; P1=0x40; DEL(1500); } break; default: break; } } /*LED和蜂鸣器检测*/ void led_bell(void) { unsigned char data i; //3-8译码器次高位选通蜂鸣器响 i=0; a_138=0; //蜂鸣器响 b_138=1; c_138=1; DEL(3000); a_138=1; //灯亮 //3-8译码器最高位选通,LED2亮 b_138=1; c_138=1; DEL(3000); } /*LED扫描显示*/ void ledscan(void) //LED动态扫描,六个数码管同时亮 { unsigned int data j; unsigned int data i=0; unsigned int data k=0; while(i<800) { for(j=0;j<6;j++) { P0=c[j]; P1=b[j]; DEL(3); i++; } } while(k<800) { for(j=0;j<6;j++) { P0=a[j]; P1=b[j]; DEL(3); k++; } } } /*按11,22,33,44显示不同功能*/ void command(void) //四个功能键的功能处理程序 { unsigned char data jcnum; jcnum=(rnum+lnum); switch(jcnum) { case 2: led_bell(); break; case 4: ledscan(); break; case 6: Serial_inis(); serial(); break; case 8: temp=readad(); readda(); AD_display(); break; default: break; } } /*主程序*/ void main(void) { while(1) { keyscan();//一直在扫描键盘,有动作即作出相应判断 } } 附加程序: 循环显示8,接着led+蜂鸣+全亮 #include unsigned char code b[8]={0x00,0x20,0x40,0x60,0x80,0xa0,0xc0,0xe0}; void DEL(unsigned int count) { unsigned char data t; while(count--!=0) { for(t=0;t<7;t++); } } void main(void) { unsigned char data f; for(f=0;f<6;f++) { P0=0x7f; P1=b[f]; DEL(4000); // 跑马 }; P0=0x00; P1=b[7]; DEL(4000); //LED P0=0x00; P1=b[6]; DEL(4000); //蜂鸣 for(f=0;f<8;f++) { for(f=0;f<6;f++) { P0=0x7f; //数字 P1=b[f]; //管位 DEL(10); }//全8 }; }*************************************************************************** 显示HELLO字段 #include unsigned char code a[6]={0x76,0x79,0x38,0x38,0x3f,0x00}; //HELLO段码 unsigned char code b[6]={0x00,0x20,0x40,0x60,0x80,0xa0}; void DEL(unsigned int count) { unsigned char data t; while(count--!=0) { for(t=0;t<7;t++); } } void main(void) { unsigned char data f; for(f=0;f<8;f++) { for(f=0;f<6;f++) { P0=0X00; //数字 P1=b[f]; //管位 DEL(10); P0=a[f]; //数字 P1=b[f]; //管位 DEL(10); } }; } 中断定拔动S1,蜂鸣 #include void bell(void) interrupt 0 { P1=0xc0; } void main(void) { EA=1; //cpu 开中断 EX0=1; //INT0 开中断 IT0=1; // 边沿触发 while(1); //等待 } 单次脉冲计数并显示 #include unsigned char code a[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; int m; m=0; void bell(void) interrupt 0 { m++; } void delay(void) { unsigned int count ; for(count=0; count<50;count++); } void main(void) { EA=1; //cpu open interrupt EX0=1; //INT0 open interrupt IT0=1; // 边沿触发 while(1) { P1=0x00; P0=0x00; delay(); P0=a[m/100000]; delay(); P1=0x20; P0=0x00; delay(); P0=a[m%100000/10000]; delay(); P1=0x40; P0=0x00; delay(); P0=a[m%10000/1000]; delay(); P1=0x60; P0=0x00; delay(); P0=a[m%1000/100]; delay(); P1=0x80; P0=0x00; delay(); P0=a[m%100/10]; delay(); P1=0xa0; P0=0x00; delay(); P0=a[m%10]; delay(); } } ***************************************************************************** 第三部分 心得体会 通过本次的单片机课程设计,我在诸多方面都得到了锻炼和提升,主要可以概括为以下几个方面: 课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,本次课程设计为期两周,回想起来,感慨良多。 刚刚着手做的时候,一点头绪都没有,感觉困难重重,不知道该从哪下手,感觉到自己对理论知识学习得还是不扎实,于是重新仔细的看了一遍课本,对课本知识进行了梳理,并与同组同学相互讨论,重新认识了单片机,又理解了一些原来没有理解的东西。 等到真正动手做的时候,又发现了课本与实际要求的东西还差很多,又到图书管借了一些其它资料,一步一步的仿照着例子做,其中遇到很多的问题,幸好有组员可以商讨,有老师可以请教,还可以到网上论坛里提问,才使得问题逐一解决。在设计过程中,我们也加了一些创新部分。当然设计还有很多不足之处,希望老师能给予批评指证. 本次课程设计,提高了我们的动手能力和思考的能力,也使我懂了理论与实际结合的重要性,只有把所学理论与实践结合起来,从理论中得出结论,从实践中发现问题,才能真正适应以后的工作。在此感谢组员的相互配合相互帮助,更感谢老师的悉心指导! 第四部分 参考资料 1、于英民. 计算机接口技术L. 电子工业出版社. 1999、10 2、清源科技. Protel 2004电路原理图及PCB设计. 机械工业出版社. 2005、1 3、高春甫. 微机测控技术. 科学出版社. 2005年 4、张毅坤. 单片微型计算机原理及应用. 西安电子科技大学出版社. 2008、5 5、谭浩强. C程序设计(第三版). 清华大学出版社. 2005、7 6、周立功. 增强型80C51单片机速成与实践. 北京航空航天大学出版社. 2003、7 附录A 本次设计的单片机系统原理图 附录A 本次设计的单片机系统原理图