基于单片机定时器的秒表设计.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
设计说明书 秒表功能 版本 作者 修改日期 说明 V1.00 罗昌龙 2010、1012 完成时间:2010、1012 功能描述: 1.1:功能说明:P2.0口外接一个按键KEY1(启动键)。P2.1口外接一个按键KEY2(停止键),按下启动键,秒表0开始计时,时间在数码管上显示。按下停止键后,累计用时在数码管上显示。再次按下启动键,重新从开0始计时间。(时间精确到0.1s,使用定时器实现) 1.2:系统整体框图: 2、开发环境: 开发软件:Keil u Vision2 仿真环境:Protoues 芯片型号:ATMEL 80C51 3、函数接口: 函数名:init 功能功能:设置T0的工作方式,装入计数初值,开中断并允许T0中断。 形式参数:无。 返回值:无。 函数名:delay 功能功能:延时。 形式参数:无。 返回值:无。 函数名:canplay 功能功能:将各个显示位都清零。 形式参数:无。 返回值:无。 函数名:timer0 功能功能:重载计数初值,对中断计数,判断各显示位是否大于十,大于十则回零。 形式参数:无。 返回值:无。 4、程序流程: 5、变量定义: 此题中定义了全局变量can来对中断进行计数和 hurd ten bits ms分另用来显示各个位。 程序 #include reg51.h #define N 255 sbit start=P2^0; sbit stop=P2^1; unsigned char cnt=0,hurd=0,ten=0,bits=0,ms=0,sec=0; unsigned char code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char code tab2[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; unsigned char code a[]={0xef,0xdf,0xbf,0x7f}; void init() //初始化函数 { TMOD=0x01;//设置T0的工作方式 TH0=0x3c;//装入计数初值 TL0=0xb0; EA=1;//开总中断 ET0=1;//开中断T0 TR0=1;//允许T0中断 } void delay(unsigned char n)//延时函数 { unsigned char i; for(i=0;in;i++); } void canplay()//清零函数 { hurd=0; ten=0; bits=0; ms=0; sec=0; } void main(void)//主函数 { while(1) { P1=a[0]; P3=tab[0]; delay(N); P1=a[1]; P3=tab2[0]; delay(N); P1=a[2]; P3=tab[0]; delay(N); P1=a[3]; P3=tab[0]; delay(N); if(start==0)//检测开始健是否按下 { delay(200);//延时消抖 break; } } while(1)//死循环 { if(start==0)//检测开始键是否按下 { delay(25);//延时消抖 canplay();//计数清零 init();//初始化 } while(1) { if(sec==10){hurd=hurd+1;sec=0;}//如果到达10则向高位进数,且自己回零 if(hurd==10){ten=ten+1;hurd=0;} if(ten==10){bits=bits+1;hurd=0;} if(bits==10){ms=ms+1;bits=0;} if(ms==10){ms=0;} P1=a[0]; //显示最低位 P3=tab[sec]; delay(N); //延时

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档