太原理工单片机课程设计-秒表设计_第1页
太原理工单片机课程设计-秒表设计_第2页
太原理工单片机课程设计-秒表设计_第3页
太原理工单片机课程设计-秒表设计_第4页
太原理工单片机课程设计-秒表设计_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机课程设计报告书2021姓 名:班 级:分 数:实验要求:设计秒表计时系统,能够完成屡次计时,即一次及时可以做到屡次取值,同时在及时停止后能够自由查阅所记的数值。 试验所用语言:C语言试验环境:Windows XP Keil uVision3 STC-ISP V35试验芯片:AT89x51目录1、设计方案书2、设计理念3、程序流程图4、程序清单5、外部电路图6、按键说明7、程序运行结果8、思想总结9、参考文献一、设计方案书:通过不同按键的输入,使计时器完成不同的指令,例如开始计时、记录当前时间、停止时间、查找记录、清零等。计时器时间准确。计时范围尽量大些,有记录条数的显示,当时间计满自动停

2、止。二、设计理念:对于按键,设计按键子程序,在主程序中不断调用子程序。在数码管上显示秒,一个显示十位,一个显示各位。在二极管上,高三位显示记录条数,其余五位显示分钟,同时记录条数以二进制数显示。计时使用51单片机中断程序进行定时,使用T0作为计时器。在中断程序中,每隔一秒将一个全局变量置1,主程序在检测到其为1时,计时相应加一。显示时间在数码管上的使用数组输出。在二极管上的使用按位与的情况。记录事情通过按键子程序读回其值后,将当时的秒值和分值存入数组。同时记录条数加1。当计时停止后通过上翻键和下翻键可以在记录中查找各值。在清零按键按下的时候,所有显示清零,这时秒表可以开始重新计时。在计时阶段,

3、上、下翻键无法使用,清零键无法使用。只有当时间到达上限、停止按键按下和记录条数慢时计时才停止工作。因为屡次用到数字显示,显示使用子程序调用形式。三、程序流程图:开 始主程序:设置计数器 进入无限循环中NShangyi=1调用按键子程序 得值给键值根据键值相应得标志位置位NNxiayi=1M值加1Kai=1M值减1计时,检测tound=1那么计时加1 调用显示子程序NTing=1根据m值显示MM得内容停止计时,保存当前值,kai=0NNZhanting=1Qingling=1将所有位清零保存当前值到MM数组 同时m加1延时开 始按键子程序:NKeyv!=0xff进入循环,等待按键放开初始化将P3

4、口值给keyvNNKeyv=0xffKeyv=0xffReturn(0)Return(keyv)结束四、程序清单:#include "at89x51.h"#define uchar unsigned charuchar hex16=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e; 数码管显示int i,tound; /全局变量uchar key() /按键子程序uchar keyv;uchar tmp;keyv=P3; /将P3值给变量if(keyv=0xff)

5、/如果按键没有按下了,返回0return(0);for(i=0;i<1250;i+); /按下延时 防抖动keyv=P3; /从新付值if(keyv=0xff) /如果没有到达时间,认为无效返回0return(0);else /有按键值那么进入循环 for(;) tmp=P3; if(tmp=0xff) /当按键放开跳出break;return (keyv); /返回值void xianshi(int miao,int fen,int shu) /显示子程序 uchar fenx=0x01; P0=hexmiao%10; /在数码管上显示秒 P1=hexmiao/10; fenx=0xf

6、f; /在低位显示分钟 利用移位原理 for(i=0;i<fen;i+) fenx=fenx<<1; switch(shu) /在高位显示当前记录条数 case 0:fenx=fenx&0xff;break; /通过按位与置位 case 1:fenx=fenx&0xdf;break; case 2:fenx=fenx&0xbf;break; case 3:fenx=fenx&0x9f;break; case 4:fenx=fenx&0x7f;break; case 5:fenx=fenx&0x5f;break; case 6:f

7、enx=fenx&0x3f;break; case 7:fenx=fenx&0x1f; P2=fenx; /将数码管显示指示 void main(void) /主程序uchar jianzhi;int kai=0,ting=0,zhanting=0,shangyi=0,xiayi=0,qingling=1; /标志位int secound=0,minter=0,m=0,n=0; /时间位和记录条数位int MM82; /保存状态数组TMOD=0x09; /定义时间计数器T0TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;ET0

8、=1;EA=1; while(1) /主循环 jianzhi=key(); /读回键值 if(jianzhi=0xfe&&kai=0&&qingling=1) kai=1;secound=0;minter=0;m=0;qingling=0; /当开始按下时,设置标志位if(jianzhi=0xfd&&kai=1) ting=1; /当停止键按下时 置位if(jianzhi=0xfb&&kai=1) zhanting=1; /当暂停键按下时 置位if(jianzhi=0xf7&&kai=0) shangyi=1; /

9、当上移位键按下时 置位 if(jianzhi=0xef&&kai=0) xiayi=1; /当下移位键按下时 置位if(jianzhi=0x7f&&kai=0) qingling=1; /当清零键按下时 置位if(kai=1&&qingling!=1) /假设开始之后 if(tound=1) /接受中断传回得1秒标志位 secound+;tound=0; /秒加一,同时清楚标志位 if(secound=60) /60秒进位 minter+; secound=0; if(zhanting=1) /如果暂停了 MMm0=secound; /保存分秒值

10、 MMm1=minter; m+; /记录条数加一 zhanting=0; /去除标志位 xianshi(secound,minter,m); /调用显示子程序 if(ting=1) /当停止按下时 MMm0=secound; /保存当前值 MMm1=minter; kai=0; /关开值 n=m; ting=0; xianshi(MM00,MM01,0); /显示最后时间 else if(m!=0&&qingling=0) /在没有计停止之后 if(shangyi=1) /上移键按下 将记录上移一个 if(n=m) n=0; /为最上一个得时候 回到0 else n+; if

11、(xiayi=1) /下移键按下 记录下移一个 if(n=0) n=m; /为最后一个时 变成最上面得一个 else n-; secound=MMn0; /调出记录值 minter=MMn1; xianshi(secound,minter,n); /显示记录值 if(qingling=1) /当清零键按下 m=0; /所有标志位清零 n=0; secound=0; minter=0;kai=0;xianshi(0,0,0); /显示清零 shangyi=0; xiayi=0; void t0(void) interrupt 1 using 0 /中断子程序 int shiv;shiv+; /每中断一次加一if(shiv=20) /20次中断一次置位,时间为1秒 shiv=0; tound=1; TH0=(65536-50000)/256; /从新置值TL0=(65536-50000)%256; /程序结束五、外部电路图:见附页六、按键说明: P3-0: 开始按键 P3-1:停止按键 P3-2:暂停按键 P3-3:上移按键 P3-4:下移按键 P3-7:清零

温馨提示

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

评论

0/150

提交评论