资源描述:
《stm8单片机课程设计报告(闹钟+定时器)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、课程设计内容与要求课程设计目的:1、巩固和加深对单片机原理知识的理解和运用。2、进一步提高学生综合运用所学知识的能力。3、培养学生综合分析问题、发现问题和解决问题的能力基本要求:1)显示时间和日期2)可设置多个闹钟3)可以调整时间扩展功能:1)按键复用共有六个按键,每个按键在不同模式下有不同的功能。2)秒表功能进入秒表界面后,再按一下就秒表开始计时,再按一下秒表停止。3)省电模式在每天00:00会自动进入省电模式,8个数码管会自动关闭,到5:00时会自动退出省电模式;也可以手动进入和退出省电模式。4)查看/删除闹钟查看闹钟时间为五秒,五秒内
2、按键无动作则自动退出。器件介绍本次设计主要用到的硬件有:1、51实验板1块2、stm8s105c6开发板1快51实验板:主要用到实验板上的硬件有:1)两个四位一体的共阴LED数码管,电路图如下:162)两个74HC573的锁存芯片:3)8个独立按键,用了其中6个1)一个蜂鸣器:Stm8s105c6开发板:总共有48个引脚,本设计共用引脚20个引脚。PB0~PB7和PE6~PE7用于数码管显示控制,PD0~PD5用于键盘输入,PD6、PE0、PE3用于LED指示灯控制。PD7用于蜂鸣器控制。16设计方案本次设计采用51实验板和stm8s105
3、c6开发板来完成,没有做实物。显示电路采用8个共阳数码管显示;控制按键采用六个独立按键,每一个按键都有复用功能;闹钟提醒采用蜂鸣器;外加四个不同颜色的LED发光二极管,当进入相应功能模式时对应的指示灯就会亮。1、键盘设计:在键盘电路中,使用的是6个独立键盘。键盘在源程序中的功能安排如下:1)当扫描到有键盘按下时,设置相应标志位,然后延时一定时间消抖。2)键盘的设置键盘表面如图:OkEsc其中各键设置为:(待机状态:正常的时间显示模式)待机状态下是“设置闹钟”,在其他模式下是“递增功能”待机状态下是“调整时间”,在其他模式下是“递减功能”。待
4、机状态下是“秒表功能”,在其他模式下是“左移功能”。待机状态下是“查看/删除闹钟”,在其他模式下是“右移功能”OK待机状态下是“切换显示”,在省电模式下是“退出功能”,在其他模式下是“确认功能”Esc待机状态下是“省电模式”,在查看/删除闹钟模式下是“删除功能”,在其他模式下是“退出功能”2、数码管显示:采用按位扫描的动态显示方式。3、其他设计:定时器使用stm8s105c6中的Tim2定时器,每1ms产生一次溢出中断。闹铃响的时间为15秒。查看/删除闹钟模式下,5s内键盘无动作则自动退出。每次按键按下后,会延时240ms,此时间内不会再对
5、键盘进行扫描。在每天00:00会自动进入省电模式,8个数码管会自动关闭,到5:00时会自动退出省电模式;也可以手动进入和退出省电模式。164、设计思路:开始初始化引脚和Tim2定时器调用时间处理函数闹铃响闹钟时间?是否扫描键盘闹钟设置位=1?是时间调整位=1?否是调用相应功能函数否秒表功能位=1?是否查看闹钟位=1?是否显示切换位=1?显示日期是是否显示时间165、以下是部分程序://**************标志位************//_Booloff;//省电模式_Booltab;//切换显示模式_Boolrun;//控制秒表_
6、Boolleft;//左移_Boolright;//右移_Boolset;//设置闹钟_Booladjust;//调整时间_Boolok;//确定_Boolesc;//取消或删除_Boolduan@PE_ODR:7;//PE6作为段锁存_Boolwei@PE_ODR:6;//PE7作为位锁存_Boolset_c@PE_ODR:3;_Booladjust_t@PE_ODR:0;_Boolcheck_clock@PD_ODR:6;_Boolc_alarm@PD_ODR:7;//*****************相关变量*************
7、******//unsignedcharmonth_day[]={31,28,31,30,31,30,31,31,30,31,30,31};unsignedcharwei_ma[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//显示位码unsignedcharduan_ma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴极显示段码unsignedcharsec_duan_ma[]={0xbf,0x86,0xdb,0xcf,0xe6
8、,0xed,0xfd,0x87,0xff,0xef};unsignedcharhour_[5],minute_[5],second_[5]={1,2,3,4,5};//用于秒表u