- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
流水灯及正计时的实现
流水灯及秒表的实现 101041201 曹萌晨 设计思路 在课上学习了流水灯、倒计时及时钟电路的程序,希望充分利用所学知识。 实现流水灯同时也 想实现秒表的功能,希望尽可能多利用片内资源。 实现的功能 花样流水灯(5种类型) 1奇偶循环点亮 2从两边向中间点亮 3从中间向两边点亮 4依次多点亮一盏灯,直到全亮 5闪烁三次 0到99的正计时 Key2按下实现加1功能 key3按下实现计时功能,再次按下暂停 使用的片内资源 定时器: TMOD=0x01; 设置定时器0为工作方式1 计数周期约为1us 中断相关寄存器设置 TH0=(65536-4000)8; //高8位 TL0=(unsigned char)(65536-4000); //低8位 使用的片外资源 8个LED 蜂鸣器 数码管(2个) 按键key2,key3 程序:变量定义 #includereg52.h //52单片机头文件 #include intrins.h //包含有左右循环移位子函数的库 sbit beep=P0^6; //定义蜂鸣器 sbit key=P3^2; //定义公共端口 bit SecFlag; //中断标志 bit sign; //事先暂停和再次计时功能的标志 bit KeyDownFlg; //按键按下的标志 unsigned char KeyBuff; //扫描按键 unsigned char Count4ms; unsigned char disp_buff[2]; unsigned char disp_cnt; //通过加1扫描数码管 unsigned char P2_buff; //蜂鸣器 unsigned char Beep_cnt; //蜂鸣器鸣响时间计数 unsigned char sec; //定义秒变量 code unsigned char Tab[2]={0xfe,0xfd};//选位 code unsigned char Tab1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//;数码管显示字型表 程序:子程序延时函数 void delay500ms() { unsigned i,j,k; //计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5 for(i=15;i0;i--) // 三层循环: R7*(m+3) = 15*33333 = 499995us for(j=202;j0;j--) //二层循环m:R6*(n+3) = 202*165 = 33330us for(k=81;k0;k--); //一层循环n:R5*2 = 81*2 = 162us } //循环外: 5us 子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us 程序:子程序中断程序 void T0_service(void) interrupt 1 //中断函数 { TH0=(65536-4000)8; //高8位 TL0=(unsigned char)(65536-4000); //低8位 Count4ms=Count4ms+1; if (Count4ms==250) //实现一秒的定时 {Count4ms=0; SecFlag=1; } P2_buff=Tab[disp_cnt]; //选位 if (KeyDownFlg) { 程序:子程序中断程序 P2_buff=P2_buff0xbf; //打开蜂鸣器,如:1011 1111p0^0即1111 1110 Beep_cnt=Beep_cnt+1; //蜂鸣器计数 if (Beep_cnt==100) KeyDownFlg=0; } P0=P2_buff; P2=Tab1[disp_buff[disp_cnt]]; //选取一位,并从0到9选一个数值 disp_cnt=disp_cnt+1; if (disp_cnt==2) disp_cnt=0; } 程序:子程序显示函数及时间改变程序 void FillDispBuffer(void) //显示 { disp_buff[0]=se
您可能关注的文档
最近下载
- 室外给水排水管道及设施安装-08SS523 建筑小区塑料排水检查井.pdf VIP
- ihi trx寿力离心空压机操作手册使用说明书.pdf
- 2024全新婴幼儿喂养ppt课件.pptx VIP
- 开幕式活动方案.docx VIP
- 冠脉介入治疗术后并发症护理及预防.doc VIP
- 中职语文拓展模块教学计划.docx VIP
- 中职《新时代劳动教育教程》课程标准.docx VIP
- 中国传媒大学-实用播音教程-普通话语音和播音发声(一)-课件.pptx VIP
- 人教版2025高中地理选择性必修一用“芯”解读青藏高原的时光变迁——自然环境的整体性 课件.pptx VIP
- 密闭式吸痰操作规范.docx VIP
文档评论(0)