- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计时秒表的原理及实现 班级:101041A 姓名:漆炜强 学号:101041120 具体功能: 假设有10人左右参加1000米测试: 当1000米测试开始时按下单片机中的KEY2键,开始计时,时钟开始走动并计时,当有人跑过终点时,按下单片机中的KEY3键即可记录其跑1000米的成绩,不断有人跑过终点,可不断按下KEY3键记录其1000米测试成绩,同时时钟不停止计时,当最后一个跑完时,按下KEY2键即可暂停计时,然后按下KEY3键可根据连续调出每个同学跑出的成绩,方便让老师登记。按下复位键则可清零所有数据 实现思路 P0口控制按键以及蜂鸣器鸣叫已经六个数码管的位码(数码管是否工作) P2口控制数码管段码(显示的字形) 利用单片机的内部定时器产生4ms周期,计数250次实现秒计时 通过设置变量实现按键时序的判断 通过设置数组实现数据的记录与输出 最终确定方案 P0口控制按键以及蜂鸣器鸣叫已经六个数码管的位码(数码管是否工作) P2口控制数码管段码(显示的字形) 利用单片机的内部定时器产生4ms周期,计数250次实现秒计时 通过设置变量s实现按键时序的判断,从而让单片机识别是先按下的那个按键,再按下的哪个按键 通过设置而为二维数组实现数据的记录与输出 方案原理图 使用的片内资源 定时器0:使用方式1(16位),计数周期约1us(12/11.0592MHz),最长定时时间为:65536us=65ms; 相关寄存器设置: TMOD=0x01; TH0=(65536-40000)8; TL0=(unsigned char)(65536-40000); 使用片内资源 启用定时器0中断,从而实现4ms计数一次 片内RAM为两个表: code unsigned char Tab1[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0x88,0x83,0xA7,0xA1,0x86,0x8E}; code unsigned char Tab[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; 表一查数码管显示字形,表二查P0的值 使用片外资源 数码管 按键 蜂鸣器 流程图及程序 函主数流程图 中断函数流程图 源程序 编写过程中遇到的问题 1、最开始设想需要按键控制时钟的开始与暂停,因此引入了一个s变量 2、在记录与调用数据时,开始使用的是一维数组,后来发现使用一维数组时每记录与调用一次数据,均需要设置一个数组来储存数据,给编程带来了很大的麻烦,因此引入了一个二维数组来存放多组时间数据 总结与收获 由于C语言还是之前学的,在编写程序之前,遇到了挺多C语言方面的问题,因此在开始编写之前,首先将C语言大体再看了一遍,通过单片机课程,明白了每门课与每门课之间是有联系的 在学习过程中遇到了不明白的问题,主动向同学 请教,同时自己也在网上找了郭天祥的单片机教程的视频,通过编程训练,让我对单片机有了初步的了解 本文观看结束!!! 祝各位身体健康!万事如意!! * 计时秒表原理及功能 在数字时钟的基础上加入暂停以及记录数据,调用数据的功能,从而完全模拟我们跑3000米比赛 或者1000米体质测试时体育老师所用的秒表。 #include reg52.h sbit Key=P3^2; bit KeyDownFlag,SecFlag,k; unsigned char sec,min,hou; unsigned char Data[10][3]; //设置存放变量的二维数组 unsigned char disp_buff[6]; unsigned char Count4ms,P2_buff,Beep_cnt,KeyBuff,disp_cnt,i,j,s,m,n; code unsigned char Tab1[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0x88,0x83,0xA7,0xA1,0x86,0x8E}; //数码管字符显示表 code unsigned char Tab[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; void T0_service(void) interrupt 1 { TH0=(65536-4000)8; TH1=(unsigned char)(65536-4000); if(s==2){ Count4ms=Count4ms+1; if(Count4ms==250) {
文档评论(0)