第一篇:单片机课程设计说明书───秒 表 系 统 设 计
单片机课程设计说明书
───秒 表 系 统 设 计
时 间:2007.12.23-2008.1.1 院系:电气与信息工程系 姓 名:*** 班 级:0000000 学 号:999999999999
目 录
一 概 述┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 2 二 设计要求┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 2 三 设计思路及描述┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 3 四 原理图┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 4 五 设计流程图┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 5 六 设计程序┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 8 七 硬件调试┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 12 八 课程设计心得体会┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 13
九 参考文献┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 14
一 概 述
近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。
随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的秒表,随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中秒表就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。
本设计所介绍的秒表系统设计——用AT89C51设计一个2位LED数码显示“秒表”,显示时间为00~99秒,每秒自动加一。另设计一个“开始”按键和一个“复位”按键。增加一个“暂停”按键和一个“快加”按键(每10ms快速加一)
二 设计要求
用AT89C51设计一个2位LED数码显示“秒表”,显示时间为00~99秒,每秒自动加一。另设计一个“开始”按键和一个“复位”按键。再增加一个“暂停”按键和一个“快加”按键(每10ms快速加一)。按键说明:按“开始”按键,开始计数,数码管显示从00开始每秒自动加一;按“复位”按键,系统清零,数码管显示00;按“暂停”按键,系统暂停计数,数码管显示当时的计数;按“快加”按键,系统每10ms快速加一,即数码显示管在原先的计数上快速加一。
三、设计思路及描述
该实验要求进行计时并在数码管上显示时间,则可利用DVCC系列单片机微机仿真实验系统中的芯片8032(芯片的功能类似于芯片AT89C51,其管脚功能也和AT89C51的管脚功能类似)中的P3.2管脚做为外部中断0的入口地址,并实现“开始”按键的功能;将P3.3做为外部中断1的入口地址,并实现“清零”按键的功能;将P3.0做为数据信号DATA输入的入口地址;将P3.1做为时钟信号CLK输入的入口地址。定时器T0作为每秒加一的定时器;定时器T1作为“快加”键的定时器。其中“开始”按键当开关由1拨向0(由上向下拨)时开始计时;“清零”按键当开关由1拨向0(由上向下拨)时数码管清零,此时若再拨“开始”按键则又可重新开始计时。
四 原理图
五 设计流程图
7
六 设计程序
org 0000h ajmp main;主程序入口地址 org 0003h ajmp zhongduan0;中断0入口地址 org 000bh ajmp yanshi;定时器T0入口地址 org 0013h ajmp zhongduan1;中断1入口地址 org 001bh ajmp dingshi1;定时器T1入口地址 org 0030h 主程序
main: mov tcon,#05h;主程序开始 外部中断跳变模式 mov tmod,#11h;定时器0,1模式1 mov ie,#8fh;开总中断,中断0,1,定时器0,1 mov dptr,#tab mov r1,#00h mov r2,#00h mov r3,#40;循环次数40 mov tl0,#2Ch;置初值,定时25MS mov th0,#0CFh mov tl1,#78h;置初值,定时10MS mov th1,#0ech clr tr0;关定时器 clr tr1 暂停键K3,快加键K4程序 here:jb p1.0,here show:clr tr1 clr tr0 acall xianshi kuaijia:jb p1.2,kuaijia;等待P1.2为0 快加 clr tr0 setb tr1 here3:jnb p1.2,here3 ajmp here 外部中断INT0子程序-----计时按键K1子程序 zhongduan0: setb tr0;计时按键 reti 外部中断INT1子程序----复位按键K2子程序 zhongduan1:clr tr0;复位按键 clr tr1 mov 12h,#00h mov 11h,#00h acall xianshi;调用显示子程序 mov r1,#00h mov r2,#00h reti 加一子程序
jia1: inc r1;加1子程序 cjne r1,#0ah ,loop;判断是否到表尾 mov r1,#00h inc r2 cjne r2,#0ah,loop mov r2,#00h loop: mov 12h,r1;重新赋值 mov 11h,r2 ret 显示子程序
xianshi:mov r7,#02h;2 mov r0,#12h loop5: mov r6,#08h;8 mov a,@r0 movc a,@a+dptr loop6:rlc a;clr p3.1 mov p3.0,c setb p3.1 djnz r6,loop6 dec r0 djnz r7,loop5 ret 定时器T0子程序;yanshi: mov tl0,#2Ch;mov th0,#0CFh
个数码管显示子程序 位2进制数 循环左移 定时子程序 11 djnz r3,loop7 acall jia1;调用加1子程序 acall xianshi;调用显示子程序 mov r3,#40 loop7: reti;定时器T1子程序;dingshi1:mov tl1,#78h;置初值,定时10MS mov th1,#0ech clr tr0 setb tr1 mov 12h,r1 mov 11h,r2 jnb p1.0,show acall jia1 acall xianshi lop7:reti;tab:db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh end 七 硬件调试
根据相关的单片机材料,利用所学的单片机知识,结合DVCC系列单片机微机仿真实验系统中的软件和硬件(集成电路芯片8032,七段数码管,开关电路及时钟信号电路,按键等),编写能 够实现该项目的软件程序,最后将软、硬件有机的结合起来,进行有效的调试,达到完成该实验课程设计的目的要求。八 课程设计心得体会
经过将近三周的单片机课程设计,终于完成了我的秒表的设计,虽然没有完全达到设计要求,但从心底里说,还是高兴的,毕竟这次设计把实物都做了出来,高兴之余不得不深思呀!在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,有好多的东西,只有我们去试着做了,才能真正的掌握,只学习理论有些东西是很难理解的,更谈不上掌握。
从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。
九 参考文献
1、江力编著的《单片机原理及其接口技术》 清华大学出版社
2、苏家健等编的《单片机原理及应用技术》 高等教育出版社
3、《单片机原理几应用》课程设计指导书
第二篇:单片机课程设计秒表系统设计
单片机课程设计
学院:信息工程专业:
——秒表系统设计
一,设计目的:
1,熟悉51单片机的内部结构,计数器,中断控制器等的用法,来实现简单的控制应用系统。
2,通过简单系统的设计了解单片机应用系统的设计与开发过程及其相应的调试程序过程。
二,设计任务:
实验通过单片机的定时器/计数器定时和计数原理,设计简单的计时器系统,拥有正确的计时、暂停、清零、快加功能,并同时可以用数码管显示,在现实生活中应用广泛,具有现实意义。
三,设计题目:
秒表系统设计——用AT89C51设计一个2位LED数码显示“秒表”,显示时间为00~99秒,每秒自动加一。另设计一个“开始”按键和一个“复位”按键。调用子程序:暂停键子程序,计时键子程序,清0键子程序,加一子程序,显示子程序,定时子程序,所用特殊寄存器:寄存器A,寄存器C,所用中断:外部中断INT0、INT1,定时器T0、T1
四,设计的硬件接线图:
五,设计思路及描述
要求进行计时并在数码管上显示时间,则可利用DVCC系列单片机微机仿真实验系统中的芯片8032(芯片的功能类似于芯片AT89C51,其管脚功能也和AT89C51的管脚功能类似)中的P3.2管脚做为外部中断0的入口地址,并实现“开始”按键的功能;将P3.3做为外部中断1的入口地址,并实现“清零”按键的功能;将P3.0做为数据信号DATA输入的入口地址;将P3.1做为时钟信号CLK输入的入口地址。定时器T0作为每秒加一的定时器;定时器T1作为“快加”键的定时器。其中“开始”按键当开关由1拨向0(由上向下拨)时开始计时;“清零”按键当开关由1拨向0(由上向下拨)时数码管清零,此时若再拨“开始”按键则又可重新开始计时。
六,流程图
七,程序 源程序: ORG
0000H AJMP
MIAN;主程序入口地址 ORG
0003H
AJMP
ZHONGDUAN0;中断0入口地址
ORG
000BH
AJMP YANSHI;定时器T0入口地址
ORG
0013H
AJMP
ZHONGDUAN1;中断1入口地址
ORG
001BH
AJMP
DINGSHI1;定时器T1入口地址
ORG
0030H
;主程序
;***********************************************************
MAIN: MOV
TCON,#05H;主程序开始 外部中断跳变模式
MOV
TMOD,#11H;定时器0,1模式1 MOV
IE,#8FH;开总中断,中断0,1,定时器0,1 MOV
DPTR,#TAB MOV
R1,#00H MOV
R2,#00h MOV
R3,#40;循环次数40 MOV
TL0#2CH;置初值,定时25MS
MOV
TH0,#0CFH
MOV
TL1#78H;置初值,定时10MS
MOV
TH1,#0ECH CLR TR0;关定时器
CLR
TR1;***********************************************************;暂停键K3,快加键K4程序
;*********************************************************** HERE:JB P1.0,HERE SHOW:
CLR
TR1 CLR
TR0 ACALL
XIANSHI KUAIJIA
:JB P1.2,KUAIJIA;等待P1.2为0 快加 CLR
TR0 SETB
TR1
HERE 3JNB
P1.2,HERE 3 AJMP
HERE;***********************************************************;外部中断INT0子程序-----计时按键K1子程序
;***********************************************************
ZHONGDUAN 0:
SETB TR0;计时按键 RETI;***********************************************************;外部中断INT1子程序----复位按键K2子程序
;***********************************************************
ZHONGDUAN 1: CLR TR0;复位按键
CLR
TR1
MOV
12H,#00H
MOV
11H,#00H ACALL
XIANSHI;调用显示子程序
MOV
R1,#00H
MOV
R2,#00H RETI;***********************************************************;加一子程序
;***********************************************************
JIA1:
INC
R1;加1子程序
CJNE R1,#0AH ,LOOP;判断是否到表尾
MOV
R1,#00H INC
R2
CJNE
R2,#0AH,LOOP
MOV
R2,#00H
LOOP: MOV
12H,R1;重新赋值
MOV
11H,R2
RET;***********************************************************;显示子程序
;*********************************************************** XIANSHI: MOV R7,#02H;2个数码管显示子程序 MOV R0,#12H LOOP5: MOV R6,#08H;8位2进制数 MOV A,@R0 MOVC A,@A+DPTR LOOP6: RLC A;循环左移 CLR P3.1 MOV P3.0,c SETB P3.1 DJNZ R6,LOOP6 DEC R0 DJNZ R7,LOOP5 RET;***********************************************************;定时器T0子程序;*********************************************************** YANSHI: MOV Tl0,#2CH;定时子程序 MOV TH0,#0CFH DJNZ R3,LOOP7 ACALL JIA1;调用加1子程序 ACALL XIANSHI;调用显示子程序 MOV R3,#40 LOOP7: RETI;***********************************************************;定时器T1子程序
;*********************************************************** DINGSHI1:MOV Tl1,#78H;置初值,定时10MS MOV TH1,#0ECH CLR TR0 SETB TR1 MOV 12H ,R1 MOV 11H,R2 JNB p1.0,SHOW ACALL JIA1 ACALL XIANSHI LOP7:TETI;*********************************************************** TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END
八,内容提要
利用单片机的定时器/计数器定时和记数的原理,结合dvcc实验箱上的集成电路芯片8032、LED数码管以及实验箱上的按键来设计计时器。将软、硬件有机地结合起来,使得系统能够正确地进行计时,数码管能够正确地显示时间。其中本设计了四个开关按键:其中一个按键按下去时以1秒加一开始计时,即秒表开始键(本实验中当开关从1变为0时开始计时),另一个按键按下去时暂停计时,使秒表停留在原先的计时(本实验中当相应开关从1变为0时即停止计时),第三个按键按下去时清0(本实验中当相应开关从1变为0时即停止计时),第四按键按下去则是以每10ms秒快速加一计时(本实验中当开关从1变为0时开始计时)。本设计中开始时都要使各按键回到各初始位置,即都处于1状态。
九,课程设计心得体会
选择适当的课题,不益太简单或者太难。做到既能把课题完成又能锻炼自己的能力!根据课题要求,复习相关的知识,查询相关的资料。根据实验条件,找到适合的方案,找到需要的元器件及工具,准备实验。根据课程设计的要求和自己所要增加的功能写好程序流程图,在程序流程图的基础上,根据芯片的功能写出相应的程序。然后再进行程序调试和相应的修改,以达到能够实现所要求的功能的目的。还要根据实验的实际情况,添加些额外程序来使系统更加的稳定,如开关的消震荡(采用延迟)。程序要尽量做到由各个子程序组成,在有些程序后面最好加注释,这样在程序出错的检查过程中可以更容易查找的到,也更简洁,更明白易懂。该设计的程序可以参考DVCC系列单片机微机仿真实验系统实验指导书中的串并转换实验,也可自己根据自己熟悉的方法来编程。在设计控制开关时,注意2个中断的打开和关闭的先后顺序,否则就会出错。这次的单片机课程设计重点是理论与实际的相结合。不再只读书了。该设计从头到尾都要自己参与,熟悉了对整个设计的过程,更系统的锻炼了自己。
十、参考文献
苏家健等编的《单片机原理及应用技术》 高等教育出版社 2004年11月 余锡存等,《单片机原理及接口技术》 西安电子科技大学出版社 2004
孙涵芳等 《单片机原理及应用》 北京航空航天大学出版社 1990
吴金戌等 《8051电片机的实践与应用》 清华大学出版社
第三篇:单片机课程设计报告多功能秒表
青岛理工大学琴岛学院
课程设计报告
课题名称:单片机原理课程设计 学院:机电工程系
专业班级:电气工程及其自动化103班 学号:201002
学生:
指导老师:
青岛理工大学琴岛学院教务处2012年 12月21 日
第四篇:基于89C51单片机的秒表课程设计
摘要
随着电子技术的发展,电子技术在各个领域的运用也越来越广泛,人对它的认识也逐步加深。秒表计时器秒表计时器常常用于体育竞赛及各种其他要求有较精确时间的各领域中。其中启/停开关的使用方法与传统的机械计时器相同,即按一下启/停开关,启动计时器开始计时,再按一下启/停开关计时终止。而复位开关可以在任何情况下使用,即使在计时过程中,只要按一下复位开关,计时应立即终止,并对计时器清零。本设计就是利用所学到的电子元器件将脉冲源用数码管显示出来,以制承诺简易的秒表。
以单片机为核心,设计一个秒表,具有计时功能,按键有启动计时、数据清零、停止、时间显示。
采用3个LED数码管显示时间,计时范围设置为0~99.9秒,即精确到0.1秒,用按键控制秒表的“开始”、“暂停”、“复位”,按“开始”按键,开始计时;按“暂停”按键,系统暂停计时;再按“开始”键,系统继续计时;数码管显示当前计时值;按“复位”按键,系统清零。
目录
一、设计任务.................................................................................................................3
二、设计题目.................................................................................................................3
三、功能分析.................................................................................................................3
四、总体设计.................................................................................................................3
4.1硬件设计...............................................................................................................4
4.1.1 89C51单片机...........................................................................................4
4.1.2晶体振荡电路...........................................................................................5
4.1.3复位电路...................................................................................................6
4.1.4按键电路...................................................................................................7
4.1.5显示电路.................................................................................................8
4.2引脚控制...............................................................................................................9
五、电路原理图...........................................................................................................10
六、程序流程图及程序设计......................................................................................11
6.1程序流程图.........................................................................................................11
6.2程序设计.............................................................................................................12
七、程序仿真...............................................................................................................21
八、心得体会...............................................................................................................22
九、致谢.......................................................................................................................23
十、参考文献...............................................................................................................24
一、设计任务
以单片机为核心,设计一个秒表,具有计时功能,按键有启动计时、数据清零、停止、时间显示。
二、设计题目
秒表的设计
三、功能分析
采用3个LED数码管显示时间,计时范围设置为0~99.9秒,即精确到0.1秒,用按键控制秒表的“开始”、“暂停”、“复位”,按“开始”按键,开始计时;按“暂停”按键,系统暂停计时;再按“开始”键,系统继续计时;数码管显示当前计时值;按“复位”按键,系统清零。
四、总体设计
本实验利用单片机的定时器/计数器定时和计数的原理,通过采用Proteus仿真软件来模拟实现。模拟AT89C51单片机、LED数码管以及控件来控制秒表的计数以及计时的开启、暂停、继续、与复位。其中有三个数码管来显示数据,两个数码管显示秒(两位),另一个数码管显示十分之一秒,十分之一秒的数码管计数从0~9,满十进一后显示秒得数码管的个位加一,并且十分之一秒显示清零
重新从零计数。同理当个位满十进一后个位也清零重新计数,当计时超过范围(即超过99.9秒)后,所有数码管全部清零从新计数
4.1硬件设计
4.1.1 89C51单片机
MCS-51系列单片机是8位单片机产品,89C51是其中的典型代表,基本模块包括以下几个部分:
(1)CPU:89C51的CPU是8位的,另外89C51内部有1个位处理器
(2)R0M:4KB的片内程序存储器,存放开发调试完成的应用程序
(3)RAM:256B的片内数据存储器,容量小,但作用大
(4)I/O口:P0-P3,共4个口32条双向且可位寻址的I/O口线
(5)中断系统:共5个中断源,3个内部中断,2个外部中断
(6)定时器/计数器:2个16位的可编程定时器/计数器
(7)通用串行口:全双工通用异步接收器/发送器
(8)振荡器:89C51的外接晶振与内部时钟振荡器为CPU提供时钟信号
(9)总线控制:89C51对外提供若干控制总线,便于系统扩展
89C51单片机引脚如下图:
4.1.2晶体振荡电路
89C51单片机内部的振荡电路是一个高增益反相放大器,引线XTAL1和XTAL2分别为反相振荡放大器的输入及内部时钟工作电路的输入和来自反相
振荡器的输出,该反相放大器可以配置为片内振荡器。
这里选用51单片机12MHZ的内部振荡方式,电路如下:C2、C3起稳定振荡频率、快速起振的作用。
晶振电路
4.1.3复位电路
采用上电复位,上电后,由于电容充电,使RST持续一段时间的高电平,从而实现上电复位操作。这不仅能使单片机复位,还能是单片机的外围设备同时复位,当程序出现错误时,可以随时使电路复位。
电路图如下:
复位电路
4.1.4按键电路
当按键被按下时,相应的引脚被拉低,经扫描后,获得键值,并执行键功能程序,因此按下不同的按键,将执行不同的功能程序。
电路图如下:
按键电路
4.1.5显示电路
采用3个LED数码管,LED是七段显示器,内部有7个条形发光二极管和1个小圆点发光二极管,根据各管的亮暗组成字符。
在用数码管显示时,有静态和动态两种选择,这里采用LED动态显示,用P0、P1、P2口驱动显示,由于P0口没有上拉电阻,因此P0口需要外接上拉
电阻才能输出高电平,这里使用8个4.7k的电阻作为上拉电阻。
电路图如下:
显示电路
4.2引脚控制
P0.0—P0.7、P2.0—P2.7、P1.0—P1.7对应三个数码管的a、b、c、d、e、f、g段和小数点位;P0控制数码管十位的显示,P2控制数码管个位的现实,P1控制小数点后一问的显示,P3.2、P3.3、P3.4分别接。
五、电路原理图
用Proteus软件画出主电路图如下:
六、程序流程图及程序设计
6.1程序流程图
6.2程序设计
程序的各个组成模块及工作流程描述:
(1)秒表的初始化
根据程序流程图,先进行秒表的初始化,即:①将I/O口P3全写一,为秒表的控制输入做好准备;②将数码管全部置零,使其处于秒表计时的初始状态;③将工作寄存器R0~R2以及30H初始化,留待后面的计时程序备用;④将定时器0置于工作方式1,并为其装入计时预置数D8FE(因为程序运行过程中占用的时间会导致一定误差,此为经实物测试之后的修正值),即将定时器定为每10ms溢出;⑤开总中断允许和定时器0中断允许。初始化完成后,即进入之后的按键扫描程序。
(2)按键检测程序
轮流检测开始计时(P3.2)、暂停计时(P3.3)、秒表清零(P3.4)三个按键。若发现有一个按键出现低电平(可能被按下),则延时10ms(调用延时子程序DELAY),延时完成后,若发现低电平消失,则说明该按键实际上未被按下,此时转回按键检测处继续检测;若发现仍然是低电平,则说明此键确实被按下了,此时就跳转至相应的程序标号处,执行相应的功能。
(3)开始计时
若确认“开始计时”键被按下,则跳转至程序标号“RUN”处,将定时器0计时允许控制位TR0置位,则定时器开始运行。此动作完成后,返回按键检测程序,等待操作者的下一次指令。
(4)计时程序
定时器0计时至10ms,溢出,引发中断,程序跳转至定时器0中断服务程序入口000BH处执行。程序跳转至中断服务程序TIME0。由于秒表的最小计时单位是0.1s,即100ms,因此需加入软件计时,使定时器0溢出10次之后才改变数码管的显示状态。因此每来一次中断就将30H中的数加1,若30H中的数没有到10,则给定时器0重新装入预置数,之后中断返回并继续等待中断;到10了,才进入显示程序,改变数码管的显示状态,执行完毕之后中断返回并继续等待中断。
(5)显示程序
将数码管的段选码放在数表TAB中。每次100ms计时完成后,将R0中的值(初值为0)送入A,然后自加1。.若R0中的值没到10,则使用累加器A查表,并将查得的数码管段选码送入毫秒位数码管。之后将30H中的数置零,中断返回。若发现R0中的数到10了,则将R0置零,并转入秒位进位子程序SECOND,向秒位进位,之后,继续照常向毫秒位送数。
在秒位进位子程序SECOND中,由于要用到累加器A,因此先将其推入堆栈保护。将R1中的值(初值为10)送入A,然后自加1。.若R1中的值没到20,则使用累加器A查表,并将查得的数码管段选码送入秒位数码管。若发现R1中的数到20了,则将R1重置为10,并转入十秒位进位子程序SECOND1,向十秒位进位,之后,继续照常向秒位送数。完成后,弹出ACC和PSW,子程序返回。
十秒位进位子程序与秒位进位子程序相似,只是没有向下一位进位的功能。
(6)暂停计时
若确认“暂停计时”键被按下,则跳转至程序标号“PAUSE”处,将定时器0计时允许控制位TR0置零,则定时器暂停运行。此动作完成后,返回按键检测程序,等待操作者的下一次指令。
(7)秒表清零
若确认“秒表清零”键被按下,则跳转至程序标号“STOP”处,将TR0置零,关闭定时器0运行。并且将数码管、工作寄存器、定时器0预置数全部重置,使其处于秒表计时的初始状态。此动作完成后,返回按键检测程序,等待操作者的下一次指令。
(8)延时程序
用于按键延时防抖,延时10ms。
程序清单如下:
ORG 0000H;程序开始
AJMP START;跳转到主程序START ORG 000BH;定时器0中断的地址入口
AJMP TIME0;定时器0溢出,跳转到中断程序TIME0 START:;主程序
MOV P3,#0FFH;输入端口P3全写1 MOV P0,#3FH;MOV P1,#3FH;
MOV P2,#0BFH;数码管初始化
MOV 30H,#00H;MOV R0,#00H;MOV R1,#0AH;MOV R2,#00H;MOV TMOD,#01H;MOV TH0,#0D8H;MOV TL0,#0FEH;SETB EA;SETB ET0;READ:;L1:JB P3.2,L2;LCALL DELAY;JB P3.2,L1;AJMP RUN;L2:JB P3.3,L3;
工作寄存器初始化
定时器0工作于方式1
定时器0预置数(D8FEH=55550D)
开总中断允许
开定时器0中断允许
读键程序
按键延时防抖
确认计时键被按下,开始/继续计时15
LCALL DELAY;按键延时防抖
JB P3.3,L2;AJMP PAUSE;确认暂停键被按下,暂停计时
L3:JB P3.4,L1;LCALL DELAY;JB P3.4,L3;AJMP STOP;RUN:;SETB TR0;AJMP READ;PAUSE:;CLR TR0;AJMP READ;TIME0:;INC 30H;MOV A,30H;
按键延时防抖
确认清零键被按下,秒表重置
计时键按下,跳转至此
定时器0开始/继续运行
暂停键按下,跳转至此
定时器0溢出,中断,跳转至此16
CJNE A,#0AH,TIME1;30H单元中的值到10了吗?(计时到10毫秒了吗,也就是说,该向毫秒位送数了吗?)MOV DPTR,#TAB;30H中的值到10了,顺序执行
MOV A,R0;INC R0;CJNE R0,#0AH,GET;R0MOV R0,#00H;LCALL SECOND;进位
GET:;MOVC A,@A+DPTR;MOV P1,A;MOV 30H,#00H;TIME1:;MOV TH0,#0D8H;MOV TL0,#0FEH;RETI;中的值到10了吗?(该向秒位进位了吗?)
到了,R0清零,调用进位子程序SECOND,向秒位没到,跳过进位子程序
查表并向数码管毫秒位送数
重置30H单元
给定时器0重新预置数
中断返回
SECOND:;秒位进位子程序
PUSH ACC;PUSH PSW;将ACC和PSW推入堆栈保护
MOV A,R1;INC R1;CJNE R1,#14H,GET1;R1了吗?
MOV R1,#0AH;LCALL SECOND1;位进位
GET1:;MOVC A,@A+DPTR;MOV P2,A;POP PSW;POP ACC;PSW,ACCRET;SECOND1:;中的值到20了吗,也就是说,该向十秒位进位到了。R1重置,调用进位子程序SECOND1,向十秒没到,跳过进位子程序
查表并向数码管秒位送数
出栈
子程序返回
十秒位进位子程序
PUSH ACC;PUSH PSW;将ACC和PSW推入堆栈保护
MOV A,R2;INC R2;CJNE R2,#0AH,GET2;R2
MOV R2,#00H;GET2:;MOVC A,@A+DPTR;MOV P0,A;POP PSW;POP ACC;PSWRET;STOP:;MOV P3,#0FFH;MOV P0,#3FH;MOV P1,#3FH;
中的值到10了吗,也就是说,该将此位归零了到了,R2清零
没到,跳过清零程序
查表并向数码管十秒位送数,ACC出栈
子程序返回
清零键按下,跳转至此 吗?
MOV P2,#0BFH;数码管清零
MOV 30H,#00H;MOV R0,#00H;MOV R1,#0AH;MOV R2,#00H;CLR TR0;MOV TH0,#0D8H;MOV TL0,#0FEH;AJMP READ;DELAY:;MOV R3,#50D;D1:MOV R4,#100D;D2:DJNZ R4,D2;DJNZ R3,D1;RET;工作寄存器初始化计时器0停止计时定时器0预置数
延时10ms子程序
子程序返回
TAB: DB 06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,3FH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH,0BFH;数码管段选码数表
END;程序结束
七、程序仿真
将以上程序清单导入先前做好的Proteus仿真电路,汇编之后,按 键开始进行仿真。
仿真结果如下:
仿真结果描述:
按“开始”键,秒表开始计时;按“暂停”键,秒表暂停计时;再按“开始”键,秒表继续计时;按“清零”键,秒表清零。
八、心得体会
虽然秒表是一个非常简单的功能,但要在单片机中使用汇编语言来实现这个功能,仍然花了我不少心思。
首先是计时的问题,由于单片机计时器最大只能计时65.5ms,因此要实现毫秒位的变化,我采用了软件计时的方法,单片机只需计时10ms,然后用软件重复10次,即可达到计时100ms的目的。
显示方面,为了使编程简单,我使用了静态显示。不过这使得占用I/O口线过多,而且连线复杂繁琐,为实物的制作带来了不便。在以后的学习和应用中我会努力加深动态扫描显示的理解,争取熟练运用。
根据书本知识,我们一开始只给P0口加上了上拉电阻,但是实物做成后我们发现P1和P2口得输出显示非常暗,初步确定是驱动能力不足的问题后,我们给二者也加上了上拉电阻,结果使得显示正常了。由此我们了解到,实践才是检验真理的唯一标准,有时候书本上的知识需要经过实践的改进,才能运用到实际中。
此次课程设计巩固了我的基础知识,提高了我的应用水平,锻炼了我的动手能力,使我受益匪浅。然而,在吸取经验的同时,我也吃了不少教训。在编程、仿真、焊接方面都走了不少弯路。但是,学则要有所收获,经过此次的锻炼,我在很多方面都已经有所提高,知识也掌握得更加扎实了。
在今后的学习和实践中,我将继续努力钻研,提高自己,争取在学术和记忆上获得更大的进步。
九、致谢
本设计是在李芳老师的悉心指导下完成的,李老师渊博的知识,严谨的治学态度,一丝不苟的工作作风,平易近人的性格都是我学习的楷模。在论文的研究及整理期间,李老师给了我很大的支持和鼓励,才使得论文得以顺利的完成,在此谨向导师表示忠心的感谢和崇高的敬意。
同时还要感谢同学们,他们也给了我很大的支持和帮助。
十、参考文献
1)《微控制器与接口技术》.虞沧.电子工业出版社.2012.10 2)李朝青.单片机原理及接口技术[M].北京:北京航空航天大学出版社.2005.10 3)夏继强.单片机实验北京:北京航空航天大学出版社.2001.4)孙德辉,郑士富.微型计算机控制系统.北京:冶金工业出版社.2002
5)肖洪兵.跟我学用单片机.北京:北京航空航天大学出版社.2002.8 6)陈汝全.实用微机与单片机控制技术.电子科技大学出版社.1995.7 7)王涌.单片机与嵌入式系统应用[J],2002(3):58-61 8)罗亚非.凌阳16位单片机应用基础[M].北京:北京航空航天大学出版社.2003.5 9)李庆.Keil C51 使用详解 V3.0[M].北京:北京理工大学出版
10)李华.MCS-51系列单片机实用接口技术.北京航空航天大学出版社.1993,162-229 11)温钢云,黄道平.计算机控制技术.广州:华南理工大学出版社.2002 12)肖洪兵.单片机应用技术.自编教材
13)孙德辉,郑士富.微型计算机控制系统.北京:冶金工业出版社.2002 14)韩来吉.用 89C51实现急救车优先的交通灯控制系统[J] 15)陈志强,芮延年,城市路口交通灯多级智能控制方法的研究J.2007 16)李广弟.单片机基础.北京:北京航空航天大学出版社.2001,56 17)马忠梅等.单片机的C语言应用程序设计.北京航空航天出版社.1999
18)刘瑞新,单片机原理及应用教程,北京机械工业出版社,2003 19)李传军,单片机原理及应用,河南科技出版社,2006 20)饶庆,89C51单片机课程设计实训教材,北京人民邮电出版社,2003
第五篇:单片机课程设计之秒表
单片机课程设计报告
题目:基于stc89c52rc的秒表设计
学生:唐伟轩 11071339
指导老师:
日期:2013年12月8日
基于stc89c52rc的秒表设计
此设计中硬件部分由王华杲完成,软件由唐伟轩完成一、设计要求
使用STC89C52RC单片机设计一个2位LED数码管显示的秒表,显示时间为00—99秒,每秒自动加1,设计开始、停止、复位键。
二、设计思路
为了功能拓展,本设计硬件部分采用了四位一体共阳数码管作为显示单元,采用三极管进行阳极位选驱动,阴极直接接限流电阻接单片机P0口;采用“4+1”按键,分别为“系统复位”、“计数停止”、“复位秒表”、“翻页”、“预留”功能,“系统复位”为系统总复位按键;“计数停止”和“复位秒表”按键接到单片机中断口(即INT0引脚与INT1引脚)。单片机的时钟晶振为12M。
软件部分设计采用“动态刷新”和“定时器精确计时”的方式实现秒表功能,时间最小刻度为0.01s,同时采用外部按键中断的方式实现“计数停止”、“复位秒表”功能,采用按键扫描实现“翻页”功能。
本设计秒表可在一次计时钟保存最多十次计时值。
三、硬件设计与分析
1.单片机最小系统
51单片机最小系统由复位电路和时钟电路组成。
51单片机的Reset引脚为单片机的复位引脚,在该引脚上保持两个机器周期的高电平,单片机复位,PC值复位至0000H,并在Reset引脚恢复至低电平时重新开始执行ROM中的程序,由此可设计典型单片机上电复位与手动复位一体的复位电路,该自动复位电路能在上电后在单片机Reset引脚上保持ms级的高电平时间,满足设计要求,电路如图3.1所示。
51单片机的时钟系统可选择使用外部时钟或内部RC时钟(不准确),xtal1与xtal2引脚为单片机外部时钟引脚,51单片机的机器周期为12个时钟周期,采用12M晶体振荡器时,机器周期为1us,外部晶振电路如图3.2所示。
图3.1图3.22.数码管显示电路设计
本设计中采用4位一体共阳数码管,4个共阳极使用三极管s9012进行控电平的电流放大,8个共阴极接限流电阻接到单片机P0口;51单片机P0属于漏极开路结构,在老式51单片机中作为外部数据总线使用,可在较高输入输出频率下使用,在本设计中,使用了P0的该特点,作为数码管的段码数据控制。
3.中断按键与按键扫描
51单片机支持两路外部中断,分别为INT0引脚和INT1引脚,恰当使用外部中断功能可极大地提高外部触发信号的响应速度。本设计中,共使用了4个按键,其中两个接在两个外部中断引脚上以提高其响应速度实现高级功能,另外两个按键接普通IO实现一般功能。
4.电路图
图3.3四、软件设计与分析
1.刷新显示程序
数码管显示部分由于其公共端共接结构,需采用刷新显示的方式驱动,驱动部分C语言程序如下:
P1=0xFE;//四位数码管扫描
P0=codetab[one];
delay(3);
P1=0xFD;
P0=codetab[two];
delay(3);
P1=0xFB;
P0=0X7F;//显示小数点
delay(3);
P0=codetab[three];
delay(3);
P1=0xF7;
P0=codetab[four];
delay(3);
2.定时器的应用
51单片机中含有两个定时器,分别为T0和T1,共有13位计数定时、16位计数定时、8位自动重装计数定时三种工作模式,每个定时器可产生独立的中断信号。51单片机定时器采用“向上计数”的方式,即加满溢出后产生中断,定时时钟源为系统时钟,每1个机器周期加1,本设计中采用12M外部时钟,对应定时器时钟为1us,要实现0.01s精度显示,即定时最大为10ms,这里采用定时20us,C语言程序设计如下:
void time0()
{//定时器初始化,定时20us
TMOD=0X01;
TH0 =0XF8;
TL0 =0X30;
//TR0 =1;
EA=1;
ET0 =1;
}
3.程序流程图
图4.1五、数据测试
1.秒表计时误差:小于0.1% 2.各按键触发功能是否正常:正常 3.最大单次计时记录次数:10次
六、参考文献
【1】刘焕成.《工程背景下的单片机原理及系统设计(第2版)》.清华大学出版社.2011年10月