单片机课程设计报告秒表设计报告docx.docx

上传人:b****9 文档编号:26146810 上传时间:2023-06-17 格式:DOCX 页数:25 大小:160.22KB
下载 相关 举报
单片机课程设计报告秒表设计报告docx.docx_第1页
第1页 / 共25页
单片机课程设计报告秒表设计报告docx.docx_第2页
第2页 / 共25页
单片机课程设计报告秒表设计报告docx.docx_第3页
第3页 / 共25页
单片机课程设计报告秒表设计报告docx.docx_第4页
第4页 / 共25页
单片机课程设计报告秒表设计报告docx.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

单片机课程设计报告秒表设计报告docx.docx

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

单片机课程设计报告秒表设计报告docx.docx

单片机课程设计报告秒表设计报告docx

一、题目

作息时间表系统设计一一用89C51设计一个6位LED数码显示“作息时间表系统”,显示时间为00—00—00~23时一59分一59秒,每秒自动加一。

另设计4个按钮,分别是“分状态”按键、“分加1”按键、“时状态”按键,“时加1”按键。

用于进行小时和分钟的调整。

这就是一个完整的具有时、分、秒显不的单片机实时钟系统。

二、增加功能

在上述实时钟系统的基础上,在控制软件钟增加一个“作息时间表”,如图1所不,并增加对该表的查询功能模块,依据对该表的查询结果,控制喇叭,进行课间打铃提示,完成单片机作息时间表系统的设计。

也完成木次课程设计。

三、内容提要

本设计利用单片机的定时器/计数器定时和记数的原理,结合sl-100.sl-200系统上的集成电路芯片8052、LED数码管以及按键来设计计时器。

将软、硬件有机地结合起来,使得系统能够正确地进行计时,数码管能够正确地显示时间。

其中本设计中的四个开关按键:

其中一个按键按下去时,系统进入秒调整状态,然后,秒加1键每按一次,秒计时器加1。

时状态按下时,系统进入时调整状态,时按键每按一次,时计数器加1。

木设计运彳丁开始时,各按键回到各初始位置,即都处于1状态。

计时显不从00:

00:

00开始,依据秒加1为单位进行显示计时。

三、实验目的

1、通过本次课程设计加深对单片机课程的全面认识复习和掌握,对嵌入式系统的应用进一步的了解。

2、掌握定时器、外部中断的设置和编程原理。

3、通过此次课程设计能够将单片机软硬件结合起来,对程序进行编辑,校验。

四、意义

该实验通过单片机的定时器/计数器定时和计数原理,设计单片机作息时间表系统,拥有正确的计时、显示、时间调整等功能,并同时可以用数码管显示,在现实生活中应用广泛,具有现实意义。

五、本人所做工作

根据相关的单片机材料,利用所学的单片机知识,结合sl-100单片机微机实验系统中的软件和硬件(集成电路芯片8952,七段数码管,开关电路及时钟信号电路,按键等),编写能够实现该设计的软件程序,最后将软、硬件有机的结合起来,进行有效的调试,达到完成该实验课程设计的目的要求。

六、设计内容

用AT89C51设计一个6位LED数码显示“实时钟”,显示时间为00:

00:

00秒,每秒自动加一。

另设计一个“时状态”按键和一个“时加1”按键。

再增加一个“分状态”按键和一个“分加1”按键。

在以上设计的基础上,在在控制软件系统中增加作息时间表功能,驱动喇叭去完成作息时间控制的功能。

七、设计思路及描述

该实验要求进行计时并在数码管上显示时间,则可利用sl-100单片机实验系统中的芯片AT89C52,中的P3管脚做为外部按键输入,并实现各个按键的功能;定时器TO作为每10-50毫秒加一的定时器。

在内部RAM中开辟10-50MS计数器,秒计数器、分计数器、时计数器。

单片机依据定时器T0的定时时间,进行秒、分、时的累加,并将

秒、分、时数据转换为7段LED显示段码,送LED显示器,从而完成单片机实时钟系统的设计。

注意,为了输出显示方便,时、分、秒的累加计时可以采用BCD码运算。

o

八、原理图

九、课程设计参考汇编程序

按键可调京息时间电子钟

Date2007.7.6

Createdby李强

显示缓冲区定义

Seclequ5Oh

Sech

equ51h

Mini

equ52h

Minh

equ53h

Hourl

equ54h

Hourh

equ55h

*******************************

;时钟计数单元定义

msequ56hsecequ57hminequ58hhourequ59hflashequ5ahtimecequ5bhbpcountequ5chcodepequ5dh

;按键定义

keym

bitp3.0

keyml

bitp3.1

keym_l

bitp3.2

keyh

bitp3.3

keyhl

bitp3.4

keyh_l

bitp3.5

;keytimebitp3.6

;按键状态标志m_keybitOOh

h_key

bit

Olh

flashb

bit

02h

time

bit

03h

timeg

bit

04h

:

共阳数码管段码,*******************************

;DispTab:

;db0c0h,0f9h,0a4h,0b0h,99h

;db92h,82h,Of8h,8Oh,9Oh,Offli

org0080h

Tab:

DBOCOH,0F9H,0A4H,OBOH,99H;01234

DB92H,82H,0F8H,80H,90H;56789

DB88H,83H,0C6H,0A1H,86H;ABCDE

DB8EH,OFFh

*******************************

;作息时间码

*******************************

orgOObOh

timetab:

dbOOh,OOh,15h

dbOOh,OOh,3Oh

dbOOh,Olh,OOh

db10h,00h,15h

dbOOh,O3h,OOh

db13h,OOh,15h

db2Oh,3Oh,OOh

db00h,00h,45h

dbOffh,Offh,Offli

:

中断地址表设置

*******************************orgOOOOhajmpmainorg0003hretiorgOOObhajmpinttOorg0013h

reti

orgOOlbhajmpinttlorg0023hreti

*******************************;main程序

*******************************orgOlOOhmain:

movsp,#60h

mov

movr7,#0fhrO,#5Oh

mova,#OOhmov20h,aclrm_keyclrh_keyclrd:

mov@rO,a

incrOdjnzr7,clrdmovtmod,#llh

movthO,#3chmovtlO,#ObOhmovthl,#3chmovtll,#ObOhmovms,#00hmovflash,#00h

setbeasetbetOsetbetlsetbtrOclrtimegclrtricont:

lcalldisplay

lcallkeytest;jnbtime,contlcallbeepajmpcont

*******************************

;beep程序

*******************************

beep:

mov

timec,hour

mov

codep,#Ofdh

mov

dptr,#timetab

beph:

mova,codep

inca

inca

inca

mov

codep,a

move

a,@a+dptr

mov

b,a

xrla,#Offh

jzexitb

mov

a,b

cjnea,timec,bephmovtimec,mindeccodepdeccodepbepm:

mova,codep

inca

inca

inca

mov

codep,a

move

a,@a+dptr

mov

b,a

xrla,#Offh

jzexitbmova,bcjnea,timec,bepmmovtimec,secdeccodepdeccodepbepsec:

mova,codep

incaincainca

movcodep,amovea,@a+dptrmovb,axrla,#Offhjzexitbmova,bcjnea,timec,bepsecsetbtimegclrcodep;ajmpexitbbexitb:

;clrtimegexitbb:

clrcodep

clrtimec

ret

keytest程序key0-P3.0,状态键盘keyl=P3・l,加1键

keytest:

setbkeym

setbkeymlsetbkeyhsetbkeyhlsetbkeym_lsetbkeyh_ljnbkeym,keydelayjnbkeyml,keydelayjnbkeym_l,keydelayjnbkeyh,keydelayjnbkeyh1,keydelayjnbkeyh_1,keydelayJnbkeytime,keydelayajmpexitskeykeydelay:

lcalldelay10ms

jnbkeym,keympjnbkeyml,keymlpjnbkeym_1,keym_1pjnbkeyh,keyhpjnbkeyh1,keyhipjnbkeyh_l,keyh_lpJnbkeytime,keytimepajmpexitskey

keymppkeymlppkeym_lppkeyhppkeyhlppkeyh_lpptimep

keymp:

ajmpkeymlp:

ajmpkeym_lp:

ajmpkeyhp:

ajmpkeyhip:

ajmpkeyh_lp:

ajmp;keytimep:

ajmp

;timep:

jnbkeytime,$;jbcm_key,exitkeyt

;jbch_key,exitkeyt

;cpltime

;ajmpexitskeykeymppJnbkeym,$

jbcm_key,exitkeytjbch_key,exitkeytsetbm_keysetbetl

setbtri

clrtrO

ajmpexitskeyexitkeyt:

ajmpexitkey

keyhpp:

jnbkeyh,$

jbcm_key,exitkeyjbch_key,exitkeysetbh_key

setbet1

setbtriclrtrOajmpexitskeykeym1pp:

jnbkeym1,$

jnbm_key,exitkeymova,min

adda,#l

daa

movmin,a

cjnea,#6Oh,$+3jcexitsmmovmin,#00hexitsm:

ajmpexitskeykeym_1pp:

jnbkeym_1,$jnbm_key,exitkeymova,min

jnzexitm_l

mova,#60hexitm_l:

clrc

subba,#l

movb,aanla,#Ofhcjnea,#Ofh,exmmova,bsubba,#06hsjmp$+3exm:

mova,b

movmin,a

ajmpexitskeykeyh_1pp:

jnbkeyh_1,$

jnbh_key,exitkeymova,hour

jnzexith_lmova,#24hexith_l:

clrc

subba,#l

movb,a

anla,#Ofhcjnea,#0fh,exh

mov

a,b

subb

a,#06h

sjmp

$+3

exh:

mov

a,b

mov

hour,a

ajmp

exitskey

keyhlpp:

jnbkeyhl,$jnbh_key,exitkeymova,houradda,#ldaamovhour,a

cjnea,#24h,$+3jcexitshmovhour,#00hexitsh:

ajmpexitskeyexitkey:

setbtrOclretlclrtriexitskey:

ret

*******************************

;display程序

*******************************

display:

mova,sec;显示缓冲区更新

movb,aanla,#Ofhmovseel,amova,banla,#OfOh

swapa

movsech,amova,min

movb,aanla,#Ofhmovmini,a

mova,banla,#OfOhswapa

mov

mov

mov

minh,a

a,hour

b,a

anla,#Ofh

mov

mov

hourl,a

a,b

anla,#OfOh

 

swap

mov

ahourh,a

;显示更新

movmovmovemov

mov

dptr,#Tab

a,seela,@a+dptrpO,ap2,#0feh

lcalldelaylms

movmovemovmov

a,secha,@a+dptrpO,ap2,#0fdh

lcalldelaylmsjnbm_key,dminjnbflashb,dmin

mov

mov

mini,#16minh,#16

dmin:

mova,mini

move

mov

mov

a,@a+dptrpO,ap2,#0fbh

lcalldelaylms

movmovemovmov

a,minha,@a+dptrpO,ap2,#0f7h

lcalldelaylmsjnbh_key,dhourjnbflashb,dhour

movmovdhour:

movmovemovmov

hourl,#16hourh,#16

a,hourla,@a+dptrpO,ap2,#0efh

lcalldelaylmsmova,hourhmovea,@a+dptrmovpO,amovp2,#0dfhlcalldelaylmsret

*******************************;延时程序

*******************************

delay1ms:

movr7,#10dims:

movr6,#100djnzr6,$djnzr7,dlmsret

delay10ms:

movr7,#100dlOms:

movr6,#100djnzr6,$djnzr7,dl0msret

*******************************;TO50ms中断程序,*******************************inttO:

;lcallbeep

push

acc

push

psw

;lcallbeep

clrtrO

clrc

mov

a,#0b8h

adda,tlO

mov

tlO,a

mov

a,#3ch

adde

a,#0

mov

thO,a

setbtrO

mov

a,ms

inca

mov

ms,a

cjnea,#20,eoutmovms,#00hmova,secadda,#ldaa

movsec,a

cjnea,#60h,eoutmovsec,#OOhmova,min

adda,#ldaamovmin,a

cjnea,#60h,eoutmovmin,#00hmova,hour

adda,#ldaamovhour,a

cjnea,#24h,eoutmovhour,#00h

eout:

jnbtimeg,eeout

movtmod,#21h

movthl,#156movtil,#156

setbtrl

;cplp3.3incbpcountmova,bpcount

cjnea,#10O,eeoutmovbpcount,#0

clrtimegclrtimecsetbp3.3movtmod,#llh

clrtriclrtimecclrcodepeeout:

;lcallbeep

poppsw

popacc

reti,*******************************

;T150ms中断程序

inttl:

push

acc

push

psw

jnbtimeg,exit_intl

;mov

thl,#0d8h

;mov

tll,#OfOh

cplp3.3

;incbpcount

;mov

a,bpcount

;cjne

a,#200,exittl

;mov

bpcount,#00h

;clrtimeg

;clrtri

;setb

p3.3

sjmp

exitntl

exit_intl:

;mov

tmod,#llh

incflashmova,flash

cjnea,#5,exitntlmovflash,#0

cplflashb;闪烁标志取反

exitntl:

movthl,#3chmovtll,#ObOhexittl:

poppsw

popaccreti

end

十、课程设计C51参考程序clock.c文件

电子表C源程序

Date2007.7.11Createdby李强

#includenclock.h"

主程序

 

 

main()

TMOD=Oxll;

ETO=1;

ET1=1;

EA=1;

TH0=0x3c;

TLO=OxbO;

THl=0x3c;

TLl=OxbO;

TRO=1;while(l)

{

disp();beep();key();

clock.h文件

#include

数据类型声明

#defineuintunsignedint

typedefunsignedcharuchar;

全局数据类型声明

 

typedefstruct{ucharhour;ucharmin;

/*structureofthetimerecord

/*hour

/*minute

*/

*/

*/

 

ucharsec;

/*second

*/

ucharms;

/*50ms*/

}time;

typedefstruct{

/*structureofthetimerecord

*/

ucharhourh;

/*hour

*/

ucharhourl;

ucharminh;

严minute

*/

ucharmini;

ucharsech;

ucharseel;

/*second

*/

Jtimebuf;

typedefstruct{

/*structureofthetimerecord

*/

ucharhour;

/*hour

*/

ucharmin;

/*minute

*/

ucharsec;

/*second

*/

}timetab;

函数原型声明

void

delay1ms();

void

delay10ms();

void

disp();

void

beep();

void

scankeyO;

void

key_min_state();

void

key_min_plus();

void

key_min_sub();

void

key_hour_state();

void

key_hour_plus();

void

key_hour_sub();

void

key();

function.c文件

#includenclock.h"

数码管共阳段码表ucharcodeDispCode[17]={

0xc0,0xf9,0xa4,0xb0,

0x99,0x92,0x82,0xf8,

0x80,0x90,0x88,0x83,

0xc6,0xa1,0x86,0x8e,Oxff

};

初始时间值

externtimebufdatadtimebuf={0,0,0,0,0,0};

externtimedatactime={12,0,0,0};

uintcount;

uintcount_flash;bitbeeph;

bitflash_flag;

作息时间表

timetabcodecode_time[10]={

12,30,15,

12,30,30,

12.30.45,

12.20.45,

12,03,00,

12,01,00,

Oxff,Oxff,Oxff,};

按键I/O口定义

sbitkeymin=OxbO;

sbitkeymin_plus=Oxbl;

sbitkeymin_sub=0xb2;

sbitkeyhour=0xb3;

sbitkeyhour_plus=0xb4;

sbitkeyhour_sub=0xb5

时间调整定义

bitmin_flag;

bithour_flag;

显示函数实现

voiddisp()

{

dtimebuf.seel=DispCode[ctime.sec%10];dtimebuf.sech=DispCode[ctime.sec/10];dtimebuf.minl=DispCode[ctime.min%10];dtimebuf.minh=DispCode[ctime.min/l0];dtimebuf.hourl=DispCode[ctime.hour%10];dtimebuf.hourh=DispCode[ctime.hour/10];if(flash_flag)

{

if(min_flag)

{

P0=dtimebuf.seel;

P2=0xfe;

delay1ms();

P0=dtimebuf.sech;

P2=0xfd;delaylms();P0=dtimebu

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

当前位置:首页 > 幼儿教育 > 幼儿读物

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

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