基于pic16f877a的数字钟设计

上传人:ji****n 文档编号:45074492 上传时间:2018-06-15 格式:DOC 页数:9 大小:115.65KB
返回 下载 相关 举报
基于pic16f877a的数字钟设计_第1页
第1页 / 共9页
基于pic16f877a的数字钟设计_第2页
第2页 / 共9页
基于pic16f877a的数字钟设计_第3页
第3页 / 共9页
基于pic16f877a的数字钟设计_第4页
第4页 / 共9页
基于pic16f877a的数字钟设计_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《基于pic16f877a的数字钟设计》由会员分享,可在线阅读,更多相关《基于pic16f877a的数字钟设计(9页珍藏版)》请在金锄头文库上搜索。

1、电子工程系项目考核电子工程系项目考核(报告)(报告)项目名称项目名称:数字时钟项目数字时钟项目姓 名 班 级 学 号 课程名称 一、一、项目要求:项目要求:数码管默认显示 00:00。数码管 1,2 表示小时,数码管 3,4 表示分钟。如此,实现时钟功能。要求能够整点报时、闹钟提示;并附带有秒表功能。按键可以调整时钟时间、切换显示页面和设定闹钟时间等。二、二、项目原理分析项目原理分析在项目用的单片机开发板上单片机的 IO 口接四位数码管的各段。同时开发板共阴数码管的阴极由 138 译码器的输出端控制。在该项目中我采用了数码管的动态显示,即每位数码管点亮 2ms 时间左右,由于人的视觉暂留现象及

2、发光二极管的余辉效应,只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的 I/O 端口,而且功耗更低。在实现了数码管的动态显示的基础上在主程序中通过计算定时器 1 的中断次数,从而得到计时时间和秒表时间的基准时间。同时在主程序中添加按键处理程序,实现时钟的开始、中断和校时,同时实现闹钟定时和切换显示等功能,还有秒表计时功能。三、三、硬件电路图以及原理硬件电路图以及原理3.1 硬件电路图如下:硬件电路图如下:3.2 硬件原理:硬件原理:该项目中,主要的功能模块有:数码管显示模块;按键模块;蜂鸣器模块。数码管显示模块主要是由芯片

3、PIC16F877A 内部的定时器 1 的定时中断实现数码管的动态显示。按键模块主要利用矩阵式按键实现多按键功能,矩阵式按键原理是在一端加高电平,然后检测另一端是否为高电平来判断按键是否按下,通过不同的定义可以让按键实现不同的功能。蜂鸣器模块通过三极管的开关作用和驱动作用由芯片控鸣叫与否。四、程序说明以及程序流程图四、程序说明以及程序流程图该时钟默认显示页面为时钟计时页面,按键 SW1 控制时钟、秒表的开始和中断,按按键 SW1 一次,如果数码管在显示秒表,则开始计秒功能;否则,开始正常计时;再按一次 SW1 则实现中断功能。按键 SW2 实现是数码管的选位,从第一个数码管开始,按一次就选中下

4、一位数码管,循环选择。SW3 实现的是加 1 功能,每按一次就在 SW2 选中的位上加 1。SW4 是实现数码管切换显示功能,按一次就进入闹钟调时的显示页面,再按一次就进入秒表显示页面,实现数码管显示在时钟计时、闹钟定时和秒表计时这三个不同页面的循环切换显示。图 1 是时钟、秒表计时开始和中断,以及闹钟提醒的流程图;图 2 是显示页面的却换流程图;图 3 是校时和定时流程图。下面就是程序的流程图:h=1上电h=3时钟计时 秒表计时SW1 按下SW1 再按下h=3 是时钟计时中断秒表计时中断,时钟正常计时是否否SW4 每按一次 h 加 1(1=3)上电h=1h=2h=3显示时钟页面显示时钟页面显

5、示秒表页面SW2 每按一次 a 加 1(1=4)上电a=1a=2a=3a=4SW3 按下SW3 按下SW3 按下SW3 按下h=1h=2h=1h=2h=1h=2h=1h=2时钟小时十位加 1闹钟小时十位加 1时钟小时个位加 1闹钟小时个位加 1时钟分钟十位加 1时钟分钟个位加 1闹钟分钟个位加 1闹钟分钟十位加 1整点报时, 闹钟提醒图 1图 2图 3闹 钟五、程序清单(要求有详尽的注释)五、程序清单(要求有详尽的注释)main()/主函数int a=1,b,z,h=1;/定义一个标志位a,bints1=0,s2=0,s3=0,s4=0; /时钟小时分钟的十位和个位int n1=0,n2=0,

6、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;LE

7、D2=0;LED3=0; LED4=0;/数码管 1 显示 4while(1)RD4=1;/ 按键 SW1 一端高电平 if(RD0=1)/ 判断按键是否按下 delay(10);/ 延时 10mS 去键抖if(RD0=1)/再次确认按键是否按下RD2=1;delay(30);RD2=0; /蜂鸣器响 30mSif(h=3) /判断是否是秒表显示页面mbz=!mbz;t=0; /秒表标志位取反,开始计时或中断elsebiaozhi=!biaozhi;time=0;/时钟标志位取反,开始计时或中断while(RD0=1);/等待放手 RD4=0;RD5=1; /按键 SW2 一端高电平if(RD

8、0=1)/ 判断按键 SW2是否按下delay(10);/ 延时 10mS去键抖if(RD0=1)/再次确认按键SW2 是否按下RD2=1;delay(30);RD2=0;/蜂鸣器响 30mSa+;/位选标志位加 1if(a=5) a=1;if(a=1) b=LED1;/先关闭数码管 300 毫秒,然后再点亮 LED1=10; delay(300);/延时 300 毫秒 LED1=b; if(a=2) b=LED2;/先关闭数码管 300 毫秒,然后再点亮 LED2=10; delay(300);/延时 300 毫秒 LED2=b; if(a=3) b=LED3;/先关闭数码管 300 毫秒,

9、然后再点亮 LED3=10; delay(300);/延时 300 毫秒 LED3=b; if(a=4) b=LED4;/先关闭数码管300 毫秒,然后再点亮 LED4=10; delay(300);/延时 300 毫秒 LED4=b; while(RD0=1);/ 等待放手RD5=0;RD6=1;/按键 SW3 一端高电平if(RD0=1)/ 判断按键SW3 是否按下delay(10);/ 延时10mS 去键抖if(RD0=1)/再次确认按键 SW3 是否按下 RD2=1;delay(30);RD2=0;/蜂鸣器响 30mSif(h=1)/判断显示标志位 LED1=s1;LED2=s2;LE

10、D3=s3;LED4=s4;/数码管显示时钟页面if(a=1) s1+;/如果位选标志位 a=1,则小时十位加 1if(a=2) s2+;/如果位选标志位 a=2,则小时个位加 1if(a=3) s3+;/如果位选标志位 a=3,则分钟十位加 1if(a=4) s4+;/如果位选标志位 a=4,则分钟十位加 1if(s1=3)s1=0; /使时钟在校时时也能按计时规则进行if(s1=400)/time 为定时器 1 的中断次数,利用定时器 1 提供的 2.5mS 的基准时间计时time=0; z+;/1 秒计算 if(z=60)s4+;z=0;/时钟计时 if(s4=10) s3+;s4=0;

11、if(s3=6) s2+;s3=0;if(s1=40)RD2=0; if(s3=0/蜂鸣器响 if(time=40)RD2=0; if(mbz)/判断秒表标志位if(t=40)/实现秒表 0.1 秒精度t=0;/秒表计时m4+;if(m4=10) m3+;m4=0;if(m3=10) m2+;m3=0;if(m2=6) m1+;m2=0;if(m1=10) m1=0; 六、心得体会六、心得体会在这次的时钟项目中,我根据一些电子钟的功能要求,在这个时钟项目中集成了较多的功能,包括常用的时钟、闹钟、整点报时、校时和定时功能,另外我还新增了一个秒表的功能;所以这个时钟的功能还是比较强大的。但对于我的设计来说却是一个挑战,因为我还没有编写过多显示页面的程序,后来我通过定义标志位来实现数码管显示页面的切换,但这种方法原理虽然简单,但程序却变得复杂。标志位太多,在编写程序时很容易出错,程序量也比较多。这些问题都是我日后需要完善的地方。不管怎样说,在这次时钟项目中,我学到了很多,利用新方法去实现自己想要实现的功能,虽然还有很多不足的地方,但对于我来说,这是对自己的一个证明,说明我的努力有收获;但在这次时钟项目中,也让我看到了自己的不足,需要学习的地方还有很多,所以,以后还要加强学习,以弥补自己的不足。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号