《2022年2022年基于PICFA的数字钟设计》由会员分享,可在线阅读,更多相关《2022年2022年基于PICFA的数字钟设计(9页珍藏版)》请在金锄头文库上搜索。
1、电子工程系项目考核(报告)项目名称:数字时钟项目姓名班级学号课程名称名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 9 页 - - - - - - - - - 一、 项目要求:数码管默认显示 00:00。 数码管 1, 2 表示小时,数码管 3 , 4 表示分钟。如此,实现时钟功能。要求能够整点报时、闹钟提示;并附带有秒表功能。 按键可以调整时钟时间、 切换显示页面和设定闹钟时间等。二、 项目原理分析在项目用的单片机开发板上单片机的IO 口接四位数码管的各段。同时开发板共
2、阴数码管的阴极由138 译码器的输出端控制。在该项目中我采用了数码管的动态显示,即每位数码管点亮2ms 时间左右,由于人的视觉暂留现象及发光二极管的余辉效应,只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的 I/O 端口,而且功耗更低。在实现了数码管的动态显示的基础上在主程序中通过计算定时器 1 的中断次数,从而得到计时时间和秒表时间的基准时间。同时在主程序中添加按键处理程序,实现时钟的开始、中断和校时,同时实现闹钟定时和切换显示等功能,还有秒表计时功能。三、 硬件电路图以及原理3.1 硬件电路图如下:名师资料总结 - -
3、-精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 9 页 - - - - - - - - - 3.2 硬件原理:该项目中,主要的功能模块有:数码管显示模块;按键模块;蜂鸣器模块。数码管显示模块主要是由芯片PIC16F877A 内部的定时器1 的定时中断实现数码管的动态显示。按键模块主要利用矩阵式按键实现多按键功能,矩阵式按键原理是在一端加高电平,然后检测另一端是否为高电平来判断按键是否按下,通过不同的定义可以让按键实现不同的功能。蜂鸣器模块通过三极管的开关作用和驱动作用由芯片控鸣叫与否。四、程序
4、说明以及程序流程图该时钟默认显示页面为时钟计时页面,按键SW1 控制时钟、秒表的开始和中断,按按键SW1 一次,如果数码管在显示秒表,则开始计秒功能;否则,开始正常计时;再按一次SW1 则实现中断功能。按键 SW2 实现是数码管的选位,从第一个数码管开始,按一次就选中下一位数码管,循环选择。SW3 实现的是加1 功能,每按一次就在 SW2 选中的位上加 1。SW4 是实现数码管切换显示功能,按一次就进入闹钟调时的显示页面, 再按一次就进入秒表显示页面,实现数名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - -
5、 - - - - 第 3 页,共 9 页 - - - - - - - - - 码管显示在时钟计时、 闹钟定时和秒表计时这三个不同页面的循环切换显示。图 1 是时钟、秒表计时开始和中断, 以及闹钟提醒的流程图;图 2 是显示页面的却换流程图; 图 3 是校时和定时流程图。 下面就是程序的流程图:h=1 上电h=3 时钟计时秒表计时SW1 按下SW1 再按下h=3 是时钟计时中断秒表计时中断,时钟正常计是否否SW4 每按一次h加 1(1=3)上电h=1 h=2 h=3 显示时钟页面显示时钟页面显示秒表页面SW2 每按一次 a 加 1 (1=4)上电a=1 a=2 a=3 a=4 SW3 按下SW3
6、 按下SW3 按下SW3 按下h=1 h=2 h=1 h=2 h=1 h=2 h=1 h=2 时 钟小 时十 位加 1 闹 钟小 时十 位加 1 时 钟小 时个 位加 1 闹 钟小 时个 位加 1 时 钟分 钟十 位加 1 时 钟分 钟个 位加 1 闹 钟分 钟个 位加 1 闹 钟分 钟十 位加 1 整点报时,闹钟提醒图 1 图 2 图 3 闹钟名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 9 页 - - - - - - - - - 五、程序清单(要求有详尽的注释)ma
7、in()/主函数 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
8、 输入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; /秒表标志
9、位取反,开始计时或中断else biaozhi=!biaozhi;time=0;/ 时钟标志位取反,开始计时或中断 while(RD0=1);/ 等待放手 RD4=0; RD5=1; /按键 SW2 一端高电平if(RD0=1)/ 判断按键 SW2是否按下名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 9 页 - - - - - - - - - delay(10);/ 延 时 10mS去键抖if(RD0=1)/ 再次确认按键SW2 是否按下RD2=1;delay(30);
10、RD2=0;/ 蜂 鸣 器响 30mS a+;/位选标志位加 1 if(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 毫秒,然后再点亮LED3=10; delay(300);/延时 300 毫秒LED3=b; if(a=4) b=LED4;/ 先关闭
11、数码管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;/ 蜂 鸣器响 30mS if(h=1)/ 判 断 显示 标志位 LED1=s1;LED2=s2;LED3=s3;LED4=s4;/ 数码管显示时钟页面名师资料总结 - - -精品资料欢迎下载 - - -
12、- - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 9 页 - - - - - - - - - if(a=1) s1+;/ 如果位选标志位 a=1,则小时十位加1 if(a=2) s2+;/如果位选标志位 a=2,则小时个位加 1 if(a=3) s3+;/如果位选标志位 a=3,则分钟十位加 1 if(a=4) s4+;/如果位选标志位 a=4,则分钟十位加 1 if(s1=3)s1=0; /使时钟在校时时也能按计时规则进行if(s12) if(s2=10)s2=0; if(s1=2) if(s2=4)s2=0; if(s3=
13、6)s3=0; if(s4=10)s4=0; if(h=2)/ 判断显示标志位 LED1=n1;LED2=n2;LED3=n3;LED4=n4;/数码管显示闹钟定时页面if(a=1)n1+; /如果位选标志位 a=1, 则小时十位加 1 if(a=2) n2+;/如果位选标志位 a=2,则小时个位加 1 if(a=3) n3+;/如果位选标志位 a=3,则分钟十位加 1 if(a=4)n4+; /如果位选标志位 a=4, 则分钟十位加 1 if(s1=3)s1=0; /使闹钟在定时时也能按计时规则进行if(s1=400) /time 为定时器 1 的中断次数,利用定时器 1 提供的 2.5mS
14、的基准时间计时time=0; z+; /1 秒计算if(z=60)s4+;z=0; / 时 钟 计 时if(s4=10) s3+;s4=0; if(s3=6) s2+;s3=0; if(s1=40) RD2=0; if(s3=0&s4=0) /整点报时RD2=1;/蜂鸣器响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; 名师资料总结 - - -精品资
15、料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 9 页 - - - - - - - - - 六、心得体会在这次的时钟项目中,我根据一些电子钟的功能要求,在这个时钟项目中集成了较多的功能,包括常用的时钟、闹钟、整点报时、校时和定时功能,另外我还新增了一个秒表的功能;所以这个时钟的功能还是比较强大的。但对于我的设计来说却是一个挑战,因为我还没有编写过多显示页面的程序,后来我通过定义标志位来实现数码管显示页面的切换,但这种方法原理虽然简单,但程序却变得复杂。标志位太多,在编写程序时很容易出错,程序量也比较多。这些问题都是我日后需要完善的地方。不管怎样说,在这次时钟项目中,我学到了很多,利用新方法去实现自己想要实现的功能,虽然还有很多不足的地方,但对于我来说,这是对自己的一个证明,说明我的努力有收获;但在这次时钟项目中,也让我看到了自己的不足,需要学习的地方还有很多,所以,以后还要加强学习,以弥补自己的不足。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 9 页 - - - - - - - - -