单片机课程设计报告秒表设计报告docx.docx
- 文档编号:26146810
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:25
- 大小:160.22KB
单片机课程设计报告秒表设计报告docx.docx
《单片机课程设计报告秒表设计报告docx.docx》由会员分享,可在线阅读,更多相关《单片机课程设计报告秒表设计报告docx.docx(25页珍藏版)》请在冰豆网上搜索。
单片机课程设计报告秒表设计报告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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 报告 秒表 设计 docx