




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机原理及应用课程设计课题: 单片机多功能系统设计班级 学号 学生姓名 专业 系别 电子与电气工程学院 指导教师 电子与电气工程学院年 月一、课程设计目的单片机原理及应用课程设计是一项重要的实践性教育环节,是学生在校期间必须要接受的一项工程训练。在课程的设计过程中,在教师的指导下,运用工程的方法,通过一个简单的课题的设计练习,可使学生初步体验单片机应用系统的设计过程、设计要求、完成的工作内容和具体的设计方法,了解必须提交的各项工程文件,也达到巩固、充实和综合运用所学知识解决具体问题的目的。 通过课程设计,应能加强学生如下能力的培养:(1) 独立工作能和创造能力;(2) 综合运用专业及基础知识,解决实际工程技术问题的能力;(3) 查阅图书资料、产品手册和各种工具书的能力;(4) 工程绘图的能力;(5) 编写技术报告和编制技术资料的能力。二、设计内容本次课程设计主要以单片机为基础,进行单片机软件编程,目的是为了提高学生的软件编程和系统设计能力,整个设计系统包括两个部分,硬件及软件部分,硬件部分已经制作成功,学生只需要掌握其原理和焊接相应的元器件,掌握元器件的辨别和元器件的作用以及应用场所即可,另外对所焊接的电路还需要进行仔细的检查,判断是否有焊接错误的地方或者短路的地方,对出现的异常情况要能够根据现象判别原因,并具备解决问题的能力,从而切实提高学生的硬件电子电路的分析、判断能力。 软件编程是本次课程设计的重要环节。在为期两周的工程实践中,将占据主要时间,学生要完成的软件编程任务主要包括以下几点: 1)、熟悉Keil C51编程平台及相关编程软件 2)、编写、调试蜂鸣器、继电器动作、方波程序并进行软硬件联调 3)、编写、调试LED流水灯(循环显示)程序并进行软硬件联调 4)、编写、调试键盘扫描子程序并进行软硬件联调 5)、编写、调试数码管动态扫描程序并进行软硬件联调 6)、电子钟设计(包括键盘、时钟、显示等) 7)、温度测量控制系统设计(包括键盘、显示、控制、报警等) 其中前五个内容是后两个内容的基础,主要是编制一些子程序,为后继的整个系统设计打下基础。 电子钟设计一个简单的单片机编程设计,要求电子钟软件程序必须具备键盘扫描、数码管显示、时钟以及日历、秒表和闹钟功能。 温度测量与控制系统设计是一种非常简单而又应用普遍的温度控制系统、包括温度采集、信号转换、单片机处理以及控制、报警等部分。三、总体设计3.1 系统硬件结构总框图设计图1 原理总框图3.2 总体电路设计图2 设计总电路图如上图所示,电路总的模块包括4个部分:单片机芯片AT89C52,数码管显示,蜂鸣器和LED显示部分,电路总体功能是利用开关控制各部分电路功能的运行,当按下KEY1时,利用编程使单片机输出地址信号控制流水灯的显示顺序;当按下KEY2时,则使蜂鸣器发出事先编好的音乐;当按下KEY3和KEY4时,通过P0口输出信号,通过译码,在数码管上显示日期和时间。四、单元电路设计硬件设计涉及的模块有:循环显示电路、蜂鸣器、数码管显示、时钟模块、继电器模块。4.1 循环显示电路图3 循环显示电路流水灯由单片机的P1口控制。当P1口的引脚变为低电平时,相应的LED灯管发光。通过修改程序可使得IO口电平依次变为低电平后少许时刻再变为高电平,这样就可以实现流水灯效果。改变延时时间,可以改变流水灯的流动速度。 图中D1-D8为发光二极管,R1-R8为限流电阻。发光二极管在电流范围内都能正常发光。则限流电阻,一般发光二极管取,假设单片机低电平输出能力足够强,即,则。按实际器材条件,选择限流电阻为330。4.2 蜂鸣器电路图4 蜂鸣器电路 SPEAK(P3.5)信号控制器件Q1开通关断,使得有源蜂鸣器发声或不发声。Q1为PNP型三极管,则基极电阻。其中参数,。则,为了保证三极管工作在开关状态,可适量减小,现取。三极管的基极经过限流电阻R11后由单片机的I/O控制,当输出高电平时,三极管Q1截止,没有电流流过线圈,蜂鸣器不发声;当输出低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。4.3 数码管显示电路 图5 数码管显示电路显示电路是系统人机接口的重要组成部分。该系统中采用动态显示的方法来驱动四位数码管显示。数码管为共阳型,所以字形段码为阴码。显示驱动电路如图5所示。只要在段码输入端输入对应的阴码,再从DR1-DR4的位码信号中给出要显示内容的数码管的选择信号,便可在对应的数码管中按对应段码显示内容。R13-R20为限流电阻。三极管饱和开通时,集电极发射极之间电压,数码管的压降,数码管的工作电流。则限流电阻可这样计算获得:。现取。4.4 DSI302时钟模块图7 DSI302时钟模块DS1302的RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向)。SCLK始终是输入端。五、软件设计5.1 器件及其功能介绍5.1.1 MAX232的引脚及功能图8 MAX232的引脚及内部结构 MAX232是一种把电脑的串行口rs232信号电平(-10,+10v)转换为单片机所用到的TTL信号点平(0,+5)的芯片。5.1.2 AT89C52引脚及功能图9 AT89C52引脚及外接电路AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元。 AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。5.2 流程图5.3 程序代码14T_RST Bit P3.4 ;实时时钟复位线引脚T_CLK Bit P3.2 ;实时时钟线引脚T_IO Bit P3.3 ;实时时钟数据线引脚SECOND EQU 30h ;定义时间存储单元MINUTE EQU 31HHOUR EQU 32HDAY EQU 33HMONTH EQU 34HORG 0000H AJMP startORG 001bHLJMP intt1ORG 0100H ;定义程序块的起始地址start:MOV P1,#0F0H ;单片机按键口置位 MOV A,P1 MOV B,A LCALL DELAY ;调用DELAY延时程序 MOV A,P1 CJNE A,B,d0 ;判断是否有键按下,没有转移 CJNE A,#0E0H,K1 ;判断KEYA键是否按下,没有转移 LJMP reba ;KEYA键按下,执行流水灯程序K1:CJNE A,#0D0H,k2;判断KEYB键是否按下 LJMP KEY1K2:CJNE A,#0B0H,k3;判断KEYC键是否按下 LJMP KEY3K3: CJNE A,#70H,d0;判断KEYD键是否按下 LJMP KEY4 d0: AJMP START ;循环执行主程序;-;delay延时子程序DELAY: MOV R6,#2 DL1: MOV R5,#250dl2: mov r3,#250 djnz r3,$ DJNZ R5,dl2 DJNZ R6,DL1 RETst: ljmp startREBa: mov r2,#1 MOV R1,#8 ;设置流水灯个数 MOV A,#0FeH ;使第一个LED发光LOOP0A:MOV P2,A RL A ;使LED左循环发光LCALL DELAYjnb P1.4,stDJNZ R1,LOOP0A;循环完,执行下面程序 DJNZ R2,rebakey1: mov r2,#1REBb: MOV R1,#8 MOV A,#0FeHLOOP0B:MOV P2,A RR A ;使LED右循环发光 LCALL DELAY jnb P1.4,st DJNZ R1,LOOP0B DJNZ R2,kejia: inc minute ljmp chke: MOV SP,#60H ;修改堆栈MOV SECOND,#45H ;初始时间设为09:10:55 MOV MINUTE,#30H MOV HOUR,#09HMOV DAY,#28h ;初始日期设为09年6月28日 MOV MONTH,#06 ch: LCALL SETDS1302 LCALL GET1302 LCALL DISPLAY MOV R3,#25 MOV TMOD,#01H MOV TH0,#70H ;置定时器初值(定时40ms) MOV TL0,#00H SETB TR0 ;启动定时器0LP1: JBC TF0,LP2 ;查询计数溢出 SJMP LP1 ;未到40 ms继续计数LP2: MOV TH0,#070H ;重新置定时器初值 MOV TL0,#00H jnb P1.5,key1 jnb p1.6,jia LCALL DISPLAY ;显示 DJNZ R3,LP1 ;未到1 S继续循环 LCALL GET1302 ;每过1s从DS1302读取一次时间 mov r3,#25 SJMP lp1;数码显示子程序DISPLAY: MOV DPTR,#table1;显示秒 MOV P1,#11110111b MOV A,second ANL A,#0FH MOVC A,A+DPTR MOV P0,A LCALL DIS_DELAY MOV P1,#11111011b MOV A,second SWAP A ANL A,#07H MOVC A,A+DPTR MOV P0,A LCALL DIS_DELAY;显示分 MOV P1,#11111101b MOV A,minute ANL A,#0FH MOVC A,A+DPTR MOV P0,A LCALL DIS_DELAY MOV P1,#11111110b MOV A,minute SWAP A ANL A,#03H MOVC A,A+DPTR MOV P0,A LCALL DIS_DELAY RET DIS_DELAY: PUSH PSW MOV R7,#10D1: MOV R6,#248D2: DJNZ R6,$ DJNZ R7,D1 POP PSW RET;-;音乐子程序key2:MOV SP,#60H ;堆栈指针设置 MOV TMOD,#10H ;初始化定时器及中断 SETB ET1 ;开定时器1中断 SETB EA SETB TR1 ;启动定时器1 MOV R6,#10START0:clr p3.4 MOV 30H,#00HNEXTT:MOV A,30H MOV DPTR,#TABLE0 ;从TABLE0中读取数据-声响时间 MOVC A,A+DPTR MOV R2,A JZ ENDD ANL A,#0FH ;高四位置零,用于读取地四位的值 MOV R5,A MOV A,R2 SWAP A ANL A,#0FH JNZ SING CLR TR1 AJMP DD1SING:DEC A ;调整指针用于读取下一位数据 MOV 22H,A RL A MOV DPTR,#TABLE01 ;从TABLE01中读取数据-声调 MOVC A,A+DPTR MOV TH1,A MOV 21H,A MOV A,22H RL A INC A MOVC A,A+DPTR MOV TL1,A MOV 20H,A SETB TR1DD1: LCALL DELAY1 ;声音延时 INC 30H AJMP NEXTTENDD:CLR TR1 DJNZ R5,START00START00: LJMP key3INTT1:PUSH PSW ;定时器1中断服务程序 PUSH ACC MOV TL1,20H ;定时初值的设定 MOV TH1,21H cpl p3.4 POP ACC POP PSW RETIDELAY1: MOV R6,#3 DL10: MOV R5,#250 dl20: mov r3,#250 djnz r3,$ DJNZ R5,dl20 DJNZ R6,DL10 RET;;显示日期rb:ljmp key4stab:ljmp reba;*日月*KEY3:MOV SP,#60H ;修改堆栈 MOV SECOND,#55H ;初始时间设为09:10:55 MOV MINUTE,#10H MOV HOUR,#09H MOV DAY,#28h ;初始日期设为09年6月28日 MOV MONTH,#06 LCALL SETDS1302 LCALL GET1302 LCALL DISPLAYb MOV R3,#25 MOV TMOD,#01H MOV TH0,#70H;置定时器初值(定时40ms) MOV TL0,#00H SETB TR0 ;启动定时器0LPa: JBC TF0,LPb ;查询计数溢出 SJMP LPa ;未到40 ms继续计数LPb: MOV TH0,#070H ;重新置定时器初值 MOV TL0,#00H jnb p1.7,rb LCALL DISPLAYb ;显示 DJNZ R3,LPa ;未到1 S继续循环 LCALL GET1302 ;每过1s从DS1302读取一次时间 mov r3,#25 SJMP lpa ;数码显示子程序DISPLAYb: MOV DPTR,#table1;显示日 MOV P1,#11110111b MOV A,day ANL A,#0FH MOVC A,A+DPTR MOV P0,A LCALL DIS_DELAY MOV P1,#11111011b MOV A,day SWAP A ANL A,#07H MOVC A,A+DPTR MOV P0,A LCALL DIS_DELAY;显示月 MOV P1,#11111101b MOV A,month ANL A,#0FH MOVC A,A+DPTR MOV P0,A LCALL DIS_DELAY MOV P1,#11111110b MOV A,month SWAP A ANL A,#03H MOVC A,A+DPTR MOV P0,A LCALL DIS_DELAY RET ;显示时分jiab: inc hoursab: ljmp rebakey4: MOV SP,#60H ;修改堆栈 MOV MINUTE,#00H ;初始时间 MOV HOUR,#00H MOV DAY,#16h ;初始日期 MOV MONTH,#06 LCALL SETDS1302 LCALL GET1302 LCALL DISPLAY MOV R3,#25 MOV TMOD,#01H MOV TH0,#70H ;置定时器初值(定时40ms) MOV TL0,#00H SETB TR0 ;启动定时器0L0P1: JBC TF0,L0P2 ;查询计数溢出 SJMP L0P1 ;未到40 ms继续计数L0P2: MOV TH0,#070H ;重新置定时器初值 MOV TL0,#00H jnb P1.4,sab jnb p1.6,jiabxh0: LCALL DISPLAY1 ;显示 DJNZ R3,L0P1 ;未到1 S继续循环 LCALL GET1302 ;每过1s从DS1302读取一次时间 mov r3,#25 SJMP l0p1;数码显示子程序DISPLAY1:MOV DPTR,#table1 MOV P1,#11110111b MOV A,minute ANL A,#0FH MOVC A,A+DPTR MOV P0,A LCALL DIS_DELAY MOV P1,#11111011b MOV A,minute SWAP A ANL A,#07H MOVC A,A+DPTR MOV P0,A LCALL DIS_DELAY;显示时 MOV P1,#11111101b MOV A,hour ANL A,#0FH MOVC A,A+DPTR MOV P0,A LCALL DIS_DELAY1 MOV P1,#11111110b MOV A,hour SWAP A ANL A,#07H MOVC A,A+DPTR MOV P0,A LCALL DIS_DELAY1 RET DIS_DELAY1: PUSH PSW MOV R7,#10D11: MOV R6,#248D21: DJNZ R6,$ DJNZ R7,D11 POP PSW RET;;设置DS1302初始时间,并启动计时SETDS1302: CLR T_RST nop CLR T_CLK nop SETB T_RST nop MOV B,#8EH ;写控制命令字 LCALL INPUTBYTE MOV B,#00H ;写保护关闭 LCALL INPUTBYTE SETB T_CLK nop CLR T_RST MOV R0,#SECOND ;内存中的时间首地址 MOV R1,#80H ;DS1302中的时间首地址 MOV R7,#7 ;字节数SETLOOP: CLR T_RST nop CLR T_CLK nop SETB T_RST nop MOV B,R1 ;写命令字 LCALL INPUTBYTE MOV A,R0 ;设置时间 MOV B,A LCALL INPUTBYTE INC R0 INC R1 INC R1 SETB T_CLK nop CLR T_RST nop DJNZ R7,SETLOOP CLR T_RST nop CLR T_CLK nop SETB T_RST nop MOV B,#8EH LCALL INPUTBYTE MOV B,#80H ;开写保护 LCALL INPUTBYTE SETB T_CLK nop CLR T_RST nop RET;从DS1302读取时间GET1302: MOV R0,#SECOND MOV R1,#81H ;DS1302中读时间的首地址 MOV R7,#7GETLOOP:CLR T_RST nop CLR T_CLK nop SETB T_RST nop MOV B,R1 LCALL INPUTBYTE ;写命令字 LCALL OUTPUTBYTE ;读时间 MOV R0,A ;将从DS1302中读取的时间从内存中保存 INC R0 ;修改地址指针 INC R1 INC R1 SETB T_CLK nop CLR T_RST nop DJNZ R7,GETLOOP RET ;向DS1302写一个字节INPUTBYTE: MOV R4,#8INPUTLOOP: MOV A,B RRC A MOV B,A MOV T_IO,C SETB T_CLK NOP NOP NOP CLR T_CLK DJNZ R4,INPUTLOOP RET;从DS1302读一个字节OUTPUTBYTE: clr a clr c MOV R4,#8OUTPUTLOOP: NOP NOP MOV C,T_IO RRC A SETB T_CLK NOP NOP NOP CLR T_CLK DJNZ R4,OUTPUTLOOP RETTABLE0:DB 42H,82H,82H,82H,84H,02H,72H,62H,72H,62H,52H,48H ;声响时间 DB 0b2H,0b2H,0b2H,0b2H,0b4H,02H,0a2H DB 12H,0a2H,0d2H,92H,88H,82H,0b2H,0b2H,0a2h,84h,02h,72h DB 62H,72H,62H,52H,44H,02H,12H DB 12H,62H,62H,52H,44H,02H,82H,72H,62H,52H,32H,48H DB 00H ;00h用于判断循环是否结束TABLE01:DW 64021,64103,64260,64400,64524,64580,64684,64777 DW 64820,64898,64968,65030,64934 ;声调table1:DB 14H,0d7H,4cH,45H,87H,25H,24H,57H,04H,05H ;共阳极数码管显示tab
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东省深圳市桃源居中澳实验学校2025-2026学年高三上学期第一次月考历史试题
- 应届生安全培训内容
- 巡防安全卫士培训内容课件
- 2025年电商应用与品牌市场洞察分析报告
- 岩石学课件地大北京
- 输电安全培训特色亮点课件
- 小鸭过河课件
- 高级管理人员劳动局认可的特殊待遇劳动合同模板
- 多种担保保证方式在工程项目中的应用合同
- 个人股权变更及收益分配合同
- 一年级新生家长会校长讲话:习惯奠基成长路家校同行护萌娃
- 2025【粮食购销合同范本】粮食购销合同
- 德邦防御性驾驶培训课件
- 客户开发思路课件
- 2025年保健按摩师职业技能竞赛理论考试题库(附答案)
- 庆阳地区地下水供水水文地质条件评价
- 储能项目竣工报告
- 打印版唐能通
- 37°球面型管路连接件
- 择菜洗菜和切菜
- 主体沉降观测的大概内容主体沉降观测方案.doc
评论
0/150
提交评论