第一篇:mlx 90614的应用 单片机课程设计论文
非接触式温度计
摘要
红外测温技术在生产过程,产品质量控制和监测,设备在线故障诊断和安全保护以及节约能源等方面发挥了着重要作用。它打破了传统的测温模式,并且具备不影响被测物体温度场、温度分辨率高、回应速度快、测量精度高、测量范围广、不受测温上限的限制、稳定性好和可同时测量环境温度和目标温度的特点,测量距离可达30米左右。
红外测温近年来在医疗、家庭自动化、汽车电子、航空和军事上得到广泛的应用。
本设计的红外测温仪系统是一种方便用户使用的温度测量工具,功能稳定,运行速度快,可以作为一个简易的非接触式体温测量计使用。系统能够实时检测、显示当前环境的温度信息并具备声光报警等功能。
本系统主要是采用MLX90614红外测温传感器和AT89C51单片机来实现的,单片机通过SMbus 方式与MLX90614 进行通信,将读出的温度数据进行处理,之后驱动LCD 模块显示测量温度
关键词:红外线温度测量,MLX90614传感器,LCD12864液晶显示,AT89C51单片机
I
目录
摘要...........................................................................................................................................I 目录..........................................................................................................................................II
一、系统方案设计...........................................................................................................................1
二、硬件电路设计...........................................................................................................................2
2.1
单片机最小系统电路设计............................................................................................2
2.1.1最小系统电路..........................................................................................................2 2.1.2 晶振和复位电路...................................................................................................2 2.2 传感器电路设计.............................................................................................................4
2.2.1 MLX90614红外测温传感器介绍.......................................................................4 2.2.2
MLX90614传感器电路.....................................................................................5 2.3 液晶显示电路设计.........................................................................................................5
2.3.1
LCD液晶显示介绍............................................................................................5
三、系统软件设计.........................................................................................................................7
3.1 红外测温模块设计.........................................................................................................7
四、整体电路原理图.......................................................................................................................9
五、程序设计...................................................................................................................................9
II
一、系统方案设计
本系统采用51单片机为核心,用红外温度传感器MLX90614数据采集,数据经单片机处理后送LCD显示。该设计主要有三大模块组成、红外温度采集模块、单片机最小系统模块、LCD显示模块。系统整体框图如1.1:
MLX90614红外温度采集51最小系统LCD温度显示
图1.1 系统整体框图
二、硬件电路设计
2.1
单片机最小系统电路设计 2.1.1最小系统电路
该系统是以AT89C51单片机为核心器件,其模块的工作原理是:加载相应程序的AT89C51单片机把红外测温模块传来的数据LCD液晶显示。单片机需要一定的外接电路才能正常工作即单片机最小系统,电路如图2.1所示,其主要包括AT89C51单片机、复位电路和时钟电路。
图2.1 单片机最小系统
2.1.2 晶振和复位电路
晶振是给单片机提供工作信号脉冲的,这个脉冲就是单片机的工作速度。晶振电路用于产生单片机工作所需要的时钟信号,单片机本身就如一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格
地工作。通常在引脚XTALl和XTAL2跨接石英晶体和两个补偿电容构成自激振荡器,如图3.3中Y2、C11、C12。可以根据情况选择6MHz、12MHz或24MHz等频率的石英晶体。而单片机工作速度是每秒 11.0592M,即此次晶振选择12M,补偿电容通常选择30pF左右的瓷片电容。晶振电路如图2.2 所示。
图2.2 晶振电路
复位的条件:RST引脚的高电平只要能保持足够的时间(2个机器周期),单片机就可以进行复位操作。上电复位要求接通电源后,单片机自动实现复位操作。上电瞬间RST引脚获得高电平,随着电容的充电电流的减小,RST引脚的电位逐渐下降。当需要复位是,按下按键,利用电容放电使RST引脚为高电平,单片机复位。
上电与按键均有效的复位电路不仅在上电时可以自动复位,而且在单片机运行期间,利用按键也可以完成复位操作。复位电路如图2.3 所示。
图2.3 复位电路
2.2 传感器电路设计
2.2.1 MLX90614红外测温传感器介绍
由红外温度传感器、低噪声放大器、A/D转换器、DSP单元、脉宽调制电路及逻辑控制电路构成,热电堆输出的温度信号经过内部高性能、低噪声的运算放大器放大后,送给模数转换器(ADC),ADC输出的17位数字经过可编程FIR和IIR低通滤波器(即框图2.4中的DSP)处理后输出,该输出作为测量结果保存在MLX90614内部RAM存储单元中,可以通过SMBus读取;同时测量结果送到后级数子式脉冲宽度调制电路,将测量结果以PWM的方式输出。
图2.4 MLX90614内部的结构框图
MLX90614采用4脚罐形封装(TO239),顶端引脚分布视图如图2.5所示,具体的引脚功能如下:
图2.5 MLX90614的顶端引脚分布视图
VDD:外部电源输入; VSS:地,和外壳相连;
SCL/Vz:当MLX90614为SMBUS模式时SCL为串行输入,为PWM模式时Vz为由
外部电路置高电平;
SDA/PWM:当MLX90614为SMBUS模式时串行数据输入输出接口,为PWM模式时做为PWM波输出接口。
2.2.2
MLX90614传感器电路
MLX90614硬件电路连接如图2.6所示,传感器的SCL/VZ、PWM/SDA管脚直接连接单片机的普通I/O口,即单片机上的P1.0和P1.1并通过这两个I/O口实现单片机与传感器相互之间的数据的传输。VDD为电源引脚接+5V,VSS为地端。由于MLX90614的输入输出接口是漏级开路(OD)结构,需要加上拉电阻即图3.6中的R4和R5(10K)。
图2.6 MLX90914红外传感器电路设计
2.3 液晶显示电路设计 2.3.1
LCD液晶显示介绍
在显示电路单元的模块中,带中文字库的LCD12864是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64,内置8192个16*16点汉字和128个16*8点ASCII码字符集。利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×4行16×16点阵的汉字并完成图形显示,低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形
点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。图2.7为LCD12864芯片引脚图,其具体引脚功能如下:
图2.7 LCD12864芯片引脚
Vss:电源地(GND); Vdd:电源电压(+5V);
VO:LCD驱动电压(可调对比度),VCC和VOUT接可调电阻,中间抽头接至VO;
RS:并行模式:RS=0,指令寄存器;RS=1,数据寄存器。串行模式:片选; R/W:并行模式:R/W=0为写。R/W=1为读。串行模式:数据; E:并行模式:允许信号。串行模式:脉冲; DB0-DB7:并行模式:数据0。串行模式:不连接; PSB:并行模式:PSB=1。串行模式:PSB=0; NC:不需要连接;
RESET:复位端,低电平有效;
BLA、BLK:背光的正极、负极,接+5V、0V。
三、系统软件设计
3.1 红外测温模块设计
MLX90614 与单片机之间的数据传输通过SMBus 协议进行传输,单片机作为主设备与作为从设备的MLX90614进行通信。读、写数据的格式分别见图3.1、图3.2。其中,S 为起始位,Slave Address 为从器件地址,Wr 为写标志,Command 为命令字节,Rd 为读标志,PEC 为出错数据包,P 为停止位。
图3.1 读数据格式
图3.2 写数据格式
数据传输时序如图3.3 所示,在SCL 变为低电平300 ns后,将16 位数据分2 次传输,每次传送一个字节。每个字节都是按照高位(MSB)在前,低位(LSB)在后的格式传输,2 个字节中间的第9 个时钟为应答时钟。
图3.3 SMBus数据传输时序图
多个MLX90614可以用于一个系统中,通过地址不同区分器件,器件默认的地址为 5AH,因此在多MLX90614 系统中,需要给每个MLX90614 分配一个不同的地址。在只有一个MLX90614 的系统中,MLX90614 识别地址 00h,即在单个 MLX90614 系统中,可以使用该地址访问它。系统数据操作程序流程如图3.47 所示。每次发送完一个字节,就判断对方是否有应答,如果有应答就接着发送下一个字节;如果没有应答多次重发该字节,直到有应答,就接着发送下一个字节,如果多次重发后,仍然没有应答就结束。接收数据时,每次接收一个字节(按位接收,接收8 个位就是一个字节),向对方发送一个应答信号后,就可以继续接收下一个字节。
开始写开始条件写从地址00H写命令07H写重新开始条件写读命令读温度低字节读温度高字节读错误信息码返回
图 3.4 MLX90614数据流程图
四、整体电路原理图
图4.1整体原理图
五、程序设计
void main(){
uint Tem;uint Temh;SCK=1;SDA=1;delay(4);SCK=0;delay(1000);SCK=1;screen_initial();
//液晶初始化函数
//温度变量
dis_str(1,3,“东北农业大学”);dis_str(2,1,“温度:
C”);dis_str(3,1,“环境:
C”);while(1){
Tem=readtemp();
display(Tem);
Temh=wreadtemp();
displayw(Temh);
delay(10000);
delay(10000);
delay(10000);
delay(10000);} }
//读取温度
//显示温度
//延时再读取温度显示 10000
第二篇:单片机课程设计论文
目录
题目:巡回检测报警控制系统
第一章 实验任务及要求............1功能描述................2元件选择.......................2
第二章系统总体设计方案................3键盘控制、LED数码显示、A/D数据采集、...........4第三章详细设计..........51.硬件电路设计.............6
a.硬件系统框图............7
b.组成部分原理图...............8
2.软件设计..........8
a.软件系统组成流图............8
b.如初始化、中断程序、显示模块等子程序流图.........9
c.子程序功能说明..............9
第四章测试............10
测试方法,过程及结果等........1
1第五章总结............11
参考文献.................1
2附录.............12
关键程序代码................1
3题目:巡回检测报警控制系统设计
第一章 实验任务及要求
功能描述:设计一个多路数据采集测控系统,具有控制及显示功能:
1.对多路模拟信号进行采集,将采集到的电压值通过LED显示出来。
2.设置被测量的阈值,对被测量进行临控,当达到阈值时,启动报警(如指示灯)或启动相应的设备(如直流电机)。
3.键盘可以控制在LED上显示哪一路被测量的值。
元件选择:80C51单片机、ADC0809、HD7279、74LS37
3第二章系统总体设计方案
设计思路如下:
1.4路模拟电压信号通过4个电位器提供0-5V的电压信号。
2.选择ADC0809芯片作为A/D转换器,4路输入信号分别接到ADC0809的IN0—IN4通道,每隔一定的时间采样一次,采完一路采集下一路,4路电压循环采集。
3.利用3个LED数码管显示数据,1个数码管用来显示输入电压路数,3个数码管用来显示电压采样值。
4.选择HD7279做键盘控制,键值显示相应通道采样值。
5.延时由8051来实现。
第三章详细设计
1.硬件电路设计:根据设计思路,硬件主要利用了单片机80C51实验平台上的ADC0809模数转换器、HD7279控制键盘以及LED显示输出等模块。
a.硬件系统框图:
A/D转换器大致有三类:一是双积分A/D转换器,优点是精度高,抗干扰性好,价格便宜,但速度慢;二是逐次逼近A/D转换器,精度、速度、价格适中;三是并行A/D转换器,速度快,价格也昂贵。
实验用的ADC0809属于第二类,是八位A/D转换器。每采集一次需100uS。A/D转换结束后会自动产生EOC信号,可以采用查询EOC信号方式,也可采用EOC中断方式来确定A/D转换是否结束。
b.ADC0809原理图以及与8051的接线
HD7279键盘控制LED显示
2.软件设计4
第三篇:单片机原理及应用课程设计
智能电子钟(LCD显示)
1、设计内容及要求...............................................................................................2 1.1、设计内容..............................................................................................2 1.2、设计要求..............................................................................................2 1.3、撰写设计报告......................................................................................2
2、总体方案设计...................................................................................................2 2.1、方案图................................................................................................2 2.2、面板布置图.........................................................................................2 2.3、方案讨论.............................................................................................3 2.4、明晰任务.............................................................................................4
3、电路原理图......................................................................................................4
4、程序框图.........................................................................................................5 4.1、显示子程序流程图............................................................................5 4.2、实时时钟芯片 1302 读/写数据流程图............................................6
5、编程序................................................................................................................6
6、调试....................................................................................................................6 6.1、软件调试.............................................................................................6 6.2、仿真调试..............................................................................................7
7、自我感想............................................................................................................7
8、参考书目............................................................................................................8 附录:C 语言编程源程序.......................................................................................8 1.设计内容及要求 1.1、设计内容:
以AT89C51 单片机为核心,制作一个 LCD 显示的智能电子钟。1.2、设计要求:
(1)计时:秒、分、时、天、周、月、年。(2)闰年自动判别。
(3)五路定时输出,可任意关断(最大可到16路)。(4)时间、月、日交替显示。(5)自定任意时刻自动开/关屏
(6)计时精度:误差≤1秒/月(具有微调设置)
(7)键盘采用动态扫描方式查询。所有的查询、设置功能均由功能键K1、K2完成 1.3、撰写设计报告
单片机课程设计是以课题或项目设计方式开展的一门课程,具有较强的综合性、实践性,是工科、工程类院校或职业类院校电类专业在校生的必修课,是将单片机原理与应用课程的理论知识转变为应用技术的重要教学环节。这一环节不但能加深对单片机原理的理解,而且还能培养学生的实践动手能力,开发学生的分析、解决问题的能力。单片机课程设计环节的训练能够让学生知道单片机工程项目的制作过程,使学生尽早了解单片机系统的开发过程。
2.总体方案设计 2.1、方案图
2.2、面板布置图
2.3、方案讨论
方案一:采用实时时钟芯片
实时时钟芯片具备年、月、日、时、分、秒计时功能和多点计时功能,计时数据的更新每秒自动进行一次,不需程序干预。计算机可通过中断或查询方式读取计时数据进行显示,因此计时功能的实现无需占用 CPU 的时间,程序简单。此外,实时时钟芯片多数带有锂电池做后备电源,具备永不停止的计时功能;具有可编程方波输出功能,可用做实时测控系统的采样信号等;有的实时时钟芯片内部还带有非易失性 RAM,可用来存放需长期保存但有时也需变更的数据,由于功能完善,精度高,软件程序设计相对简单,且计时不占用 CPU 时间,因此,在工业实时测控系统中多采用这一类专用芯片来实现实时时钟功能。
方案二:软件控制
利用单片机内部的定时/计数器进行中断定时,配合软件延时实现时、分、秒的计时及秒表计时。该方案节省硬件成本,且能使设计者对单片机的指令系统能有更深入的了解,从而掌握单片机应用技术 MCS-51 汇编语言程序设计方法,因此,本系统设计采用此种软件控制方法来实现计时。而由于 Atmel 公司 的AT89C51 是一种自带 4KB Flash 存储器的低电压、高性能的 CMOS 8 位微处理器。该器件采用 Atmel 高密度非易失存储器制造技术制造,与工业标准 的MCS-51 指令集和输出引脚相兼容。AT89C51 将多功能 8 位 CPU 和闪存集成在单个芯片中,是一种高效的微控制器,使用也更方便,寿命更长,可以反复擦除 1000 次。形成了功能强大、使用灵活和具有较高性能价格比的微控制器。它的功能强大而且也比较容易购买,故本设计中所选的单片机为 AT89C51 单片机。2.4、明晰任务
采用 AT89C51 单片机作为系统的控制核心。时钟数据通过市场上流行的时钟芯片 DS1302 来获取。DS1302 是 DALLAS 公司推出的涓流充电时钟芯片,内含一个实时时钟/日历和 31 字节静态 RAM,可以通过串行接口与计算机进行通信,使得管脚数量减少。实时时钟/日历电路能够计算 2100 年之前的秒、分、时、日、星期、月、年的,具有闰年自动判断调整的能力。定时电路能够实现自定任意时刻自动开/关屏,采用 LCD LM016L 显示年、月、周、天、时、分、秒。通过按键开关实现微调,确保计时精度:误差≤1 秒/月。DS1302 时钟芯片的主要功能特性:
(1)能计算 2100 年之前的年、月、日、星期、时、分、秒的信息;每月的天数
和闰年的天数可自动调整;时钟可设置为 24 或 12 小时格式。(2)31B 的 8 位暂存数据存储 RAM。(3)串行 I/O 口方式使得引脚数量最少。
(4)DS1302 与单片机之间能简单地采用同步串行的方式进行通信,仅需 3 根线。
(5)宽范围工作电压 2.0-5.5V。
(6)工作电流为 2.0A 时,小于 300nA。
(7)功耗很低,保持数据和时钟信息时功率小于 1mW。
3.电路原理图
4.程序框图
4.1、显示子程序流程图
4.2、实时时钟芯片 1302 读/写数据流程图
5.编程序 源程序见附录部分 6.调试 6.1、软件调试
目前设计过程中容易造成元件和仪器仪表的损坏,而借助 Keil 和 Proteus进行单片机系统的开发,可以节省设计成本,提高设计速度。Keil 软件包是一个功能强大的开发平台,它包括项目管理器、CX51 编译器、AX51 宏汇编器、BL51/LX51 连接定位器、RTX51 实时操作系统、Simulator 软件模拟器及 Monitor51 硬件目标调试器。它是一种集成化程度高的文件管理编译环境,主要功能为编译 C 语言源程序,汇编程序或混合语言源程序,连接和定位目标文件和库,创建 HEX 文件,调试目标程序等。Keil 是目前最好的 51 单片机开
发工具之一。Keil 支持软件模拟仿真(Simulator)和用户目标调试(Monitor51)两种工作模式。前者不需要任何单片机硬件即可完成用户程序仿真、调试,后者利用硬件目标板中的监控程序可以直接调试目标硬件系统。Proteus 是一个完整的嵌入式系统软件、硬件设计仿真平台,它包括原理图输入系统 ISIS、带扩展的 Prospice 混合模型仿真器、动态元件库、高级图形分析模块和处理器虚拟系统仿真模型 VSM。ISIS 是 Proteus 系统的中心,具有超强的控制原理设计环境。ProteusVSM 最重要的特点是能把微处理器软件作用在处理器上,并和该处理器的任何模拟和数字元件协同仿真,仿真执行目标码就像在真正的单片机系统上运行一样,VSM CPU 模型能完整仿真 I/O 接口、中断、定时器、通用外部设备口及其他与 CPU 有关的外部设备,甚至能仿真多个处理器。6.2、仿真调试 Proteus 仿真
7.自我感想
经历过这么多天不间断的课程设计,我们有挺多感触的,从最基本上说我们看到了,也意识到了自己的不足,对于不断克服的各种阻碍也让我们体会到了课程设计的意义所在。对于只接触课本只动笔杆的我们,面临实际的设计尺寸,让我们很是尴尬,都说理论联系实际,真正到联系的时候才发现挺困难的,不过正是理论知识的各种补充才让我们能最终完成任务,然后深深地体会到理论对现实的指导作用。我们现在最缺乏的就是实际工作经验,而理论联系实践并不像我们想象的那么简单,他需要坚实的理论基础和实际工作经验。坚实的理论基础决定了我必须坚持学习新的知识新的理论,完善了自己的知识结构,才能在以后的实际中轻松面对,才能设计出更好的更有益于人们生活与工作的机械,才能跟上时代的步伐,不被淘汰。在这个一边忙着复习忙着考试又要准备课程设计的日子里,真真正正的体会到了时间的宝贵,有点像高中忙忙碌碌的生活,不过能按时完成课程设计对我们来说也是一个莫大的安慰。严谨和细心是做机械设计的必要态度,要想做好一件事,就必须一丝不苟、态度认真。俗话说:“失之毫厘,谬之千里。”在机械设计上尤其应该注意。在以后的工作中,你的很小的一个疏忽将会造成一个公司很大的损失,甚至给用户带去生命危险,而自己也会为自己的不负责任行为付出代价。再者就是设计中要严谨和细心,对于机械是不能出差错的,任何的微小误差都可能产生不可预计的后果,当然对于我们来说就是设计中要走一些弯路,而且在这个严重缺少时间又惦记回家问题的我们来说也是一个很严重的后果。不过,困难虽是难免的,但我们有信心就能并且已经战胜了困难,完成了这个无比揪心的课程设计。因为时间等各种关系设计中难免有些不足还请老师助教给予批评和帮助。
8.参考文献
《MCS-51 系列单片机原理及应用》 孙涵芳 主编 《新概念 51 单片机 C 语言教程》 郭天祥 主编 《51 单片机课程设计》 周向红 主编 《单片机原理及其应用教程》 张元良 主编 附录:C 语言编程源程序
#include
uint year_data,t;//-----sbit SCLK=P3^5;//DS1302 通讯线定义 sbit DIO=P3^6;sbit RST=P3^7;sbit speak=P0^0;sbit DS=P2^0;//595 通讯线定义 sbit SH_CP=P2^1;sbit ST_CP1=P2^2;sbit ST_CP2=P2^3;sbit ST_CP3=P2^4;sbit ST_CP4=P2^5;sbit ST_CP5=P2^6;sbit ST_CP6=P2^7;sbit ST_CP7=P3^0;sbit ST_CP8=P3^1;sbit OE1=P1^0;sbit OE2=P1^1;sbit OE3=P1^2;sbit OE4=P1^3;sbit OE5=P1^4;sbit OE6=P1^5;sbit OE7=P1^6;sbit OE8=P1^7;sbit K1=P3^2;//按键接口定义 sbit K2=P3^3;sbit K3=P3^4;sbit K4=P0^1;sbit K5=P0^2;//-----void write_595(uchar temp)//写 74HC595 一个字节 { uchar temp_595,i;temp_595=temp;for(i=0;i<8;i++)
{
SH_CP=0;
_nop_();_nop_();_nop_();if(temp_595&0x80){ DS=1;} else { DS=0;} _nop_();_nop_();_nop_();SH_CP=1;temp_595<<=1;} } //--------------void delay(uint z)//Nms 延时 { uint x,y;for(x=z;x>0;x--)for(y=112;y>0;y--);} //-------------void delaynus(uint z)//ums 延时 { uint x,y;for(x=z;x>0;x--)for(y=10;y>0;y--);} //---------------void write(uchar date)//写入 DS1302 一个字节 { uchar temp,i;RST=1;SCLK=0;temp=date;for(i=0;i<8;i++){ SCLK=0;if(temp&0x01)DIO=1;else DIO=0;SCLK=1;temp>>=1;} } //-----uchar read()//读出 DS1302 一个字节 { uchar a,temp;RST=1;for(a=8;a>0;a--){ temp>>=1;SCLK=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();SCLK=0;if(DIO){ temp=temp|0x80;} else { temp=temp|0x00;} } return(temp);} //---void write_1302(uchar add,uchar dat)//写 DS1302 数据 { RST=0;SCLK=0;RST=1;write(add);write(dat);SCLK=1;RST=0;} //----------uchar read_1302(uchar add)// 读 DS1302 数据 { uchar temp;RST=0;SCLK=0;RST=1;write(add);temp=read();SCLK=1;RST=0;return(temp);} //------------void display()//显示子程序 { miao=read_1302(0x81);//读秒 fen=read_1302(0x83);//读分
shi=read_1302(0x85)&0x3f;//读时 date=read_1302(0x87);//读日 month=read_1302(0x89);//读月 year=read_1302(0x8d);//读年 day=read_1302(0x8B);//读星期 write_595(miao);//显示秒 ST_CP1=0;ST_CP1=1;ST_CP1=0;delaynus(10);write_595(fen);//显示分 ST_CP2=0;ST_CP2=1;ST_CP2=0;delaynus(10);write_595(shi);//显示时 ST_CP3=0;ST_CP3=1;ST_CP3=0;delaynus(10);write_595(date);//显示日 ST_CP4=0;ST_CP4=1;ST_CP4=0;delaynus(10);write_595(month);//显示月 读 ST_CP5=0;ST_CP5=1;ST_CP5=0;delaynus(10);write_595(year);//显示年 ST_CP6=0;ST_CP6=1;ST_CP6=0;delaynus(10);write_595(xingqi[day]);//显示星期 ST_CP7=0;ST_CP7=1;ST_CP7=0;delaynus(10);} //----------void ds1302_init()//1302 初始化 { RST=0;SCLK=0;/* write_1302(0x80,0x00);//设置初始值 SEC write_1302(0x82,0x00);//设置初始值 MIN write_1302(0x84,0x00);//设置初始值 HR write_1302(0x86,0x00);//设置初始值 DATE write_1302(0x88,0x00);//设置初始值 MONTH write_1302(0x8A,0x00);//设置初始值 DAY */ write_1302(0x8C,0x10);//设置初始值 YEAR } //--------------void PORT_INIT()//端口初始化 { P0=0XFE;P1=0X00;P2=0X00;P3=0XFC;} void time_init()//定时器初始化 { TMOD=0x11;//设置定时 器 01 都为工作方式 1 TH0=(65536-50000)/256;//装入初值 TL0=(65536-50000)%256;TH1=(65536-10000)/256;//装入初值 TL1=(65536-10000)%256;PT0=1;//T0 定时器优先级最高 EA=1;//开总中断
ET0=1;//开定时器 0 中断 ET1=1;//开定时器 1 中断 TR0=1;//启动定时器 0 TR1=1;// 启动定时器 1 } //--------------void main(void)//主程序 { PORT_INIT();ds1302_init();time_init();year=read_1302(0x8d);//读年数据 year_data=0x2000|year;write_595(year_data>>8);//显示 2010 年的 20 字样 ST_CP8=0;ST_CP8=1;ST_CP8=0;set_shi=0x09;//闹钟初始值设定 set_fen=0x39;time_flag=0;//标志位 set=0;while(1){ switch(set){ case 0: //设置秒 { display();// 显 示 子 程 序
if((shi==set_shi)&&(fen==set_fen)&&(time_flag==0))小时和分钟 { speak=~speak;if((K2==0)&&(time_flag==0))//按键 K2 停 止闹钟响 { P0&=0XFE;time_flag=1;} delay(10);} } break;} if(fen==set_fen+1)// 当 不 按 下 闹 钟 停止按键,一分钟后自动停止闹 钟 { P0&=0XFE;time_flag=0;} } } //--------void time0()interrupt 1 // 定时 器 0 中断 { TR0=0;TH0=(65536-50000)/256;TL0=(65536-50000)%256;mun++;if(mun==15){ mun=0;switch(set){ case 1: //设置秒闪烁 {OE1=1;delay(300);OE1=0;} break;case 2: //设置分闪烁 { OE2=1;delay(300);OE2=0;} break;case 3: //设置时闪烁 { OE3=1;delay(300);OE3=0;} break;case 4: //设置日闪烁 { OE4=1;delay(300);OE4=0;} break;case 5: //设置月闪烁 { OE5=1;delay(300);OE5=0;} break;case 6: //设置年闪烁 { OE6=1;OE8=1;delay(300);OE6=0;OE8=0;} break;case 7: //设置星期闪烁 { OE7=1;delay(200);OE7=0;} break;case 8: //设置闹钟闪烁 { OE2=1;OE3=1;delay(200);OE2=0;OE3=0;} break;} } TR0=1;} //-----------void time1()interrupt 3 // 定时器 1 中断 { TR1=0;//先关定时器 TH1=(65536-20000)/256;TL1=(65536-20000)%256;//-if(K1==0){ delay(10);if(K1==0){ set++;if(set==9){ set=0;write_1302(0x80,miao);//设置初始值 SEC write_1302(0x82,fen);//设置初始值 MIN write_1302(0x84,shi);//设置初始值 HR write_1302(0x86,date);//设置初始值 DATE write_1302(0x88,month);// 设置初始值 MONTH write_1302(0x8A,day);//设置初始值 DAY write_1302(0x8C,year_data);//设置初始值 YEAR } t=50000;while((!K1)&&t){ t--;} } } //-------if(K2==0){ delay(10);if(K2==0){ switch(set){ case 1: { miao++;if((miao&0x0f)>0x09){ miao+=0x10;miao&=0xf0;} if(miao==0x60){ miao=0x00;} write_595(miao);ST_CP1=0;ST_CP1=1;ST_CP1=0;} break;case 2: { fen++;if((fen&0x0f)>0x09){ fen+=0x10;fen&=0xf0;} if(fen==0x60){ fen=0x00;} ST_CP2=0;ST_CP2=1;ST_CP2=0;} break;case 3: { if((read_1302(0x85)&0x80)==0x00){ shi++;if((shi&0x0f)>0x09){ shi+=0x10;shi&=0xf0;} if(shi==0x24)//24 小时制 { shi=0x00;} } else { shi=(shi|0x80)+1;if((shi&0x0f)>0x09){ shi+=0x10;shi&=0xf0;} if(shi==0x12)//12 小时制 { shi=0X80;} } write_595(shi);//显示时 ST_CP3=0;ST_CP3=1;ST_CP3=0;} break;case 4: { date++;if((date&0x0f)>0x09){ date+=0x10;date&=0xf0;} if((date==0x32)&&((month==0x01)||(month==0x03)||(month==0x05)||(month ==0x07)||(month==0x08)||(month==0x10)||(month==0x12))){ date=0x01;} else if((date==0x31)&&((month==0x04)||(month==0x06)||(month==0x09)||(month ==0x11))){ date=0x01;} else if((date==0x29)&&(month==0x02)&&((year_data|read_1302(0x8d))%100!=0)& &((year_data|read_1302(0x8d))%400!=0)){ date=0x01;} else if((date==0x30)&&(month==0x02)&&((year_data|read_1302(0x8d))%100==0)& &((year_data|read_1302(0x8d))%400==0)){ date=0x01;} write_595(date);ST_CP4=0;ST_CP4=1;ST_CP4=0;} break;case 5: { month++;if((month&0x0f)>0x09){ month+=0x10;month&=0xf0;} if(month==0x13){ month=0x01;} write_595(month);ST_CP5=0;ST_CP5=1;ST_CP5=0;} break;case 6: { year_data++;if((year_data&0x000f)==0x0a){ year_data+=0x0010;year_data&=0xfff0;} if((year_data&0x00ff)==0xa0){ year_data+=0x0100;//向前进 1 year_data&=0xff00;//后面尾数归 0 } write_595(year_data);ST_CP6=0;ST_CP6=1;ST_CP6=0;write_595(year_data>>8);ST_CP8=0;ST_CP8=1;ST_CP8=0;} break;case 7: { day++;if((day&0x0f)==0x08){ day=0x01;} write_595(xingqi[day]);ST_CP7=0;ST_CP7=1;ST_CP7=0;} break;} t=50000;while((!K2)&&t){ t--;} } } //-------------------------if(K3==0){ delay(10);if(K3==0){ switch(set){ case 1: { miao--;if((miao&0x0f)==0x0F){ miao&=0xf9;//减到 0 后,再减一次就归 0, } if(miao==0xF9)//当全部减到 00 时,再 减一次就为 59 { miao=0x59;} write_595(miao);ST_CP1=0;ST_CP1=1;ST_CP1=0;} break;case 2: { fen--;if((fen&0x0f)==0x0F){ fen&=0xf9;} if(fen==0xF9){ fen=0x59;} write_595(fen);ST_CP2=0;ST_CP2=1;ST_CP2=0;} break;case 3: { if((read_1302(0x85)&0x80)==0x00){ shi--;if((shi&0x0f)==0x0F){ shi&=0xf9;} if(shi==0xF9)//24 小时制 { shi=0x23;} } else { shi=(shi|0x80)-1;if((shi&0x0f)==0x0F){ shi&=0xf9;} ST_CP4=0;} break;case 5: { month--;if((month&0x0f)==0x0F){ month&=0xf9;} if(month==0x00){ month=0x12;} write_595(month);ST_CP5=0;ST_CP5=1;ST_CP5=0;} break;case 6: { year_data--;if((year_data&0x000f)==0x0F){ year_data&=0xfff9;} if((year_data&0x00f0)==0xF0){ year_data&=0xf999;} write_595(year_data);ST_CP6=0;ST_CP6=1;ST_CP6=0;write_595(year_data>>8);ST_CP8=0;ST_CP8=1;ST_CP8=0;} break;case 7: { day--;if((day&0x0f)==0x00){ day=0x07;} write_595(xingqi[day]);ST_CP7=0;ST_CP7=1;ST_CP7=0;} break;} t=50000;while((!K3)&&t)//松手检测 { t--;} } } //---switch(set){ case 8: { if(K4==0){ delay(10);if(K4==0){ if((read_1302(0x85)&0x80)==0x00){ set_shi++;if((set_shi&0x0f)>0x09){ set_shi+=0x10;set_shi&=0xf0;} if(set_shi==0x24)//24 小时制 { set_shi=0x00;} } else { set_shi=(set_shi|0x80)+1;if((set_shi&0x0f)>0x09){ set_shi+=0x10;set_shi&=0xf0;} if(set_shi==0x12)//12 小时制 { set_shi=0X80;} write_595(set_shi);// 显示闹 钟的时 ST_CP3=0;ST_CP3=1;ST_CP3=0;t=50000;while((!K4)&&t){ t--;} } } //----if(K5==0){ delay(10);if(K5==0){ set_fen++;if((set_fen&0x0f)>0x09){ set_fen+=0x10;set_fen&=0xf0;}
if(set_fen==0x60)
{
set_fen=0x00;
} write_595(set_fen);ST_CP2=0;ST_CP2=1;ST_CP2=0;t=50000;while((!K5)&&t){ t--;} } set_shi+=0x10;set_shi&=0xf0;} if(set_shi==0x12)//12 小时制 { set_shi=0X80;} write_595(set_shi);// 显示闹 钟的时 ST_CP3=0;ST_CP3=1;ST_CP3=0;t=50000;while((!K4)&&t){ t--;} } } //----if(K5==0){ delay(10);if(K5==0){ set_fen++;if((set_fen&0x0f)>0x09){ set_fen+=0x10;set_fen&=0xf0;}
if(set_fen==0x60)
{
set_fen=0x00;
} write_595(set_fen);ST_CP2=0;ST_CP2=1;ST_CP2=0;t=50000;while((!K5)&&t){ t--;} } } } } //------------------------if(((K4==0)||(K5==0))&&(set==0)){ delay(10);if(((K4==0)||(K5==0))&&(set==0)){ write_595(set_shi);//显示闹钟的时 ST_CP3=0;ST_CP3=1;ST_CP3=0;write_595(set_fen);ST_CP2=0;ST_CP2=1;ST_CP2=0;P1=0XF9;while((!K4)||(!K5));P1=0X00;} } //----------TR1=1;//退出时开定时器 } } //----------
第四篇:《单片机原理及应用》课程设计简介
《单片机原理及应用》课程设计简介
1、课程编码:1302009602、英文名称:project work for 《the principle and application of single chip computer》
3、学时/学分:
总学时:1周,学分:1学分,时间安排:第五学期
4、课程负责人:石亚和
5、课程设计主要内容简介
目的: ⑴ 配合《单片机原理及应用》课程,加强实践训练,使学生巩固理论课程所学内容,加深对原本抽象的学习内容的理解深度,达到良好的教学效果。⑵ 结合专业特点,培养学生独立科研和设计开发能力,并为以后的毕业设计打下坚实的基础。
任务: ⑴ 学生围绕教师提出的设计课题进行选择论证,确定自己的方案,做必要的实验,进行原理图设计和印刷电路板设计并完成设计图纸; ⑵写出设计说明书。
要求:⑴ 学生原则独立完成设计工作,可每2-3人为一组,各组题目不同,由2-3名教师分别指导。⑵ 课程设计期间应集中统一在确定的地点进行工作,不得缺席。学生应准备专用的笔记,记录设计期间的计算数据、所查阅的资料文献、改进措施等内容以备平时检查。实施计划:第5学期期末安排进行,提前4周在课程进行中下发设计题目并要求学生分组 完毕和进行题目初选。提前1周所有指导教师与学生见面,约定活动时间地点等项。用1 周时间完成方案论证、原理图绘制和PCB印刷电路板练习,并考虑程序流程。最后写出完 整的设计说明书。
成绩评定:工作表现、设计说明书质量和答辩验收各占三分之一。由各指导教师按5级分制分别评定,并由课题组长最终审核确认。
6、先修课程:模拟电子技术,脉冲与数字电路,单片机原理及应用
7、适用专业:测控技术及仪器
8、参考教材:《单片机原理及应用》课程设计指导书
第五篇:《单片机原理及应用》课程设计任务书(2014)
《单片机原理及应用》课程设计
任务书
一、课程设计题目
见农机111《单片机课程设计》题目分配表。
二、课程设计的基本要求
1、根据给定的题目,在规定时间内完成系统硬件电路设计、系统程序设计。具体包括:
(1)在keil IDE(μvision3)中完成应用程序设计、并编译;
(2)在Proteus 7.5下的ISIS Professional中完成电路设计、调试并仿真通过。
2、课程设计结束时需要提交的材料清单:
(1)设计说明书
设计说明书包含:设计思想和设计说明,硬件原理框图,硬件原理图与其软件配合介绍(若有),程序存储器和数据存储器的单元分配,程序流程图,源程序清单,课程设计中所有涉及到的芯片资料。
(2)图纸:硬件电路图(Proteus软件仿真通过)、仿真效果图。均用彩色A3以上幅面打印。
(3)光盘:包含上述(1)、(2)的电子版。
3、多人共同完成一个题目时,只需提交上述材料一份,格式按照贵州大学课程设计相关要求装袋,姓名填写在一起即可。但要在设计说明书中说明每个人的主要分工情况。
三、课程设计时间安排
设计时间:2014年6月30日~7月7日。
课程设计材料提交、答辩时间:7月7日下午2:30。
课程设计材料提交、答辩地点:农机系办公室(机械楼618)。
四、成绩评定方式
设计说明书:40%。硬件电路原理图:40%。答辩:20%。