单片机课程设计报告.docx

上传人:b****1 文档编号:14237664 上传时间:2023-06-21 格式:DOCX 页数:26 大小:328.82KB
下载 相关 举报
单片机课程设计报告.docx_第1页
第1页 / 共26页
单片机课程设计报告.docx_第2页
第2页 / 共26页
单片机课程设计报告.docx_第3页
第3页 / 共26页
单片机课程设计报告.docx_第4页
第4页 / 共26页
单片机课程设计报告.docx_第5页
第5页 / 共26页
单片机课程设计报告.docx_第6页
第6页 / 共26页
单片机课程设计报告.docx_第7页
第7页 / 共26页
单片机课程设计报告.docx_第8页
第8页 / 共26页
单片机课程设计报告.docx_第9页
第9页 / 共26页
单片机课程设计报告.docx_第10页
第10页 / 共26页
单片机课程设计报告.docx_第11页
第11页 / 共26页
单片机课程设计报告.docx_第12页
第12页 / 共26页
单片机课程设计报告.docx_第13页
第13页 / 共26页
单片机课程设计报告.docx_第14页
第14页 / 共26页
单片机课程设计报告.docx_第15页
第15页 / 共26页
单片机课程设计报告.docx_第16页
第16页 / 共26页
单片机课程设计报告.docx_第17页
第17页 / 共26页
单片机课程设计报告.docx_第18页
第18页 / 共26页
单片机课程设计报告.docx_第19页
第19页 / 共26页
单片机课程设计报告.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机课程设计报告.docx

《单片机课程设计报告.docx》由会员分享,可在线阅读,更多相关《单片机课程设计报告.docx(26页珍藏版)》请在冰点文库上搜索。

单片机课程设计报告.docx

单片机课程设计报告

单片机课程设计报告

              

题目:

电子日历和电子表

2003级自动化一班

    郭珍珍2003080901

    邓 明2003080931

    

指导老师:

张东波

     

完成日期:

2006年6月15日

.设计题目:

电子日历和电子表

.设计要求:

1.利用8031作为主控器组成一个电子日历和电子表;

2.上电或RESET后能自动显示当前时间(时:

分),首次上电复位显示为0时0分;以后各次均显示正确的当前时间;

3.利用4个LED显示管分时显示当前时间和日历;

4.利用尽可能少的小键盘(开关)实现

1)校正日历和时间,即当前的日历和时间输入计算机

2)显示选择:

时分显示/日历显示/报警显示

3)报警时间的设置

5.利用发光二极管作为报警指示,当报警时间到,二极管发光。

三.系统设计方案(简略):

在本次课程设计中经过我们的认真研究我们决定采用8031内部的定时/计数器T0作为时间基准,工作在定时状态时每隔100MS产生一次中断,每10次中断秒计数器加1。

由于本实验的CPU晶振频率是6MHZ,所以定时器T0的时间常数是3CB0H,即TH0=3CH,TL0=BOH。

以此作为电子日历和电子表的基本计时器。

时间常数=65536-6000000*0.1*(1/12)=15536=3CB0H

对于共阴极LED显示利用8155的动态扫描显示,8031的P0口的输出显示送到8155的地址AD口。

8155的PA,PB口输出。

PB口为显示管段输出口,通过驱动芯片7407接LED的a-d.p位。

输出相应的段码,PA口为显示管位输出口,它的PA0到PA3通过驱动芯片7406作为相应的位码输出。

利用两个开关L分别接8031的P1.0,P1.1对电子钟和电子日历的显示状态进行控制,并且完成相应的调时以及报警定时工作。

利用发光二极管接到8031的P3.0口,当报警时间到将P3.0置1完成报警显示

四.元件清单:

8155  一片        7407两片

7406  一片    开 关两个 

LED共阴极数码管四个    发光二极管一个

面包板一个  万用表一个

仿真头一个 拔线钳一把

镊子一把细导线若干

剪刀一把

五.设计原理图:

六.电气结构图:

七.使用说明书:

按键0的功能:

1、实现显示模式的转换:

不按时是显示时、分(时间)。

按下第一次是显示日、       月(日历)。

按下第二次是显示报警时、分(报警)。

按下第三次是显示秒、 十分之一秒。

按下第四次显示时、分。

如此进行按键循环

2、在按键1(调整鍵)动作后实现对日历,时间,报警时间的调整。

具体操作为当1键显示要调整的位时,0键实现对这一位的累加,即按下一次示数加一。

按键1的功能:

实现对显示时间(时间、日历、报警时间)要调整的位转换:

1、当前显示时、分时,按键1按下第一次调分位,按下第二次调时位,按下第三次循环到当前显示状态,不能调整。

2、当前显示日、月时,按键1按下第一次调日位,按下第二次调月位,按下第三次循环到当前显示状态,不能调整。

3、当前显示报警时、分时,按键1按下第一次调分位,按下第二次调时位,按下第三次循环到当前显示状态,不能调整。

在按键1的基础上通过按键0来实现调整。

八.软件设计:

主程序流程图:

时间中断子程序流程图:

显示子程序流程图:

0号键处理子程序流程图:

1号键处理子程序流程图:

程序清单

DISBUFEQU30H

BUF EQU20H

SECBUFEQU21H

MINBUFEQU22H

HOUBUFEQU23H

DAYBUFEQU24H

MONBUFEQU25H

ALARMMINEQU26H

ALARMHOUEQU27H

TEMP_BUF1EQU28H

TEMP_BUF2EQU29H

DISP_STATUSEQU2AH

CHG_BITEQU2BH

ALARMINGEQU2CH

KEYBUFEQU2DH

P_CONEQU7F00H

PORT_AEQU7F01H

PORT_BEQU7F02H

MODE1EQU0

MODE2EQU1

MODE3EQU2

MODE4EQU3

HOUCHGEQU4

MINCHGEQU5

MONCHGEQU6

DAYCHGEQU7

AHOUCHGEQU8

AMINCHGEQU9

ORG8000H

LJMPSTART

ORG8003H

LJMPINT_KEY0

ORG800BH

LJMPCLOCK

ORG8013H

LJMPINT_KEY1

ORG8030H

START:

MOVSP,#60H

MOVDPTR,#P_CON

MOVA,#03H;8155初始化PA,PB同为输出口

MOVX@DPTR,A

MOVA,#00H

MOVR1,#04H

MOVR0,#DISBUF

LP1:

MOV@R0,A

INCR0

DJNZR1,LP1

ANLTMOD,#0F0H

ORLTMOD,#01H

MOVTL0,#0B0H

MOVTH0,#3CH ;定时器0置初值

MOVBUF,#00H

MOVMINBUF,#00H

MOVHOUBUF,#00H;时间设初值00时00分

MOVDAYBUF,#01H

MOVMONBUF,#01H;日历设初值01月01日

MOVALARMMIN,#30H

MOVALARMHOU,#00H;报警时间设初值00时30分

MOVKEYBUF,#00H

SETBTR0

SETBET0;开中断0

SETBEA

SETBEX0

SETBEX1

SETBIT0

SETBIT1

CLRP3.0

MOVDISP_STATUS,#1

MOVCHG_BIT,#0

DISP1:

MOVA,DISP_STATUS

CJNE A,#1,DISP2

MOVTEMP_BUF1,HOUBUF

MOVTEMP_BUF2,MINBUF;时间放置暂时显示缓冲单元

SJMPDISP5

DISP2:

CJNE A,#2,DISP3

MOVTEMP_BUF1,MONBUF

MOVTEMP_BUF2,DAYBUF;日历放置暂时显示缓冲单元

SJMPDISP5

DISP3:

CJNE A,#3,DISP4

MOVTEMP_BUF1,ALARMHOU

MOVTEMP_BUF2,ALARMMIN;报警时间放置暂时显示缓冲单元

SJMPDISP5

DISP4:

CJNE A,#4,DISP5

MOVTEMP_BUF1,SECBUF

MOVTEMP_BUF2,BUF;秒放置暂时显示缓冲单元

DISP5:

LCALLDISPLAY;调用显示子程序

ACALLIS_KEY0;调用判断按键0子程序

JCNEXT_KEY1;无按下转按键1的判断

MOVR7,#0FH

KEY0:

ACALLDISPLAY

ACALLIS_KEY0;调用15次显示子程序对按键进行消抖

JCNEXT_KEY1

ACALLINT_KEY0;按键0按下则执行按键0子程序

NEXT_KEY1:

ACALLIS_KEY1;调用判断按键1子程序

JCDISP1

MOVR7,#0FH

KEY1:

ACALLDISPLAY

ACALLIS_KEY1

JCNEXT_KEY1

ACALLINT_KEY1;按键1按下则执行按键1子程序

SJMPDISP1

IS_KEY0:

MOV P1,#0FFH;判断按键0子程序

MOVC,P1.0

RET

IS_KEY1:

MOV P1,#0FFH;判断按键1子程序

MOVC,P1.1

RET

DISPLAY:

MOV R0,#DISBUF;显示子程序

MOVA,TEMP_BUF1

SWAPA

ANLA,#0FH

MOV@R0,A

INCR0

MOVA,TEMP_BUF1

ANLA,#0FH

MOV@R0,A

INCR0

MOVA,TEMP_BUF2

SWAPA

ANLA,#0FH

MOV@R0,A

INCR0

MOVA,TEMP_BUF2

ANLA,#0FH

MOV@R0,A

INCR0

ORG_DISPLAY:

MOVR0,#DISBUF+3

MOVR2,#08H

MOVR1,#0

DIS_LP:

MOVDPTR,#SEG_TAB

MOVA,@R0

MOVC A,@A+DPTR

MOVR3,CHG_BIT

CJNE R3,#1,CC1

CJNE R1,#1,CC1

ORLA,#80H

CC1:

CJNER3,#2,CB1

CJNER1,#3,CB1

ORLA,#80H

CB1:

MOVDPTR,#PORT_B

MOVX@DPTR,A

MOVDPTR,#PORT_A

MOVA,R2

MOVX@DPTR,A

MOVR3,#00H

DJNZR3,$

DECR0

MOVA,R2

RRA

MOVR2,A

JNBACC.7,DIS_LP

RET

SEG_TAB:

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

CLOCK:

MOVTL0,#0B0H;时间子程序

MOVTH0,#3CH

PUSHPSW

PUSHACC

MOVA,ALARMING;报警时间处理

CJNE A,#1,NEXT1

NEXT1:

JCNEXT2

DJNZ ALARMING,NEXT2;报警时间延时

CLRP3.0

NEXT2:

MOVA,BUF

ADDA,#01H

MOVBUF,A

CJNE A,#0AH,C_ALARM

MOVBUF,#00H

MOVA,SECBUF

ADDA,#01H;1/10秒满10次清零,秒加1

DAA

MOVSECBUF,A

CJNE A,#60H,C_ALARM

MOVSECBUF,#00H

MOVA,MINBUF

ADDA,#01H;满60秒,秒清零,分加1

DAA

MOVMINBUF,A

CJNE A,#60H,C_ALARM

MOVMINBUF,#00H

MOVA,HOUBUF

ADDA,#01H;满60分,分清零,时加1

DAA

MOVHOUBUF,A

CJNE A,#24H,C_ALARM

MOVHOUBUF,#00H

MOVA,DAYBUF

ADDA,#01H;满24小时,时清零,天加1

DAA

MOVDAYBUF,A

MOVA,MONBUF

FEB:

CJNE A,#02H,NO2;判断月份,不是2月转NO2子程序

MOVA,DAYBUF

CJNE A,#29H,C_ALARM

D1:

MOVDAYBUF,#00H

MOVA,MONBUF

ADDA,#01H;是2月满28天,日为1月进1

DAA

MOVMONBUF,A

NO2:

CJNE A,#01H,D2;不是1月转D2

B1:

MOVA,DAYBUF

CJNE A,#32H,C_ALARM

AJMPD1;是1月满31天,日为1月进1

D2:

CJNE A,#03H,D3;不是3月转D3

AJMPB1;是3月满31天,日为1月进1

D3:

CJNE A,#05H,D4;不是5月转D4

AJMPB1;是5月满31天,日为1月进1

D4:

CJNE A,#07H,D5;不是7月转D5

AJMPB1;是7月满31天,日为1月进1

D5:

CJNE A,#08H,D6;不是8月转D6

AJMP B1;是8月满31天,日为1月进1

D6:

CJNE A,#10H,D7;不是10月转D7

AJMPB1;是10月满31天,日为1月进1

D7:

CJNE A,#12H,D8;不是12月转D8

AJMPB1;是12月满31天,日为1月进1

D8:

MOVA,DAYBUF

CJNE A,#31H,C_ALARM

AJMPD1;是4,6,9,11月满30天,日为1月进1

D9:

CJNE A,#13H,C_ALARM

MOVMONBUF,#01H;满12月,月为1

C_ALARM:

MOV A,ALARMHOU;报警时间判断

CJNE A,HOUBUF,INT_DONE

MOVA,ALARMMIN

CJNE A,MINBUF,INT_DONE

SETBP3.0;报警时间和当前时间一致就点亮二极管

MOVALARMMING,#10;二极管点亮一分钟

INT_DONE:

POPACC

POPPSW

RETI;时间中断处理完毕

INT_KEY0:

MOVA,KEYBUF;按键0功能子程序

CJNE A,#MODE1,N01

MOVDISP_STATUS,#2;按键0按下一次显示日历

INCKEYBUF

AJMPEXIT

N01:

CJNEA,#MODE2,N02

MOVDISP_STATUS,#3;按键0再按下一次显示报警时间

INCKEYBUF

LJMPEXIT

N02:

CJNEA,#MODE3,N03

MOVDISP_STATUS,#4;按键0再按下一次显示秒钟

INCKEYBUF

LJMPEXIT

N03:

CJNEA,#MODE4,N04

MOVDISP_STATUS,#1;按键0按下一次返回显示时间

INCKEYBUF

LJMPEXIT

N04:

CJNEA,#HOUCHG,N05

MOVA,HOUBUF;调时间的小时状态

INCA;按下按键0对小时加1

DAA

MOVHOUBUF,A

CJNEA,#24H,TT1

TT1:

JCEXIT

MOVHOUBUF,#0;小时满24时清零

SJMPEXIT

N05:

CJNEA,#MINCHG,N06

MOVA,MINBUF;调时间的分钟状态

INCA;按下按键0对分钟加1

DAA

MOVMINBUF,A

CJNEA,#60H,TT2

TT2:

JCEXIT

MOVMINBUF,#0;分钟满60分清零

SJMPEXIT

N06:

CJNEA,#MONCHG,N07

MOVA,MONBUF;调日历的月份状态

INCA;按下按键0对月份加1

DAA

MOVMONBUF,A

CJNEA,#13H,TT3

TT3:

JCEXIT

MOVMONBUF,#1;月份满12月置1

SJMPEXIT

N07:

CJNEA,#DAYCHG,N08

MOVA,DAYBUF;调日历的天状态

INCA;按下按键0对天加1

DAA

MOVDAYBUF,A

CJNEA,#32H,TT4

TT4:

JCEXIT

MOVDAYBUF,#1;天满31天置1

SJMPEXIT

N08:

CJNEA,#AHOUCHG,N09

MOVA,ALARMHOU;调报警时间的小时状态

INCA;按下按键0对报警时加1

DAA

MOVALARMHOU,A

CJNEA,#24H,TT5

TT5:

JCEXIT

MOVALARMHOU,#0;小时满24时清零

SJMPEXIT

N09:

CJNEA,#AMINCHG,EXIT

MOVA,ALARMMIN;调报警时间的分钟状态

INCA;按下按键0对报警分加1

DAA

MOVALARMMIN,A

CJNEA,#60H,TT6

TT6:

JCEXIT

MOVALARMMIN,#0;分满60分清零

EXIT:

RET

INT_KEY1:

MOVA,KEYBUF;按键1功能子程序

CJNEA,#MODE1,N11

MOVKEYBUF,#MINCHG;在时间模式时按键1按下一次调分

MOVCHG_BIT,#1

SJMPEXIT1

N11:

CJNEA,#MINCHG,N12

MOVKEYBUF,#HOUCHG;按键1再按下一次调时

MOVCHG_BIT,#2

SJMPEXIT1

N12:

CJNEA,#HOUCHG,N13

MOVKEYBUF,#MODE1

MOVDISP_STATUS,#1;按键1再按下一次显示时间模式

MOVCHG_BIT,#0

SJMPEXIT1

N13:

CJNEA,#MODE2,N14;在日历模式时按键1按下一次调日

MOVKEYBUF,#DAYCHG

MOVCHG_BIT,#1

SJMPEXIT1

N14:

CJNEA,#MINCHG,N15;按键1再按下一次调月

MOVKEYBUF,#MONCHG

MOVCHG_BIT,#2

SJMPEXIT1

N15:

CJNEA,#HOUCHG,N16

MOVKEYBUF,#MODE2

MOVDISP_STATUS,#2;按键1再按下一次显示日历模式

MOVCHG_BIT,#0

SJMPEXIT1

N16:

CJNEA,#MODE3,N17

MOVKEYBUF,#AMINCHG;按键1按下一次调报警分

MOVCHG_BIT,#1

SJMPEXIT1

N17:

CJNEA,#AMINCHG,N18

MOVKEYBUF,#AHOUCHG;按键1再按下一次调报警时

MOVCHG_BIT,#2

SJMPEXIT1

N18:

CJNEA,#AHOUCHG,EXIT1

MOVKEYBUF,#MODE3

MOVDISP_STATUS,#3;按键1再按下一次显示报警时间模式

MOVCHG_BIT,#0

SJMPEXIT1

EXIT1:

RET

END

九.设计结果:

经过为期两个星期的单片机课程设计,我们所做的电子日历和电子表最终比较完美的实现了设计要求。

LED管显示很明显,亮度非常高,走时很精确,其中时间和日历还有报警时间的设定以及调整都能很好的实现。

在设计的过程中,我们还多加了一个显示功能,即秒和1/10秒的显示,使得时间显示得更加完美。

报警时间设定为一分钟,也就是说当报警时间和当前时间一致时,发光二极管可以持续点亮一分钟。

但在本次的设计中还存在一些不足之处:

我们为了程序设计的进度,忽略了闰年的情况,将二月都定为了28天。

并且在时间和日历的调整上每月都可以调到31天。

除此之外其他方面都很正常。

十.心得体会:

经过一个多星期的努力,我和邓明的课程设计——电子日历和电子表,终于

获得圆满的结果,看着电子日历和电子时钟正常的跳动,我的心理有着说不出的

高兴,任何事情的成功都来的不容易,我们的课程设计的这个小小成功也经过了

困难和艰辛的付出。

在这次课程设计中我主要负责的是硬件电路的设计,首先是原理图的设计,之前做过单片机实验,所以我们对8155、74LS06、74LS07、LED显示管等并不陌生,认真的研究过本课题的要求后,我们还是有个整体的思路,经过我和同组的邓明的商量后,我们把原理图较快的画了出来,并在老师的检查下拿到了设计所需器材等。

接下来就是根据原理图接线了,由于女孩子比较细心,所以我就负责接线,当然同组的同学就负责软件的设计,面包板和以前做数电和模电课程设计不同的是不用焊接,但是这次的面包板是用螺丝固定的,可是有些螺丝掉了,我只好用导线把它们固定起来,这也为后来留下了隐患,设计的原理图和实际的接线是有一定区别的,接线时一定要合理布线,讲求美观,有个全面的考虑,说和写容易,但是当真正动手操作的时候并不是一件简单的事,要把用到的线尽量都用镊子夹成直线,做到地线用黑色,电源线用红色,其他的用黄色,有时候布置一根线都要思考良久,线路接好容易,要在好的基础上整体感觉合理、美观可不容易,但是,我还是尽我最大的努力做到了。

下一步的工作是调试,在实验室,我拿着万用表测试一根根的导线以及芯片和数码管,调试过程中发现了两个问题:

有个数码管不能正确显示,面包板的一条接触不良,等换了一下数码管和重新接了面包板的一条后,在正确的程序下,我们的结果显示的很好!

这次的课程设计使我受益匪浅,不仅对单片机的理论知识有了比较全面的认识,对自己动手能力也有很大的提高,最重要的是,真实接触到自己做出来的电子日历和电子表,使我对自动化专业有了更高的兴趣。

                       郭珍珍

  通过为期两天的单片机课程设计,我学到了不少课本上学不到的知识与方法,尤其重要的是这次的设计是真正意义上的由我们组独立完成的课程设计,这就在很大程度上提高了我们的实际分析能力、解决问题的能力、组员合作的能力,同时在很大方面也锻炼了我们的动手操作能力。

总的来说,收获是不小的,具体如下:

1、使我深刻地理解了理论联系于实际并运用于实际的这一说法。

这次的设计题目不是很难,相对来说比较容易上手,但由于要实现的功能较多,因此在具体的设计中就有很多问题摆在了我们的面前。

我主要是负责软件设计方面,而正是如此,所要求的理论知识是很多的,并且程序的好坏决定了本次设计的成败,来不得半点马虎。

为了更好地实现软件设计,我从图书馆借来了许多与单片机有关的教材和资料,也从网上下载了一些相关信息和资料,充分学习在本次设计中所要用到的理论知识,并结合具体的问题有针对性地解决了各种程序难题。

2、实际分析、解决问题的能力得到了提高。

当我们的硬件和软件设计好后,最重要的就是调试了。

在调试过程中问题是层出不穷的,这就需要我们耐心、认真地一一较对、分析,找到解决的办法。

我记得在第一次调试时,我们的面包板在运行过程中没有丝毫反应,为了检查线路,只好用万用表对每一个芯片的引脚,每一根导线进行测量,并对照接线图仔细检查,有些地方甚至检查了4遍,最后发现原来是仿真头接触不良,导致8031对8155不能进行实时控制。

经验的不足可能会导致设计的进程,但只有当我们及时地发现并解决问题时,经验才会丰富,能力才会得到提升。

3、组员之间的团结合作使得设计进展得很顺利。

当我和郭珍珍在拿到题目后,两人认真研究了题目,并做出几个合理的方案,从中我们选出最佳方案。

方案确定后,我主要负责程序设计方面,而她负责硬件接线,两人各领其职,相互合作,比较顺利地完成了初步任务,在以后的

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2