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

上传人:仙*** 文档编号:37761409 上传时间:2021-11-04 格式:DOC 页数:24 大小:225.50KB
收藏 版权申诉 举报 下载
单片机课程设计报告秒表设计报告_第1页
第1页 / 共24页
单片机课程设计报告秒表设计报告_第2页
第2页 / 共24页
单片机课程设计报告秒表设计报告_第3页
第3页 / 共24页
资源描述:

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

1、一、题目作息时间表系统设计用89C51设计一个6位LED数码显示“作息时间表系统”,显示时间为000000 23时59分59秒,每秒自动加一。另设计4个按钮,分别是“分状态”按键、“分加1”按键、“时状态”按键,“时加1”按键。用于进行小时和分钟的调整。这就是一个完整的具有时、分、秒显示的单片机实时钟系统。二、增加功能在上述实时钟系统的基础上,在控制软件钟增加一个“作息时间表”,如图1 所示,并增加对该表的查询功能模块,依据对该表的查询结果,控制喇叭,进行课间打铃提示,完成单片机作息时间表系统的设计。也完成本次课程设计。三、内容提要 本设计利用单片机的定时器/计数器定时和记数的原理,结合sl-

2、100、sl-200系统上的集成电路芯片8052、LED数码管以及按键来设计计时器。将软、硬件有机地结合起来,使得系统能够正确地进行计时,数码管能够正确地显示时间。其中本设计中的四个开关按键:其中一个按键按下去时,系统进入秒调整状态,然后,秒加1键每按一次,秒计时器加1。时状态按下时,系统进入时调整状态,时按键每按一次,时计数器加1。本设计运行开始时,各按键回到各初始位置,即都处于1状态。计时显示从00:00:00开始,依据秒加1为单位进行显示计时。三、实验目的 1、 通过本次课程设计加深对单片机课程的全面认识复习和掌握,对嵌入式系统的应用进一步的了解。 2、 掌握定时器、外部中断的设置和编程

3、原理。 3、 通过此次课程设计能够将单片机软硬件结合起来,对程序进行编辑,校验。四、意义 该实验通过单片机的定时器/计数器定时和计数原理,设计单片机作息时间表系统,拥有正确的计时、显示、时间调整等功能,并同时可以用数码管显示,在现实生活中应用广泛,具有现实意义。五、本人所做工作根据相关的单片机材料,利用所学的单片机知识,结合sl-100单片机微机实验系统中的软件和硬件(集成电路芯片8952,七段数码管,开关电路及时钟信号电路,按键等),编写能够实现该设计的软件程序,最后将软、硬件有机的结合起来,进行有效的调试,达到完成该实验课程设计的目的要求。六、设计内容用AT89C51设计一个6位LED数码

4、显示“实时钟”,显示时间为00:00:00秒,每秒自动加一。另设计一个“时状态”按键和一个“时加1 ”按键。再增加一个“分状态”按键和一个“分加1”按键。在以上设计的基础上,在在控制软件系统中增加作息时间表功能,驱动喇叭去完成作息时间控制的功能。七、设计思路及描述该实验要求进行计时并在数码管上显示时间,则可利用sl-100单片机实验系统中的芯片AT89C52,中的P3管脚做为外部按键输入,并实现各个按键的功能;定时器T0作为每1050毫秒加一的定时器。在内部RAM中开辟1050MS计数器,秒计数器、分计数器、时计数器。单片机依据定时器T0的定时时间,进行秒、分、时的累加,并将秒、分、时数据转换

5、为7段LED显示段码,送LED显示器,从而完成单片机实时钟系统的设计。注意,为了输出显示方便,时、分、秒的累加计时可以采用BCD码运算。 。八、原理图九、课程设计参考汇编程序 ;*; 按键可调作息时间电子钟; ;Date 2007.7.6 ;Created by 李强 ;*;*; 显示缓冲区定义;*Seclequ50hSechequ51hMinlequ52hMinhequ53hHourlequ54hHourhequ55h;*; 时钟计数单元定义;*msequ56hsecequ57hminequ58hhourequ59hflashequ5ahtimecequ5bhbpcountequ5chcod

6、epequ5dh;*; 按键定义;*keymbit p3.0keym1bitp3.1keym_1 bitp3.2keyhbitp3.3keyh1bitp3.4keyh_1bit p3.5;keytime bitp3.6;按键状态标志m_keybit00hh_keybit01hflashbbit02htimebit03htimegbit04h;*; 共阳数码管段码;*;DispTab: ;db 0c0h,0f9h,0a4h,0b0h,99h;db 92h,82h,0f8h,80h,90h,0ffhorg 0080hTab: DB 0C0H, 0F9H, 0A4H, 0B0H, 99H; 0123

7、4 DB 92H, 82H, 0F8H, 80H, 90H ; 56789 DB 88H, 83H, 0C6H, 0A1H, 86H; ABCDE DB 8EH,0FFh;*; 作息时间码;*org00b0htimetab:db00h,00h,15hdb00h,00h,30hdb00h,01h,00hdb10h,00h,15hdb00h,03h,00hdb13h,00h,15hdb20h,30h,00hdb00h,00h,45hdb0ffh,0ffh,0ffh;*; 中断地址表设置;*org0000hajmpmainorg0003hretiorg000bhajmpintt0org0013hre

8、tiorg001bhajmpintt1org0023hreti;*; main程序;*org0100hmain:movsp,#60hmovr7,#0fhmovr0,#50hmova,#00hmov20h,aclrm_keyclrh_keyclrd:movr0,aincr0djnzr7,clrdmovtmod,#11hmovth0,#3chmovtl0,#0b0hmovth1,#3chmovtl1,#0b0hmovms,#00hmovflash,#00hsetbeasetbet0setbet1setbtr0clrtimegclrtr1cont: lcalldisplaylcallkeytest;

9、jnbtime,contlcallbeepajmpcont;*; beep程序;*beep:movtimec,hourmovcodep,#0fdhmovdptr,#timetabbeph:mova,codepincaincaincamovcodep,amovca,a+dptrmovb,axrla,#0ffhjzexitbmova,bcjnea,timec,bephmovtimec,mindeccodepdeccodepbepm:mova,codepincaincaincamovcodep,amovca,a+dptrmovb,axrla,#0ffhjzexitbmova,bcjnea,timec

10、,bepmmovtimec,secdeccodepdeccodepbepsec:mova,codepincaincaincamovcodep,amovca,a+dptrmovb,axrla,#0ffhjzexitbmova,bcjnea,timec,bepsecsetbtimegclrcodep;ajmp exitbbexitb:;clrtimegexitbb:clrcodepclrtimecret;*; keytest 程序;key0-P3.0,状态键盘;key1=P3.1,加1键;*keytest:setbkeymsetbkeym1setbkeyhsetbkeyh1setbkeym_1se

11、tbkeyh_1jnbkeym,keydelayjnbkeym1,keydelayjnbkeym_1,keydelay jnbkeyh,keydelayjnbkeyh1,keydelayjnbkeyh_1,keydelay;jnbkeytime,keydelayajmpexitskeykeydelay:lcall delay10msjnbkeym,keympjnbkeym1,keym1pjnbkeym_1,keym_1pjnbkeyh,keyhpjnbkeyh1,keyh1pjnbkeyh_1,keyh_1p;jnbkeytime,keytimepajmpexitskeykeymp:ajmpk

12、eymppkeym1p:ajmpkeym1ppkeym_1p:ajmpkeym_1ppkeyhp:ajmpkeyhppkeyh1p:ajmpkeyh1ppkeyh_1p:ajmpkeyh_1pp;keytimep:ajmptimep;timep:jnbkeytime,$;jbcm_key,exitkeyt;jbch_key,exitkeyt;cpltime;ajmp exitskeykeympp:jnbkeym,$jbcm_key,exitkeytjbch_key,exitkeytsetbm_keysetbet1setbtr1clrtr0ajmpexitskeyexitkeyt:ajmpexi

13、tkeykeyhpp:jnbkeyh,$jbcm_key,exitkeyjbch_key,exitkeysetbh_keysetbet1setbtr1clrtr0ajmpexitskeykeym1pp:jnbkeym1,$jnbm_key,exitkeymova,minadda,#1daamovmin,acjnea,#60h,$+3jcexitsmmovmin,#00hexitsm:ajmpexitskeykeym_1pp:jnbkeym_1,$jnbm_key,exitkeymova,minjnzexitm_1mova,#60hexitm_1:clrcsubba,#1movb,aanla,#

14、0fhcjnea,#0fh,exmmova,bsubba,#06hsjmp$+3exm:mova,bmovmin,aajmpexitskeykeyh_1pp:jnbkeyh_1,$jnbh_key,exitkeymova,hourjnzexith_1mova,#24hexith_1:clrcsubba,#1movb,aanla,#0fhcjnea,#0fh,exhmova,bsubba,#06hsjmp$+3exh:mova,bmovhour,aajmpexitskeykeyh1pp:jnbkeyh1,$jnbh_key,exitkeymova,houradda,#1daamovhour,ac

15、jnea,#24h,$+3jcexitshmovhour,#00hexitsh:ajmpexitskey exitkey:setbtr0clret1clrtr1exitskey:ret;*; display 程序;*display:mova,sec;显示缓冲区更新movb,aanla,#0fhmovsecl,amova,banla,#0f0hswapamovsech,amova,minmovb,aanla,#0fhmovminl,amova,banla,#0f0hswapamovminh,amova,hourmovb,aanla,#0fhmovhourl,amova,banla,#0f0hsw

16、apamovhourh,a; 显示更新movdptr,#Tabmov a,seclmovca,a+dptrmovp0,amovp2,#0fehlcalldelay1msmov a,sechmovca,a+dptrmovp0,amovp2,#0fdhlcalldelay1msjnbm_key,dminjnbflashb,dminmovminl,#16movminh,#16dmin:mov a,minlmovca,a+dptrmovp0,amovp2,#0fbhlcalldelay1msmov a,minhmovca,a+dptrmovp0,amovp2,#0f7hlcalldelay1msjnb

17、h_key,dhourjnbflashb,dhourmovhourl,#16movhourh,#16dhour:mov a,hourlmovca,a+dptrmovp0,amovp2,#0efhlcalldelay1msmov a,hourhmovca,a+dptrmovp0,amovp2,#0dfhlcalldelay1msret;*; 延时 程序;*delay1ms:movr7,#10d1ms:movr6,#100djnzr6,$djnzr7,d1msretdelay10ms:movr7,#100d10ms:movr6,#100djnzr6,$djnzr7,d10msret;*; T0 5

18、0ms 中断 程序;*intt0: ;lcall beeppushaccpushpsw;lcall beepclrtr0clrcmova,#0b8hadda,tl0movtl0,amova,#3chaddca,#0movth0,asetbtr0mova,msincamovms,acjnea,#20,eoutmovms,#00hmova,secadda,#1daamovsec,acjnea,#60h,eoutmovsec,#00hmova,minadda,#1daamovmin,acjnea,#60h,eoutmovmin,#00hmova,houradda,#1daamovhour,acjne

19、a,#24h,eoutmovhour,#00heout:jnbtimeg,eeoutmovtmod,#21hmovth1,#156movtl1,#156setbtr1;cplp3.3incbpcountmova,bpcountcjnea,#100,eeoutmovbpcount,#0clrtimegclrtimecsetbp3.3movtmod,#11hclrtr1clrtimecclrcodepeeout: ;lcallbeep poppsw popaccreti;*; T1 50ms 中断 程序;*intt1:pushaccpushpswjnbtimeg,exit_int1;movth1,

20、#0d8h;movtl1,#0f0hcplp3.3;incbpcount;mova,bpcount;cjnea,#200,exitt1;movbpcount,#00h;clrtimeg;clrtr1;setbp3.3sjmpexitnt1exit_int1:;movtmod,#11hincflashmova,flashcjnea,#5,exitnt1movflash,#0cplflashb;闪烁标志取反exitnt1:movth1,#3chmovtl1,#0b0hexitt1:poppswpopaccretiend 十、课程设计C51参考程序clock.c 文件/* 电子表C源程序 Date

21、2007.7.11 Created by 李强 */#includeclock.h/* 主程序*/main() TMOD=0x11;ET0=1;ET1=1;EA=1;TH0=0x3c;TL0=0xb0;TH1=0x3c;TL1=0xb0;TR0=1;while(1) disp(); beep(); key();clock.h 文件#include/* 数据类型声明*/#define uint unsigned inttypedef unsigned char uchar;/* 全局数据类型声明*/ typedef struct /* structure of the time record *

22、/ uchar hour; /* hour */ uchar min; /* minute */ uchar sec; /* second */ ucharms; /* 50 ms */ time;typedef struct /* structure of the time record */ uchar hourh; /* hour */ uchar hourl; uchar minh; /* minute */ uchar minl; uchar sech; uchar secl; /* second */ timebuf;typedef struct /* structure of t

23、he time record */ uchar hour; /* hour */ uchar min; /* minute */ uchar sec; /* second */ timetab;/* 函数原型声明*/void delay1ms();void delay10ms();void disp();void beep();void scankey();void key_min_state();void key_min_plus();void key_min_sub();void key_hour_state();void key_hour_plus();void key_hour_sub

24、();void key();function.c 文件#includeclock.h/* 数码管共阳段码表*/uchar code DispCode17=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff;/* 初始时间值*/extern timebuf data dtimebuf = 0, 0, 0, 0, 0, 0 ;extern time data ctime = 12, 0, 0, 0 ;uint count;uint count_flash;bit beeph;bit

25、 flash_flag;/* 作息时间表*/ timetab code code_time10=12,30,15,12,30,30,12,30,45,12,20,45,12,03,00,12,01,00,0xff,0xff,0xff,;/* 按键I/O口定义/*/ sbitkeymin= 0xb0;sbitkeymin_plus = 0xb1;sbitkeymin_sub= 0xb2;sbitkeyhour= 0xb3;sbitkeyhour_plus= 0xb4;sbitkeyhour_sub= 0xb5 ;/* 时间调整定义*/ bitmin_flag;bithour_flag;/* 显示

26、函数实现*/void disp()dtimebuf.secl=DispCodectime.sec%10;dtimebuf.sech=DispCodectime.sec/10;dtimebuf.minl=DispCodectime.min%10;dtimebuf.minh=DispCodectime.min/10;dtimebuf.hourl=DispCodectime.hour%10;dtimebuf.hourh=DispCodectime.hour/10;if(flash_flag)if(min_flag)P0=dtimebuf.secl;P2=0xfe;delay1ms();P0=dtim

27、ebuf.sech;P2=0xfd;delay1ms();P0=dtimebuf.hourl;P2=0xef;delay1ms();P0=dtimebuf.hourh;P2=0xdf;delay1ms();if (hour_flag) P0=dtimebuf.secl;P2=0xfe;delay1ms();P0=dtimebuf.sech;P2=0xfd;delay1ms();P0=dtimebuf.minl;P2=0xfb;delay1ms();P0=dtimebuf.minh;P2=0xf7;delay1ms();elseP0=dtimebuf.secl;P2=0xfe;delay1ms(

28、);P0=dtimebuf.sech;P2=0xfd;delay1ms();P0=dtimebuf.minl;P2=0xfb;delay1ms();P0=dtimebuf.minh;P2=0xf7;delay1ms();P0=dtimebuf.hourl;P2=0xef;delay1ms();P0=dtimebuf.hourh;P2=0xdf;delay1ms();/* timer0 中断函数实现*/void intt0(void) interrupt 1 using 1TH0=0x3c;TL0=0xb0;if(+ctime.ms=20)ctime.ms=0;if(+ctime.sec=60)

29、ctime.sec=0;if(+ctime.min=60)ctime.min=0;if(+ctime.hour=24)ctime.hour=0; /* beep()函数实现*/void beep()uchar i=0;while(code_timei.hour!=0xff)if(ctime.hour=code_timei.hour)&(ctime.min=code_timei.min)&(ctime.sec=code_timei.sec)TMOD=0x21;TH1=6;TL1=6;TR1=1;count=0;beeph=1;return;i+; /* key()函数实现*/void key()

30、P3=0xff;while(P3!=0xff)delay10ms();while(P3!=0xff)switch(P3)case 0xfe:key_min_state();break;case 0xfd:key_min_plus();break;case 0xfb:key_min_sub();break;case 0xf7:key_hour_state();break;case 0xef:key_hour_plus();break;case 0xdf:key_hour_sub();break; default:break; void key_min_state()while(!keymin);

31、if(hour_flag)hour_flag=0;flash_flag=0;TR1=0;return;min_flag=!min_flag;if(min_flag)TMOD=0x11;flash_flag=1;TR1=1;else flash_flag=0;TR1=0;void key_min_plus()while(!keymin_plus);if(hour_flag)hour_flag=0;flash_flag=0;TR1=0;return;if(min_flag)if(+ctime.min=60)ctime.min=0;void key_min_sub()while(!keymin_su

32、b);if(hour_flag)hour_flag=0;flash_flag=0;TR1=0;return;if(min_flag)if(-ctime.min=0xff)ctime.min=59;void key_hour_state()while(!keyhour);if(min_flag)min_flag=0;flash_flag=0;TR1=0;return;hour_flag=!hour_flag;if(hour_flag)TMOD=0x11;flash_flag=1;TR1=1;else flash_flag=0;TR1=0;void key_hour_plus()while(!ke

33、yhour_plus);if(min_flag)min_flag=0;flash_flag=0;TR1=0;return;if(hour_flag)if(+ctime.hour=24)ctime.hour=0;void key_hour_sub()if(min_flag)min_flag=0;flash_flag=0;TR1=0;return;while(keyhour_sub);if(hour_flag)if(-ctime.hour=0xff)ctime.hour=23;delay.c 文件#includeclock.h/* 延时函数实现*/ void delay10ms()uint i;f

34、or(i=0;i10000;i+);void delay1ms()uinti;for(i=0;i500;i+);十一、课程设计总体要求1、 认真审题,看懂题目的要求!选择适当的课题,不益太简单或者太难。做到既能把课题完成又能锻炼自己的能力!2、 根据课题要求,复习相关的知识,查询相关的资料。3、 根据实验条件,找到适合的方案,找到需要的元器件及工具,准备实验。4、 根据课程设计的要求和自己所要增加的功能写好程序,根据芯片的功能写出相应的程序。然后再进行程序调试和相应的修改,以达到能够实现所要求的功能的目的。5、 还要根据实验的实际情况,添加些额外程序来使系统更加的精确、稳定,如定时补偿处理等。

35、6、 程序要尽量做到由各个子程序组成,在有些程序后面最好加注释,这样在程序出错的检查过程中可以更容易查找的到,也更简洁,更明白易懂。7、 该实验的程序可以参考sl-100系列单片机仿真实验系统中的实验例程,也可自己根据自己熟悉的方法来编程。8、 在设计控制按键程序时,注意按键的去抖动,及按键次数控制,否则就会出错。9、 这次的单片机课程设计重点是理论与实际的相结合。10、 该设计从头到尾都要求学生自己参与,熟悉了对整个设计的过程,使学生得到更系统的锻炼。十二、参考文献1、sl100单片机仿真实验系统资料。2、李群芳等编的单片微型计算机与接口技术 电子工业出版社 2005年11月2、徐伟等编的C51单片机高效入门 机械工业出版社 2007年1月

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!