网站大量收购独家精品文档,联系QQ:2885784924

基于PIC16F877A的数字钟设计.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于PIC16F877A的数字钟设计

电子工程系项目考核(报告) 项目名称:数字时钟项目 姓 名 班 级 学 号 课程名称 项目要求: 数码管默认显示00:00。数码管1,2 表示小时,数码管 3,4 表示分钟。如此,实现时钟功能。要求能够整点报时、闹钟提示;并附带有秒表功能。按键可以调整时钟时间、切换显示页面和设定闹钟时间等。 项目原理分析 在项目用的单片机开发板上单片机的IO 口接四位数码管的各段。同时开发板共阴数码管的阴极由138 译码器的输出端控制。在该项目中我采用了数码管的动态显示,即每位数码管点亮 2ms 时间左右,由于人的视觉暂留现象及发光二极管的余辉效应,只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O 端口,而且功耗更低。在实现了数码管的动态显示的基础上在主程序中通过计算定时器1的中断次数,从而得到计时时间和秒表时间的基准时间。同时在主程序中添加按键处理程序,实现时钟的开始、中断和校时,同时实现闹钟定时和切换显示等功能,还有秒表计时功能。 硬件电路图以及原理 3.1 硬件电路图如下: 3.2硬件原理: 该项目中,主要的功能模块有:数码管显示模块;按键模块;蜂鸣器模块。数码管显示模块主要是由芯片PIC16F877A内部的定时器1的定时中断实现数码管的动态显示。按键模块主要利用矩阵式按键实现多按键功能,矩阵式按键原理是在一端加高电平,然后检测另一端是否为高电平来判断按键是否按下,通过不同的定义可以让按键实现不同的功能。蜂鸣器模块通过三极管的开关作用和驱动作用由芯片控鸣叫与否。 四、程序说明以及程序流程图 该时钟默认显示页面为时钟计时页面,按键SW1 控制时钟、秒表的开始和中断,按按键SW1一次,如果数码管在显示秒表,则开始计秒功能;否则,开始正常计时;再按一次SW1则实现中断功能。按键SW2实现是数码管的选位,从第一个数码管开始,按一次就选中下一位数码管,循环选择。SW3实现的是加1功能,每按一次就在SW2选中的位上加1。SW4是实现数码管切换显示功能,按一次就进入闹钟调时的显示页面,再按一次就进入秒表显示页面,实现数码管显示在时钟计时、闹钟定时和秒表计时这三个不同页面的循环切换显示。图1是时钟、秒表计时开始和中断,以及闹钟提醒的流程图;图2是显示页面的却换流程图;图3是校时和定时流程图。下面就是程序的流程图: h=1 五、程序清单(要求有详尽的注释) main()//主函数 { int a=1,b,z,h=1;//定义一个标志位a,b ints1=0,s2=0,s3=0,s4=0; //时钟小时分钟的十位和个位 int n1=0,n2=0,n3=0,n4=0; //闹钟小时分钟的十位和个位 int m1=0,m2=0,m3=0,m4=0; //秒表的标志位 static bit biaozhi=0; //时钟的静态标志位 static bit mbz=0; //秒表的静态标志位 ADCON1=0X06;//初始化 TRISA=0X00; TRISB=0X01;//外部中断输入 PORTB=0X00; TRISD=0X01;//设置RD0输入 PORTD=0X01;//设置RD0输入 TRISE=0X00; timer1init();//定时器1初始化 INTE=1; //外部中断使能 INTEDG=1;//外部中断上升沿 RA1=1;//使能138译码器 LED1=0;LED2=0;LED3=0; LED4=0;//数码管1显示4 while(1) { RD4=1;// 按键SW1一端高电平 if(RD0==1)// 判断按键是否按下 { delay(10);// 延时10mS去键抖 if(RD0==1)//再次确认按键是否按下 {RD2=1;delay(30);RD2=0; //蜂鸣器响30mS if(h==3) //判断是否是秒表显示页面 {mbz=!mbz;t=0;} //秒表标志位取反,开始计时或中断 else {biaozhi=!biaozhi;time=0;}//时钟标志位取反,开始计时或中断 } while(RD0==1);//等待放手 } RD4=0; RD5=1; //按键SW2一端高电平 if(RD0==1)// 判断按键SW2是否按下 {delay(10);// 延时10mS去键抖 if(RD0==1)//再次

文档评论(0)

jgx3536 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档