第一篇:单片机课程设计之秒表
单片机课程设计报告
题目:基于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月
第二篇:单片机课程设计报告多功能秒表
青岛理工大学琴岛学院
课程设计报告
课题名称:单片机原理课程设计 学院:机电工程系
专业班级:电气工程及其自动化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
第四篇:单片机课程设计秒表系统设计
单片机课程设计
学院:信息工程专业:
——秒表系统设计
一,设计目的:
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电片机的实践与应用》 清华大学出版社
第五篇:实习报告-单片机秒表设计
目 录
第1章 单片机系统硬件电路.................................................................................1
1.1 实习目的..............................................................................................1 1.2 单片机型号及特性..............................................................................1 1.3 单片机开发板......................................................................................2
第2章 单片机应用系统软件.................................................................................5
2.1 STC下载软件......................................................................................5 2.2 Keil软件...............................................................................................5 2.3 外部电路驱动......................................................................................6
第3章 00-59秒计时器设计..................................................................................7
3.1 电路原理图..........................................................................................7 3.2 设计原理..............................................................................................7 3.3 实现方法..............................................................................................8
第4章 实习总结.....................................................................................................9
4.1 实习体会..............................................................................................9 4.2 设计硬件体会......................................................................................9
参考文献.................................................................................................................10 附录1 实物图........................................................................................................11 附录2 系统主要程序............................................................................................12
I
东北石油大学生产实习总结报告
第1章 单片机系统硬件电路
1.1 实习目的
了解单片机最小系统;
了解keilc软件操作,程序下载及调试方法; 掌握单片机外部电路使用; 掌握键盘和数码管显示编程方法; 应用单片机开发板进行实验开发;
1.2 单片机型号及特性
1、AT89S51单片机功能及特点
5l系列单片机中典型芯片(AT89S51)采用40引脚双列直插封装(DIP)形式,内部由CPU,4kB的ROM,256 B的RAM,2个16b的定时/计数器TO和T1,4个8 b的I/O端I:IP0,P1,P2,P3,一个全双功串行通信口等组成。特别是该系列单片机片内的Flash可编程、可擦除只读存储器(E~PROM),使其在实际中有着十分广泛的用途,在便携式、省电及特殊信息保存的仪器和系统中更为有用。5l系列单片机提供以下功能:4 kB存储器;256 BRAM;32条I/O线;2个16b定时/计数器;5个2级中断源;1个全双向的串行口以及时钟电路。空闲方式:CPU停止工作,而让RAM、定时/计数器、串行口和中断系统继续工作。掉电方式:保存RAM的内容,振荡器停振,禁止芯片所有的其他功能直到下一次硬件复位。5l系列单片机为许多控制提供了高度灵活和低成本的解决办法。充分利用他的片内资源,即可在较少外围电路的情况下构成功能完善的超声波测距系统。ATMEL的AT89S51是一种高效微控制器,AT89S2051是它的一种精简版本。AT89S单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
2、STC89C52单片机功能及特点
STC89C52是一种带8K字节闪烁可编程可檫除只读存储器(FPEROM-Flash Programable and Erasable Read Only Memory)的低电压,高性能COMOS8的微处理器,俗称单片机。该器件采用ATMEL搞密度非易失存储器制造技术制造,与工业
东北石油大学生产实习总结报告
标准的MCS-51指令集和输出管脚相兼容。
STC89C52完全兼容AT89C51 AT89C52 AT89S51 AT89S52 而且加入了更多新功能, 它内部有1280字节的SRAM、8-64K字节的内部程序存储器、2-8K字节的ISP引导码、除P0-P3口外还多P4口(PLCC封装)、片内自带8路8位AD(AD系列),片内自带EEPROM、片机自带看门狗、双数据指针等。
1.3 单片机开发板
1、复位电路
图1-1复位电路图
复位是单片机的初始化操作。其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需按复位键重新启动。
RST引脚是复位信号的输入端。复位信号是高电平有效,其有效时间应持续24个振荡周期(即二个机器周期)以上。若使用频率为6MHz的晶振,则复位信号持续时间应超过4us才能完成复位操作。
东北石油大学生产实习总结报告
2、晶振电路
图1-2晶振电路图
简单地说,没有晶振,就没有时钟周期,没有时钟周期,就无法执行程序代码,单片机就无法工作。
对于一个高可靠性的系统设计,晶体的选择非常重要,尤其设计带有睡眠唤醒,往往用低电压以求低功耗的系统,这是因为低供电电压使提供给晶体的激励功率减少,造成晶体起振很慢或根本就不能起振,这一现象在上电复位时并不特别明显,原因是上电时电路有足够的扰动,很容易建立振荡,在睡眠唤醒时,电路的扰动要比上电时小得多,起振变得很不容易,在振荡回路中,晶体既不能过激励,容易振到高次谐波上,也不能欠激励不容易起振,晶体的选择至少必须考虑、谐振频点、负载电容、激励功率、温度特性长期稳定性。
8051的时钟周期即CPU的晶振的振荡频率的振荡周期(频率的倒数)当振荡频率为10MHZ时,振荡周期=1/10MHZ=0.1us机器周期是完成一个基本操作的时间单元,一个机器周期=12个时钟周期,当振荡频率为10MHZ时,机器周期=12x0.1=1.2us 8051的指令周期,指取出并执行一条指令的时间。一般为1-4个机器周期
3、键盘和中断
矩阵式键盘中,行、列线分别连接到按键开关的两端,行线通过上拉电阻接到+5V上。当无键按下时,行线处于高电平状态;当有键按下时,行、列线将导通,此时,行线电平将由与此行线相连的列线电平决定。这一点是识别矩阵按键是否被按下的关键。然而,矩阵键盘中的行线、列线和多个键相连,各按键按下与否均影响该键所在行线和列线的电平,各按键间将相互影响,因此,必须将行线、列线信号配合起来作适当处理,才能确定闭合键的位置。
按键按下时,与此键相连的行线与列线导通,行线在无键按下时处在高电平,显然,如果让所有的列线也处在高电平,那么,按键按下与否不会引起行线电平的变化,因此,必须使所有列线处在低电平,只有这样,当有键按下时,该键所在的东北石油大学生产实习总结报告
行电平才会由高电平变为低电平。CPU根据行平电的变化,便能判定相应的行有键按下。8号键按下时,第2行一定为低电平,然而,第2行为低电平时,能否肯定是8号键按下呢?回答是否定的,因为9、10、11号键按下同样使第2行为低电平。为进一步确定具体键,不能使所有列线在同一时刻都处在低电平,可在某一时刻只让一条列线处于低电平,其余列线均处于高电平,另一时刻,让下一列处在低电平,依次循环,这种依次轮流每次选通一列的工作方式称为键盘扫描。
外部中断请求源:即外中断0和1,经由外部管脚引入的,在单片机上有两个管脚,名称为INT0、INT1,也就是P3.2、P3.3这两个管脚。在内部的TCON中有四位是与外中断有关的。IT0:INT0触发方式控制位,可由软件进行置位和复位,IT0=0,INT0为低电平触发方式,IT0=1,INT0为负跳变触发方式。IE0:INT0中断请求标志位。当有外部的中断请求时,这位就会置1(这由硬件来完成),在CPU响应中断后,由硬件将IE0清0。IT1、IE1的用途和IT0、IE0相同。内部中断请求源TF0:定时器T0的溢出中断标记,当T0计数产生溢出时,由硬件置位TF0。当CPU响应中断后,再由硬件将TF0清0。TF1:与TF0类似。TI、RI:串行口发送、接收中断,中断允许寄存器IE在MCS-51中断系统中,中断的允许或禁止是由片内可进行位寻址的8位中断允许寄存器IE来控制的。
图1-3矩阵式键盘的结构
东北石油大学生产实习总结报告
第2章 单片机应用系统软件
2.1 STC下载软件
图2-1 总体方案原理框图
2.2 Keil软件
目前流行的51系列单片机开发软件是德国Keil公司推出的Keil C51软件,它是一个基于32位Windows环境的应用程序,支持C语言和汇编语言编程,其6.0以上的版本将编译和仿真软件统一为μVision(通常称为μV2)。Keil提供包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,由以下几部分组成:μVision IDE集成开发环境(包括工程管理器①、源程序编辑器②、程序调试器③,C51编译器、A51汇编器、LIB51库管理器、BL51连接/定位器、OH51目标文件生成器以及 Monitor-
51、RTX51实时操作系统。
东北石油大学生产实习总结报告
应用Keil进行软件仿真开发的主要步骤为:编写源程序并保存—建立工程并添加源文件—设置工程—编译/汇编、连接,产生目标文件—程序调试。Keil使用“工程”(Project)的概念,对工程(而不能对单一的源程序)进行编译/汇编、连接等操作。工程的建立、设置、编译/汇编及连接产生目标文件的方法非常易于掌握。首先选择菜单File-New…,在源程序编辑器中输入汇编语言或C语言源程序(或选择File-Open…,直接打开已用其它编辑器编辑好的源程序文档)并保存,注意保存时必须在文件名后加上扩展名.asm(.a51)或.c;然后选择菜Project-New Project…,建立新工程并保存(保存时无需加扩展名,也可加上扩展名.uv2);工程保存后会立即弹出一个设备选择对话框,选择CPU后点确定返回主界面。这时工程管理窗口的文件页(Files)会出现“Target1”,将其前面+号展开,接着选择Source Group1,右击鼠标弹出快捷菜单,选择“Add File to Group „Source Group1‟”,出现一个对话框,要求寻找并加入源文件(在加入一个源文件后,该对话框不会消失,而是等待继续加入其它文件)。加入文件后点close返回主界面,展开“Source Group1”前面+号,就会看到所加入的文件,双击文件名,即可打开该源程序文件。紧接着对工程进行设置,选择工程管理窗口的Target1,再选择Project-Option forTarget „Target1‟(或点右键弹出快捷菜单再选择该选项),打开工程属性设置对话框,共有8个选项卡,主要设置工作包括在Target选项卡中设置晶振频率、在Debug选项卡中设置实验仿真板等,如要写片,还必须在Output选项卡中选中“Creat Hex Fi”;其它选项卡内容一般可取默认值。工程设置后按F7键(或点击编译工具栏上相应图标)进行编译/汇编、连接以及产生目标文件。
2.3 外部电路驱动
1、串口
2、定时器
3、中断
东北石油大学生产实习总结报告
第3章 00-59秒计时器设计
3.1 电路原理图
图3-1电路原理图
3.2 设计原理
在设计过程中我们用一个存储单元作为秒计数单元,当一秒钟到来时,就让秒计数单元加 1,当秒计数达到 60 时,就自动返回到 0,从新秒计数。
对于秒计数单元中的数据要把它十位数和个数分开,方法仍采用对 10 整除和对 10 求余。
东北石油大学生产实习总结报告
在数码上显示,仍通过查表的方式完成。
一秒时间的产生在这里我们采用软件精确延时的方法来完成,经过精确计算得到 1 秒时间为 1.002 秒。
图3-1 程序流程图
3.3 实现方法
系统的软件设计也是工具系统功能的设计。单片机软件的设计主要包括执行软件(完成各种实质性功能)的设计和监控软件的设计。单片机的软件设计通常要考虑以下几个方面的问题:
(1)根据软件功能要求,将系统软件划分为若干个相对独立的部分,设计出合理的总体结构,使软件开发清晰、简洁和流程合理;
(2)培养良好的编程风格,如考虑结构化程序设计、实行模块化、子程序化。既便于调试、链接,又便于移植和修改;
(3)绘制程序流程图;(4)合理分配系统资源;
(5)为程序加入注释,提高可读性,实施软件工程;
东北石油大学生产实习总结报告
第4章 实习总结
4.1 实习体会
大约20天的的实习已经结束了,通过这次的实习锻炼了我们的实践能力,也是对我们以后的实际工作能力的具体训练和考察过程。现在是一个高科技的时代,单片机已经成为当今计算机应用中空前活跃的领域。因此对于我们这一专业的同学来说,学好单片机,并正确应用单片机是非常重要的。
此次单片机课程设计,从选题到定稿,从理论到实践,学到了很多的东西。同时不仅巩固了以前所学过的知识,而且还学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,要把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。这次的课程设计还让我学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。更重要的是,我在这一设计过程中,学会了坚持不懈,不轻言放弃。
4.2 设计硬件体会
设计过程,常有一些不如意,但毕竟这是第一次做,难免会遇到各种各样的问题。在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。在整个设计中也培养了我独立工作的能力,树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。而且大大提高了动手的能力,使我充分体会到了在创造过程中探索的艰难和成功时的喜悦。
单片机实习虽然结束了,但通过实习所学到的东西将长久存在。相信这次单片机设计带给我们的严谨的学习态度和一丝不苟的科学作风将会给我们未来的工作和学习打下一个更坚实的基础。
东北石油大学生产实习总结报告
参考文献
[1] 张占松,孙时生,伍言真.电路和系统的仿真实践.北京:科学出版社电路.2000年1月
[2] Akagi H.Kanazawa Y ,Nabe A.Instantaneous reactive power compensators comprising switching devices without energy storage components.IEEE Trans.Ind.Applicat.,1984,20(3).625-630 [3] Peng F Z, Akagi H,A H;Nabae A.A novel harmonic power filter.PESC Record,1988,1151-1159 [4] 朱东起,姜新建,马大铭.无源和有源滤波器构成的并联型综合电力滤波系统.北京:清华大学学报(自然科学版),1999,39(3):49-52 [5] 邓肖粤、胡晓云《EDA在电子技术教学中的应用》 《实验与探索》 2000年12月
[6] 张占松,孙时生,伍言真.电路和系统的仿真实践.北京:科学出版社电路.2000年1月
[7] 郑春龙.Pspice在数模混合电路分析中的应用. 电子技术.1999(12)[8] 纪良文,蒋静坪.机器人超声测距数据的采集与处理.电子技术应用.2001(4)
东北石油大学生产实习总结报告
附录1 实物图
东北石油大学生产实习总结报告
附录2 系统主要程序
#include
code unsigned char tab[]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};// 0-9
unsigned char Shiwei;//定义十位 unsigned char Gewei;//定义个位 void delay(unsigned int cnt){ while(--cnt);} main(){ TMOD |=0x01;//工作在模式1,16位定时 TH0=(65535-45872)/256;TL0=(65535-45872)%256;IE= 0x82;//打开中断 TR0=1;
//打开定时开关
while(1)
{
P0=Shiwei;//显示十位
P1=0xdf;
delay(300);
//短暂延时
P0=Gewei;//显示个位
P1=0xef;
delay(300);
} }
/*
定时器中断函数
*/
东北石油大学生产实习总结报告
void tim(void)interrupt 1 using 1 { static unsigned char second,count;TH0=(65535-45872)/256;TL0=(65535-45872)%256;
count++;
if(count==20)
{
count=0;
second++;
//秒加1
if(second==60)
second=0;Shiwei=tab[second/10];//十位显示值处理
Gewei=tab[second%10];//个位显示处理
}
}
东北石油大学生产实习总结报告