单片机课程设计总结报告参考模板.docx

上传人:b****8 文档编号:10969933 上传时间:2023-02-24 格式:DOCX 页数:28 大小:264.34KB
下载 相关 举报
单片机课程设计总结报告参考模板.docx_第1页
第1页 / 共28页
单片机课程设计总结报告参考模板.docx_第2页
第2页 / 共28页
单片机课程设计总结报告参考模板.docx_第3页
第3页 / 共28页
单片机课程设计总结报告参考模板.docx_第4页
第4页 / 共28页
单片机课程设计总结报告参考模板.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

单片机课程设计总结报告参考模板.docx

《单片机课程设计总结报告参考模板.docx》由会员分享,可在线阅读,更多相关《单片机课程设计总结报告参考模板.docx(28页珍藏版)》请在冰豆网上搜索。

单片机课程设计总结报告参考模板.docx

单片机课程设计总结报告参考模板

湖州师范学院求真学院

课程设计总结报告

 

课程名称单片机应用系统设计

设计题目基于STC89C51的数字电子钟设计

 

专业电子科学与技术

班级080835

姓名张静

学号12

指导教师李祖欣吴小红

报告成绩

 

求真学院信息与工程系

二〇一一年六月一日

《单片机应用系统设计》课程设计任务书

一、课题名称

《基于STC89C52的数字电子钟设计》

二、设计任务

基本任务:

1.采用STC单片机和键盘,设置4位LED数码管显示的电子时钟;

2.上电时,显示12:

00并且“:

”间隔500ms闪烁,其中“:

”代表秒功能;

3.具有闹钟设定、闹铃功能。

4.通过键盘可修改时间。

发挥任务:

1.实现时钟整点“嘟”声提示功能;

2.实现秒表功能。

秒表具有计时开始,计时结束,计时复位等功能。

三、设计报告撰写规范

单片微机应用系统设计总结报告正文,主要含以下内容(硬件、软件各部分内容也可组合起来进行撰写说明):

1.系统总体设计方案(画出系统原理框图、方案的论证与比较等内容);

2.硬件系统分析与设计(各模块或单元电路的设计、工作原理阐述、参数计算、元器件选择、完整的系统电路图、系统所需的元器件清单。

等内容);

3.软件系统分析与设计(各功能模块的程序设计流程图与说明、软件系统设计、软件抗干扰措施、完整的程序等内容);

4.系统仿真调试与参数测量(使用仪器仪表、故障排除、电路硬件和软件调试的方法和技巧、指标测试的参数和波形、测量误差分析);

5.总结(本课题核心内容及使用价值、电路设计、软件设计的特点和选择方案的优缺点、改进方向和意见等);

6.按统一格式列出主要参考文献。

《基于STC89C51的数字电子钟设计》

课程设计总结报告

一、系统总体方案

本次设计时钟电路,使用了AT89c51单片机芯片控制电路,单片机控制电路简单且省去了很多复杂的线路,使得电路简明易懂,使用键盘上的按键来调整时钟的时、分、秒,用一扬声器来进行定时提醒,同时使用汇编程序来控制整个时钟显示,使得编程变得更容易,这样通过四个模块:

键盘、单片机芯片、扬声器、显示屏即可满足设计要求。

如图1-1为数字钟总体设计框图。

本设计的软件程序包括主程序如图1-2、中断子程序如图1-3、打铃子程序、时钟显示子程序、查询时间表切换程序和延时子程序等等。

另外,由于电路中有四个按键,还另外设计了防抖动程序来防止干扰

本设计的硬件包括89c51芯片,+5V电源,共阳八段数码管4个,三极管,电阻若干,导线若干

 

图1-1数字钟总体设计框图

二、单片机概述

1、AT89c51单片机

单片机的发展及应用

单片机诞生于20世纪70年代末,经历了SCM、MCU、SoC三大阶段。

单片机由运算器、控制器、存储器、输入输出设备构成单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。

目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。

工业方面,仪器仪表方面,消费类电子产品,通信方面,武器装备等。

单片机的引脚

  

图1-4单片机的引脚

40个引脚按功能大致可分为4类:

电源、时钟、控制和I/O引脚。

(1)电源:

  VCC-芯片电源,接+5V;VSS-接地端;

(2)时钟:

XTAL1、XTAL2-晶体振荡电路反相输入端和输出端。

(3)控制线:

控制线共有4根,

ALE/PROG:

地址锁存允许/片内EPROM编程脉冲

 ①ALE功能:

用来锁存P0口送出的低8位地址

 ②PROG功能:

片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。

PSEN:

外ROM读选通信号。

RST/VPD:

复位/备用电源。

  ①RST(Reset)功能:

复位信号输入端。

  ②VPD功能:

在Vcc掉电情况下,接备用电源。

EA/Vpp:

内外ROM选择/片内EPROM编程电源。

  ①EA功能:

内外ROM选择端。

  ②Vpp功能:

片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。

(4)I/O线

单片机的应用注意事项

二、键盘电路

(一)键盘扫描概述

此次用到四个键,即K8,K9,K10,K11键。

K8和K9键分别是加一和减一键,主要是对时钟和闹钟操作。

K11键是对时钟的模式切换,在这里一共有5种模式,当r0=1,对时钟的分加、减一;当R0=2时,对时钟的时加、减一;当R0=3时,对闹钟的分加。

减一;当R0=4时,对闹钟的时加、减一;当R0=5时,切换到秒表功能;当R0=6时,返回实时时钟显示。

K10键是对秒表的模式切换,当R6=1时,关外部中断一;当R6=2时,开外部中断一,开始秒表计时;当R6=3时,关外部中断一,暂停秒表计时。

(二)键盘电路图

(三)工作原理

先对芯片片。

P2.4口置低电平,即表示其接地。

再判断P2.3是否为低电平,若为则R0加一。

反之,判断P2.0是否为低电平,若为则判断其属于哪一个模式,在进行加一操作。

反之,判断P2.1是否为低电平,若为则判断其属于哪一个模式,在进行减一操作。

反之,判断P2.2是否为低电平,若为则判断其属于哪一个模式,进行秒表功能。

反之,返回。

(四)硬件电路注意的问题

在编程时要注意键盘的去抖,所以在判断一个键盘的按下之后,进行一段延时。

(五)程序流程图:

如图1-5

三、显示电路

(一)显示电路概述

我运用四个共阳极LED显示器,且为8段。

并且将所有位的段码线的相应段并联起来,由一个8为I/O口控制,我用的是P0口。

而且各位的共阳极分别有相应的I/O线控制,形成各位的分时选通,这里我运用了P1.7,P1.6,P1.5,P1.4分别作为时的十位,时的个位,分的十位和分的个位选通线。

且当其端口为低电平时,改位选通。

(二)用到的电路图

(三)用到动态扫描工作原理

时间显示是先分个位计算显示,然后是分十位计算显示,再是时个位计算显示,最后是时十位计算显示。

当显示分个位,置P1.4为低电平;当显示分十位,置P1.5为低电平;当显示分时个位,置P1.6为低电平;当显示时十位,置P1.7为低电平。

(四)硬件电路注意的问题

要注意你运用的LED显示器,是共阳极的还是共阴极的,在设置TAB表。

(五)程序流程:

如图1-6

(六)、编程注意点

设置TAB表时,要注意有两个LED显示器是反过来的,它的TAB表要根据实际情况自己计算而得。

否则显示器的显示值就是错误的。

四、蜂鸣器

(一)蜂鸣器电路概述

蜂鸣器电路,由P3.2口控制,当定时的闹钟时间和实时时钟显示时间相同时,则置P3.2口为低电平。

此时三极管导通,蜂鸣器响。

(二)蜂鸣器电路

五、系统调试

(一)所需软件:

①PL2303驱动软件包;

②各类文本编辑器软件,如Eidt,记事本等,编辑汇编语言源程序*.ASM;

③集成环境WAVE6000软件:

将汇编语言源程序编译成*.hex文件(也可直接

在此环境下编辑汇编语言源程序*.ASM);

④官方网站提供的STC-ISP软件(http//www.MCU-M):

将汇编语言源

程序编译成的*.hex文件在线下载到STC单片机中

(二)其调试技巧与方法:

A.测试与计算机的通信是否正常,即能否正常下载;

B.测试LED和LED数码管各段是否正常;

C.测试蜂鸣器是否正常发声;

D.测试继电器是否正常吸合与释放;

(三)在调试过程中的问题:

在刚开始程序下载时,串口总是找不到,我们通过修改COM..来下载程序。

下载好后,发现数码管没有反应,我们通过修改程序来解决这个问题。

还有有时按键没有反应,后来发现是接触不好,我们在调试时,把板子放到桌面上来解决这个问题。

六、总结

经过两周的努力,在指导老师的帮助下,终于完成了该电子时钟的课程设计,在此次的数字钟设计过程中,更进一步地熟悉了芯片的结构及掌握了各芯片的工作原理和其具体的使用方法。

此次的数字钟设计重在于编程,通过这次的设计实验更进一步地增强了实验的动手能力。

在设计过程中遇到的问题也是常有发生的,我们能做的就是想办法解决问题。

刚开始时,程序编好后,下载到实验板中模块不能够切换显示,我想了很多方法。

后来在老师的提醒下,我才发现应该对输入的值进行拆分,即拆分成个位和十位。

再送入相应的程序中显示。

最后,在编译秒表功能时,无法实现,后来在老师的指导下,重新添加一个外部中断寄存器,最终解决了这个问题。

这次的课程设计终于完成了,在此次课程设计中我们获益非浅,其过程中遇到了很多编程问题和操作问题,但最终我们克服了。

附录一:

源程序清单

SECONDEQU30H;定义计数存储单元

MBUFEQU31H;定义分计数存储单元

HBUFEQU32H;定义时计数存储单元

MBUF0EQU33H;定义分个位计数存储单元

MBUF1EQU34H;定义分十位计数存储单元

HBUF0EQU35H;定义时个位计数存储单元

HBUF1EQU36H;定义时十位计数存储单元

DPBIT24H.3;定义半秒闪烁位单元

naosequ40h;定义闹钟分计数存储单元

naofequ41h;定义闹钟时计数存储单元

nmBUF0EQU42H;定义闹钟分个位计数存储单元

nmBUF1EQU43H;定义闹钟分十位计数存储单元

nHBUF0EQU44H;定义闹钟时个位计数存储单元

nHBUF1EQU45H;定义闹钟时十位计数存储单元

NMBUF01equ70h;定义秒时个位计数存储单元

NMBUF11equ71h;定义秒时十位计数存储单元

miaoequ72h;定义秒毫秒计数存储单元

nnhbufequ73h;;定义秒计数存储单元

nnhbuf0equ74h;定义秒时个位计数存储单元

nnhbuf1equ75h;定义秒时十位计数存储单元

ORG0000H

LJMPMAIN

ORG000BH

ljmpitop

org001Bh

ljmpitop1

ORG0100H

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;主程序;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;

MAIN:

MOVTL0,#0b0H

MOVTH0,#3cH

movtmod,#11h

movtl1,#0f0h

movth1,#0d8h

setbet0

setbet1

setbea

MOVR2,#20

movr0,#00

movr6,#00h

MOVMBUF0,#0

MOVMBUF1,#0

MOVHBUF0,#2

MOVHBUF1,#1

MOVnMBUF0,#0

MOVnMBUF1,#0

MOVnHBUF0,#0

MOVnHBUF1,#0

MOVMBUF,#00H

MOVHBUF,#12H

MOVnaof,#00H

MOVnaos,#00H

SETBTR0

LOOP:

NOP

acallkey调用键盘扫描程序

ACALLDISP调用显示程序

lcallbb调用闹钟程序

AJMPLOOP

;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;中断程序;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;

itop:

PUSHACC;中断1

MOVTL0,#0b0H

MOVTH0,#3cH

DJNZR2,INT03

MOVR2,#20中断20次,每次中断时间50ms

CPLDP

DJNZSECOND,OUTT0秒减完不为0,则跳到outto,

MOVSECOND,#60对秒重新赋初值,60

ACALLADD1调用add1

AJMPOUTT0

INT03:

MOVA,R2

CJNEA,#20,OUTT0

CPLDP

OUTT0:

POPACC

RETI

itop1:

PUSHACC;中断2

movtl1,#0f0h

movth1,#0d8h

ACALLADD2

AJMPOUTT1

OUTT1:

POPACC

RETI

ADD1:

MOVA,mbuf;分十进制加1子程序,

ADDA,#01

DAA十进制转换为bcd码

MOVmbuf,A

CJNEA,#60h,ADD13;判断分十位是否到六十,若未到60,跳转到ADD13

Clrp3.2

Lcalldelay2

Setbp3.2

MOVMBUF0,#0

MOVMBUF1,#0

MOVMBUF,#0

MOVA,HBUF

ADDA,#01;时十进制加一

DAA

MOVHBUF,A

ADD13:

MOVA,MBUF

ANLA,#0FH;分值拆成分个位和分十位

MOVMBUF0,A

MOVA,MBUF

SWAPA;高四位与第四位转换

ANLA,#0FH

MOVMBUF1,A

MOVA,HBUF

CJNEA,#24H,ADD14;判断时是否到24,若未到24,跳转到ADD14

MOVHBUF0,#0

MOVHBUF1,#0

MOVHBUF,#0

ADD14:

MOVA,HBUF

ANLA,#0FH;时值拆成时个位和时十位

MOVHBUF0,A

MOVA,HBUF

SWAPA

ANLA,#0FH

MOVHBUF1,A

RET

ADD131:

MOVA,NAOF

ANLA,#0FH;闹钟分值拆成分个位和分十位

MOVNMBUF0,A

MOVA,NAOF

SWAPA;高四位与第四位转换

ANLA,#0FH

MOVNMBUF1,A

ret

ADD141:

MOVA,NAOS

ANLA,#0FH;闹钟时值拆成时个位和时十位

MOVNHBUF0,A

MOVA,NAOS

SWAPA

ANLA,#0FH

MOVNHBUF1,A

RET

ADD2:

MOVA,MIAO;毫秒十进制加1子程序,

ADDA,#01

DAA

MOVMIAO,A

CJNEA,#100h,ADD15;判断毫秒是否到100,若未到100,跳转到ADD15

MOVNMBUF01,#0

MOVNMBUF11,#0

MOVMIAO,#0

MOVA,NNHBUF

ADDA,#01;秒十进制加一

DAA

MOVNNHBUF,A

ADD15:

MOVA,miao

ANLA,#0FH;毫秒拆成个位和十位

MOVnMBUF01,A

MOVA,miao

SWAPA;高四位与第四位转换

ANLA,#0FH

MOVnMBUF11,A

MOVA,nnHBUF

CJNEA,#60H,ADD16;判断时是秒否到60,若未到60,跳转到ADD16

MOVnnHBUF0,#0

MOVnnHBUF1,#0

MOVnnHBUF,#0

ADD16:

MOVA,nnHBUF

ANLA,#0FH;秒拆成时个位和时十位

MOVnnHBUF0,A

MOVA,nnHBUF

SWAPA

ANLA,#0FH

MOVnnHBUF1,A

RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;时钟显示程序;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DISP:

CJNER0,#00H,L1

LCALLDISP2

L1:

CJNER0,#01H,L2

lcalladd13将时拆成个位与十位

LCALLDISP4;调用时钟时显示

L2:

CJNER0,#02H,L3

lcalladd14

LCALLNEXT;调用时钟分显示

L3:

CJNER0,#03H,L4

lcalladd131

LCALLDISP41;调用闹钟时钟分显示

L4:

CJNER0,#04H,l5

lcalladd141

LCALLNEXT1

l5:

cjner0,#05h,exit

lcalldisp3

exit:

ret

DISP2:

MOVDPTR,#TAB2

MOVA,MBUF0

ACALLDSPM0

MOVDPTR,#TAB2

MOVA,MBUF1

ACALLDSPM1

MOVDPTR,#TAB1

MOVA,HBUF0

ACALLDSPH0

MOVDPTR,#TAB1

MOVA,HBUF1

ACALLDSPH1;调用时十位显示子程序

RET

DISP3:

MOVDPTR,#TAB2

MOVA,nMBUF01

ACALLDSPM0

MOVDPTR,#TAB2

MOVA,nMBUF11

ACALLDSPM1

MOVDPTR,#TAB1

MOVA,nnHBUF0

ACALLDSPH0

MOVDPTR,#TAB1

MOVA,nnHBUF1

ACALLDSPH1;调用时十位显示子程序

RET

DISP4:

MOVDPTR,#TAB2;修改时钟分

MOVA,MBUF0

ACALLDSPM0

MOVDPTR,#TAB2

MOVA,MBUF1

ACALLDSPM1

RET

NEXT:

MOVDPTR,#TAB1;修改时钟时

MOVA,HBUF0

ACALLDSPH0

MOVDPTR,#TAB1

MOVA,HBUF1

ACALLDSPH1

RET

DISP41:

MOVDPTR,#TAB2;修改闹钟分

MOVA,NMBUF0

ACALLDSPM0

MOVDPTR,#TAB2

MOVA,NMBUF1

ACALLDSPM1

RET

NEXT1:

MOVDPTR,#TAB1;修改闹钟时

MOVA,NHBUF0

ACALLDSPH0

MOVDPTR,#TAB1

MOVA,NHBUF1

ACALLDSPH1

RET

DSPM0:

MOVCA,@A+DPTR;分个位显示子程序

MOVP0,A

CLRP1.4

ACALLDY1MS

SETBP1.4

RET

DSPM1:

MOVCA,@A+DPTR;分十位显示子程序

MOVP0,A

CLRP1.5

ACALLDY1MS

SETBP1.5

RET

DSPH0:

MOVCA,@A+DPTR;时个位显示子程

MOVC,DP

MOVACC.7,C

MOVP0,A

CLRP1.6

ACALLDY1MS

SETBP1.6

RET

dSPH1:

MOVCA,@A+DPTR;时十位显示子程序

MOVP0,A

CLRP1.7

ACALLDY1MS

SETBP1.7

RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;时钟调试程序加1;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;

key:

clrp2.4

jbp2.3,key2

lcallDISP2

jbp2.3,key2

wait1:

lcallDISP2

jnbp2.3,WAIT1

incr0

cjner0,#06,KEY_EXIT

MOVR0,#0

LJMPKEY_EXIT

key2:

jbp2.0,key3

lcallDISP2

jbp2.0,key3

wait4:

lcallDISP2

jnbp2.0,WAIT4

cjner0,#01h,loop1

MOVA,MBUF

ADDA,#01;分十进制加1子程序,

DAA

MOVMBUF,A

CJNEA,#60h,KEY_EXIT;判断分十位是否到六十,若未到60,跳转到ADD13

MOVMBUF0,#0

MOVMBUF1,#0

MOVMBUF,#0对分单元赋初值0

LJMPKEY_EXIT

loop1:

cjner0,#02h,loop2

MOVA,HBUF

ADDA,#01;时十进制加1子程序

DAA

MOVHBUF,A

CJNEA,#24h,KEY_EXIT;判断分十位是否到24,若未到24,跳转到ADD13

MOVHBUF0,#0

MOVHBUF1,#0

MOVHBUF,#0对时单元赋初值

KEY_EXIT:

RET

;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;闹钟定时程序加1;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;

loop2:

cjner0,#03h,loop3

MOVA,naof

ADDA,#01;十进制加1子程序,

DAA

MOVnaof,A

CJNEA,#60h,KEY_EXI;判断分十位是否到六十,若未到60,跳转到ADD13

MOVnMBUF0,#0

MOVnMBUF1,#0

MOVnaof,#0对闹钟分单元赋初值

LJMPKEY_EXi

LOOP3:

CJNER0,#04H,KEY_EXI

MOVA,naos;分十进制加1子程序,

ADDA,#01

DAA

MOVnaos,A

CJNEA,#24h,KEY_EXIT;判断分十位是否到24,若未到24,跳转到ADD13

MOVnHBUF0,#0

MOVnHBUF1,#0

MOVnaos,#0对闹钟时单元赋初值

KEY_EXI:

ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;时钟调试程序减1;;;;;;;;;;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 制度规范

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1