《基于89C51单片机扩展8155显示电子钟设计.doc》由会员分享,可在线阅读,更多相关《基于89C51单片机扩展8155显示电子钟设计.doc(40页珍藏版)》请在三一办公上搜索。
1、 单片微机应用课程设计说明书 设计题目 89C51单片机扩展8155显示电子钟 装 机电工程学院(系)机械设计制造及其自动化专业 订 班级 机械0909班 学号 0806091118 设计人 刘 宇 线 指导教师 薛 云 完成日期 2013 年 1 月 17 日 中南大学机电工程学院 目录一、 课程设计任务书二、 设计方案的拟定及说明三、 硬件电路设计1. 电子元件的选择2. 元件参数计算确定3. 电路原理图设计四、 控制软件流程图五、 控制软件源程序六、 控制软件说明书七、 设计小结八、 参考资料目录 二、课程设计任务书1、 课程设计的目的 单片微机应用课程设计是单片微机课程的综合性与实践性
2、教学环节,课程设计的目的就是:(1)综合运用单片微机原理课程和单片机接口技术课程的知识,分析和解决实际应用中的问题进一步巩固、加深和拓宽所学的知识。(2)通过设计实践,逐步树立正确的设计思想,熟悉掌握单片机应用系统设计的一般规律,培养分析问题和解决问题的能力。(3)通过逻辑分析、方案设计、硬件电路连接、画程序流程图,汇编语言编程,上机调试,进行全面的单片微机应用基本技能的训练。2、课程设计的内容 课程设计的题目一般是在实验电路板上设计制作电子钟或控制简易二坐标数控实验台。 课程设计的内容包括:装置的方案设计,电路原理图设计,实际电路的连接,画软件流程图,编写程序,调试运行,编写课程设计说明书。
3、 课程设计中要求完成以下工作: (1)一张完整的电路原理图,包括电路上有关元件的参数设计; (2)整个控制软件流程图; (3)设计计算和操作控制课程设计说明书。3、课程设计的步骤(1)课程设计的一般进程和步骤见下表:设计准备阅读设计任务书,明确设计任务,阅读课程设计指导书,准备设计资料方案确定拟定设计方案,选择控制方式,建立控制模型电路原理图设计设计控制电路原理图,选择元件,计算确定电路中元件参数连接电路在实验电路板上完成控制电路的连接设计流程图按设计控制方案构思,画出整个控制流程图编写控制软件根据控制流程图,按编程语言格式编写控制程序调试通过利用仿真开发机的单步、断点等调试手段调试控制软件编
4、写设计说明书整理和编写设计计算和控制操作课程设计说明书设计总结及答辩进行课程设计总结,完成答辩准备,上机运行程序并回答问题 (2)片内RAM单元分配 控制程序中需要使用一些数据存储器单元存放有用的数据,根据控制程序中要使用的存储器单元数量,需将单片机中片内RAM单元进行分配,重新定义堆栈指针的值,避免堆栈区和程序用的数据存储区之间冲突。在控制软件中需要使用的数据存储单元有:序号名 称注 释 1DISM0DISM5显示缓冲区,用于显示程序中存放要显示的数据,占六个单元。 2HH小时时间存放单元,占一个单元,初始值赋0 3MM分时间存放单元,占一个单元,初始值赋0 4SS秒时间存放单元,占一个单元
5、,初始值赋0 5HSEC小于0.5秒计数延时单元,占一个单元,用于时间调整时,闪烁指示状态用。若定时器定时为50ms,该单元初始值赋0AH 6SEC小于1秒计数延时单元,占一个单元,用于时钟计时用,若定时器定时为50ms,该单元初始值赋14H 7FLAG标志计存储器单元,占一个单元,单元中的每一位可用作标志,该单元必须定位在单片机片内202FH中(在这些单元中的每一位可按位寻址访问)。 8STATUS时钟调整时的状态指针,在时钟调整状态下有效。内容为“3”时指示“时”调整,为“2”时指示“分”调整,为“1”时指示“秒”调整, 二、设计方案的拟定及说明1.方案的拟定及说明程序初始化功能为:显示缓
6、冲区单元、标志单元清零,时、分、秒单元和计数延时单元置初值,定时器初始化,确定定时时间常数,开中断,如果用8255,则对8255处始化等。时、分、秒显示功能为: 显示程序,将显示缓冲区中的内容送数码管进行显示。时、分、秒计时单元内容送显示缓冲区功能为: 将时、分、秒三个计时单元的内容分别拆开后送六个显示缓冲区单元。闪烁指示当前正在调整的单元功能: 在时间调整状态下有效。0.5秒闪烁标志以0.5秒的间隔在“0”和“1”之间变化,当0.5秒闪烁标志为“1”时,由时钟调整时状态指针指示的显示单元置成显示“空”码,当0.5秒闪烁标志为“0”时,保持原显示单元的内容,这样在显示程序的控制下,数码管会在闪
7、烁显示。键盘扫描处理功能为: 没有按键按下就退出,有按键按下,进行键盘处理:如时钟调整状态键按下时的处理和时钟调整键按下时的处理。中断程序功能为: 定时时间到,时、分、秒单元分别计数(时间到1秒,秒单元计数,当秒单元计数值到60秒后,分单元计数同时秒单元清0,当分单元。计数值到60分后,时单元计数同时分单元清0)。三、 硬件电路设计 1.电子元件的选择AT89C51、8155元件参数的计算确定8155口地址的分配根据题目要求:PB口地址为F702H,则8155片选信号线应接单片机P2.3口,IO/M口可接P2.4口,由此分配8155命令状态字口地址为F700H,8155 PB口口地址为EF02
8、H。 定时器定时中断初始化计算时钟要实现1S计时,则可将定时器设定定时时间为50ms,20次中断后即可实现一秒定时。选择定时器T0,工作方式为方式一(16位定时器),则定时初值为X=216-(50*1000)=15526=3CB0H,则定时器TH0送初值为03C,TL0送初值为B0H.3.电路原理图单片机的功能模块时钟源T0 T1 P0 P1 P2 P3 TXD RXD INT0 INT1时钟电路SFR和RAMROM定时/计数器CPU串行I/O口中断系统并行I/O口系统总线图21 MCS51单片机的功能模块框图 MCS-51的晶振电路图AT89C51与8155的接口连接P0.0P0.7AD0A
9、D7ALEALEP2.3P2.4/WR/RDRESETIO/M/WR/RDRESET/CEVSSVCC89C51VSSVCC8155+5VPAPBPC键盘与AT89C51的连接电路图四、 控制软件流程图1.显示程序流程图 2. 中断程序流程图 定时中断 定时器设初值 是否有键按下 秒单元计数+1 秒单元清0,分单元进1 是否大于60 Y 是否有键按下 分单元计数+1 分单元清0,时单元进1 是否大于60 Y 是否有键按下 时单元计数+1 时单元清0 Y 是否大于24 RETI 五、 控制软件源程序源程序清单:ORG 0000H ;程序开始LJMP MAIN ;ORG 000BH ;定时器中断地
10、址设置LJMP STOP_SRV ;ORG 001BHLJMP INTT1MAIN:;-初始化程序-DISM0 EQU 30HDISM1 EQU 31HDISM2 EQU 32HDISM3 EQU 33HDISM4 EQU 34HDISM5 EQU 35H ;显示缓存区HH EQU 36H ;时MM EQU 37H ;分SS EQU 38H ;秒HSEC EQU 39H ;0.5秒计数延时闪烁SEC EQU 40H ;1秒计数延时STATUS EQU 42HFLAG EQU 20H;K1 EQU P1.0 ;按键1K2 EQU P1.1 ;按键2ACALL INIT ;初始变化量ACALL I
11、NIT_T0;设置定时器;无穷循环LOOP: ACALL SHOWACALL DIR ACALL KEYSCANJMP LOOP;-INIT_T0: ;使用定时器T0模式1计时MOV TMOD,#11H;定时器T0,工作模式1MOV TH0,#3CH ;定时50MSMOV TL0,#0B0HMOV TH1,#3CH ;定时50MSMOV TL1,#0B0HSETB EA;总中断开放SETB ET0;允许T0中断SETB TR0 ;T0开始计时RETSTOP_SRV: ;中断服务程序PUSH ACC;累加器入栈保护PUSH PSW;状态字入栈保护MOV TH0,#3CHMOV TL0,#0B0H
12、INC SEC;1秒计数器加一MOV A,SEC;CJNE A,#14H,NEXT;INC SS;秒计数器加一MOV SEC,#0;1秒计数器清零MOV A,SSCJNE A,#60,NEXT;INC MM;分计数器加一MOV SS,#0;SS清零MOV A,MM;CJNE A,#60,NEXT;INC HH;小时计数器加一MOV MM,#0;MM清零MOV A,HH;CJNE A,#24,NEXT;MOV SS,#0MOV MM,#0MOV HH,#0NEXT:POP PSW ;恢复状态字(出栈)POP ACC ;恢复累加器RETI;-SHOW: ;转换秒显示数据MOV A,SSMOV B,
13、#10DIV ABMOV DISM1,AMOV A,BMOV DISM0,A;转换分数据MOV A,MMMOV B,#10DIV ABMOV DISM3,AMOV A,BMOV DISM2,A;转换小时数据MOV A,HHMOV B,#10DIV ABMOV DISM5,AMOV A,BMOV DISM4,ARETDIR:MOV A,STATUSJNZ DIR00DIP:MOV A,#03H;MOV DPTR,#0F700HMOVX DPTR,AMOV R0,#30HMOV R5,#0FEHMOV R4,#6DIR0:MOV A,R0MOV DPTR,#TABMOVC A,A+DPTRMOV
14、DPTR,#0F701HMOVX DPTR,AMOV A,R5MOV DPTR,#0F702HMOVX DPTR,ARL AMOV R5,ALCALL DL1MSINC R0DJNZ R4,DIR0DIROUT:RETDIR00:JB 03H,DIKKAJMP DIPDIKK:JNB 00H,DIKKIMOV A,#03H MOV DPTR,#0F700HMOVX DPTR,AMOV R0,#30HMOV R5,#0FEHMOV R4,#2DIRR0:MOV A,#00HMOV DPTR,#0F701HMOVX DPTR,AMOV A,R5MOV DPTR,#0F702HMOVX DPTR,A
15、RL AMOV R5,AINC R0DJNZ R4,DIRR0MOV R0,#32HMOV R5,#0FBHMOV R4,#4DIRR1:MOV A,R0MOV DPTR,#TABMOVC A,A+DPTRMOV DPTR,#0F701HMOVX DPTR,AMOV A,R5MOV DPTR,#0F702HMOVX DPTR,ARL AMOV R5,ALCALL DL1MSINC R0DJNZ R4,DIRR1AJMP DIROUT DIKKI:AJMP DIP DL1MS:MOV R7,#6;DEL1:MOV R6,#250;DJNZ R6,$DJNZ R7,DEL1;RETTAB: DB
16、3FH,06H,5BH,4FH,66H,6DH DB 7DH,07H,7FH,6FH,77H,7CH DB 39H,5EH,7BH,71H,00H,40H ;-其他子程序-;计时单元清零INIT:MOV HH,#23MOV MM,#59MOV SS,#40MOV SEC,#00HMOV FLAG,#00HMOV STATUS,#00HMOV HSEC,#00HRET;-实现调整时间子程序-;按键处理程序(设置时间)KEYSCAN: JNB K1,KEYSCAN0 JNB K2,KEYSCAN1KEYOUT:ACALL TIAOSHI1 RETKEYSCAN0:LCALL DL20MSJB K1
17、,KEYOUT;WAIT0:ACALL SHOWACALL DIRJNB K1,WAIT0INC STATUSMOV A,STATUSCLR ET0CLR TR0SETB ET1 ;允许T1中断SETB TR1 ;开启定时器T1CJNE A,#04H,KEYOUTMOV STATUS,#00SETB ET0SETB TR0CLR ET1CLR TR1CLR 00HCLR 01HCLR 02HCLR 03HSJMP KEYOUTKEYSCAN1: LCALL DL20MSJB K2,KEYOUTWAIT1:ACALL SHOWACALL DIRJNB K2,WAIT1MOV A,STATUSJZ
18、 KEYOUTCJNE A,#01H,KSCAN11INC SSMOV A,SSCJNE A,#3CH,KEYOUTMOV SS,#00SJMP KEYOUTKSCAN11:CJNE A,#02H,KSCAN21INC MM MOV A,MMCJNE A,#3CH,KEYOUTMOV MM,#00SJMP KEYOUTKSCAN21:INC HHMOV A,HHCJNE A,#18H,KEYOUTMOV HH,#00SJMP KEYOUTTIAOSHI1:MOV A,STATUSCJNE A,#01H,TIAOSHI2SETB FLAG.0LJMP INTT1JMP RT00TIAOSHI2:
19、CJNE A,#02H,TIAOSHI3SETB FLAG.1CLR FLAG.0LJMP INTT1JMP RT00TIAOSHI3:CJNE A,#02H,TIAOSHI4SETB FLAG.2CLR FLAG.1LJMP INTT1JMP RT00TIAOSHI4:CJNE A,#03H,TIAOSHISETB 02HCLR 01HLJMP INTT1JMP RT00TIAOSHI:CLR 00HCLR 01HCLR 02HCLR 03HRT00:RET;防抖动延时DL20MS:ACALL SHOWACALL DIRACALL SHOWACALL DIRACALL SHOWACALL D
20、IRRET;*闪动调时 程 序*;T1中断服务程序,用作时间调整时调整单元闪烁指示,定时50msINTT1: MOV TL1, #0B0H ;装定时器T1定时初值MOV TH1, #3CH DEC HSECMOV A,HSECJNZ INTT1OUTCPL 03H MOV HSEC,#0AHINTT1OUT:RETIEND六、 控制软件操作1、从菜单中选择 Project 的下拉菜单中 New Project ,新建工程项目,见图1 图12、确定后出现的对话框,输入新建工程的名字,如example,见图2(请每个同学在D盘上建立自己的文件夹,将建立的项目保持在自己的文件夹内) 图23、在弹出的
21、对话框中选择CPU 厂商,选中 Atmel 公司,双击鼠标确认,见图3 图34、双击后在弹出的对话框中选择CPU类型,选中AT89C51后确认,见图4 图45、选择否(N),不添加(三)、设置工程文件参数1、 在菜单栏中选择 Project 项的下拉菜单 Options for Target Target1项,或单击工具栏中 图62、在出现的对话选项卡中选择Target项,在中输入单片机工作的频率图、在选项卡中选择 Debug 调试项,见图8图 (1) 图8 选中此项keil为纯软件仿真,不需要连接仿真器就可以仿真,软件实验就可以选择这一项(实验一、实验二为纯软件仿真)(2) 图选中此项kei
22、l为带有Monitor-51目标仿真器的仿真,必须要有硬件keil-c51仿真器的支持,否则不能仿真,在我们做硬件实验时选择这一项(实验三、实验四为硬件仿真,此项)(3)单击 图9 后面的 设置,出现图10对话框,设置Port 串口:一般为COM1,Baudrate 波特率:38400bit/s, 最后 确认 图10 (4)在选项卡中按确定 (5)设置完成,就可以添加事先编好的 *.asm 文件程序编译运行(四)、编写新程序事例 图11 图121、在菜单栏File (文件)选项的下拉菜单中选择 New (新建文件),见 图11 ,选择后出现 图12 文本编辑框,输入汇编程序 图132、在输入程
23、序标点符号时注意,应在没有中文输入法状态,如图13输入程序:ORG 0000H AJMP MAIN ORG 0030HMAIN: MOV R0,#20H;(R0)= MOV R2,#0FH ;(R2)= MOV A,#00HA1: MOV R0,A; INC R0; (R0)= INC A;(A)= DJNZ R2,A1 MOV R0,#20H MOV DPTR,#7000H MOV R2,#0FHA2: MOV A,R0 MOVX DPTR,A INC R0 INC DPTR DJNZ R2,A2 MOV R0,#0A0H MOV DPTR,#7000H MOV R2,#0FHA3: MOV
24、X A,DPTR MOVX R0,A INC R0 INC DPTR DJNZ R2,A3DO: LJMP DO END3、保存文件图144保存文件以文件扩展名*.ASM保存,如图15(请每个同学把程序保存在自己的文件夹) 图155、运行程序,要把文件程序添加到工程里去执行,操作如图16 图166、添加程序对话框操作图17所示(如果已编好程序存在自己的U盘中,可以先复制到D盘上,直接添加即可) 图177、添加好程序,在库里把文件打开,操作见图18 图188、编译程序,也可以在工具栏中点击Project ,操做如图19后图20 图19 图20在编译过程中,如果有错可以在信息窗口中显示出来,双击错
25、误信息,可以在源程序中定位所在行。纠错后,再次编译直到没有错误。五)、调试程序编译好以后,要切换编程和调试模式,操作见图21,或点击工具栏上的 图211、单步调试跟踪就,若有子程序调用,也会跟踪到子程序中去。单步调试程序,一条指令一条指令地执行程序可以全速执行子程序(把子程序作为一步执行完),而不会跟踪到子程序中。在单步调试中,可以查看内存地址及外部地址单元内容1)、点击菜单栏选择View (浏览) 的下拉菜单 Memory Windows (存储器窗口) 图26 2、在Keil软件的右下方出现的对话框,如图27所示 图27 3、在对话框中输入你查看的地址单元,如图27、图28所示,例如要查看
26、30H 内存地址单元的内容,就输入D:30H 按ENTER(回车键),在底下就显示30H 的内容(第一个为30H,后面一个为31H,一个个按顺序排);如果要查看外部数据存储器的8000H 的内容就输入X:8000H 地址后按回车,如图29所示 图28 图29单步执行下程序,至 DJNZ R2,A1行。观察并记录指令运行结果2、利用“执行到光标处”功能进行调试 将光标移到想要暂停的地方,MOV R0,#20H所在行,选择 “执行到光标处”功能,程序快速执行到光标所在行。观察运行情况,并记录,此时R0R2A20H21H22H23H24H25H26H27H28H29H2AH2BH2CH2DH2EH3
27、、利用断点进行调试设置断点:将鼠标移到源程序窗口相应程序行,双击左键设置断点,或击右键选“设置/取消断点”功能设置断点。断点设置好后,此行出现红色方形标记。用全速执行的功能,当程序执行到断点时,会暂停下来,可以观察程序中各变量的值,判断程序是否正确。取消断点:将鼠标移到源程序窗口相应断点程序行,双击左键取消断点。或击右键选“设置/取消断点”功能取消断点。断点取消后,此行的红色方形标记消失。注意:设置的断点如果不取消,会一直存在。在MOV R0,#0A0H行设置断点,全速执行,暂停后观察并记录以下单元内容R0DPL7000H7001H7002H7003H7004H7005H7006H7007H7
28、008H7009H700AH700BH700CH700DH700EH4、运行,见图22 图2211、软件仿真时要停止程序可以点击工具栏上的快捷键Halt(停止)硬件仿真时停止程序不要点击工具栏上的快捷键Halt(停止),见图23。停止程序要按仿真器上的复位按钮,见仿真器示意图24 图23 图24停止程序以后,要进行模式切换,见图21,这时就可以对程序进行修改,编译运行。如果要想运行其他程序,就要把原来的程序从工程库里移除,见图25,然后再添加 图2综合运用各种调试方法对源程序进行调试。七、设计小结 本来两周的单片机课程设计实习,因为有多门考试压缩为一周。这个学期由于大部分时间都在忙着考研,所以
29、也没有怎么看单片微机原理系统设计与应用这本书,虽然选了单片机原理与接口这门课程,但学这门课程的过程中,心里想着考研,虽每节课都去听了,却没有花许多时间去思考这门课程,很多关于单片机接口的知识都不甚理解。 考完研的第一天,我们开始了课程设计的动员会,指导老师薛老师给我们每个人都分配了任务。我的任务是用一片8155的 PA口(段控)和PB口(位控)作输出口控制六个数码管显示(二个数码管显示“时”、二个数码管显示“分”、二个数码管显示“秒”), 用89C51的P1口作输入口控制按键输入,做一台电子钟。要求:8155的PB口地址:F702H。当时也没多在意,因为这一周我有四门考试,必须先过了这四关。周
30、六考试结束后,就开始思考,仔细阅读了课程设计说明书,才发现这次课程设计的任务不轻,主要是自己的汇编语言差不多忘完了,必须重新把教科书看一片,对程序和单片机要有足够的理解,才能完成用单片机实现电子钟的任务。于是,我花了两天时间看了一下教科书上重要的知识,并且请教了那些比较熟练单片机的同学,也在网上和读书馆搜集有关的资料。之后开始了按照设计指导书的流程开始编写自己的电子钟程序。这几天真的特辛苦,每天早上九点之前到实验室,晚上十点才离开实验室,功夫不负有心人,我的想法也初步得到实现,虽然还有一些没达到自己的目的,比如说我本想在时钟调整状态下,正在调整的“时”或“分”或“秒”要进行闪烁显示指示。但最后
31、却只能在秒表调时是闪烁。虽然花了一天的时间修改程序,并调试,并在实验室里呆了一天,当最后还是没能实现理想的功能。我设计的电子钟能实现调试“时”、“分”、“秒”的功能,显示的也比较清晰,用两个键盘实现调时,如果还有时间我相信自己能实现自己所想的功能。当然这次试验让我学会了很多知识,任何只是都需要运用到实践才能成为真正的知识,也只有实践才能让我学会更多知识。这次课程设计是我们大学里的最后一次课程设计,真正说来虽然只有短短一周时间,但我们从中体会很多,其中重要的是,遇到困难不仅要自己学会独立思考,也需要同学和老师的帮助。另一方面也体会到研究人员的辛苦,需要耐心和毅力去实现自己的想法,面对困难不应退缩,而应勇于应对。总之,这次课程设计获益匪浅,虽然时间安排在考研和末考完之后,但却更显其对我们今后走向岗位或进入研究生学习的特殊意义,不管怎么样,这次课程设计锻炼了我的自学能力和实践能力。 八、参考文献目录1、 万福军、潘晓松等编著 单片机微机原理系统设计与应用 中国科学技术大学出版社2、 喻萍、郭文川编著 单片机原理与接口技术 化学工业出版社3、 张毅刚、彭喜元编著 单片机原理与应用设计 电子工业出版社