欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOCX文档下载  

    多功能电子钟设计报告--单片机课程设计.docx

    • 资源ID:11146334       资源大小:121.85KB        全文页数:20页
    • 资源格式: DOCX        下载积分:4
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要4
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    多功能电子钟设计报告--单片机课程设计.docx

    课 程 设 计 课程名称 单片机课程设计题目名称 多功能电子钟 学生学院 物理与光电工程学院 专业班级 学 号 学生姓名 指导教师 一、 课程设计题目:多功能电子钟二、 设计要求:1)、时钟部分分为三个部分,分别为计时、校时、和定时闹钟。1、计时部分:用T2进行的,T2每10ms溢出一次,每一百秒刷新一次。每60秒就进一,且个位置零。凡是闰年的2月为28天,非闰年为29天,可先定义闰年和非闰年的2月天数。等比较是闰年时就显示相应的天数。2、较时部分:用计数器T2进行溢出计时,按下UP键进入校时状态通过。按F,E,D,C,B可分别在LED上显示年,月,日,小时,分钟,秒和星期。8和5两键是对高位进行调整的,而9和6是对低位年进行调整的。ENTER键为退出。3、定时闹钟:闹钟的实现是通过CONPARE子程序的比较,当所有的时间条件都一样时,闹钟报警。因为设计了32个可报警时间定时,所以系统根据检测到的时间闹钟而分别响应。2)、显示部分: LED数码管显示(动态显示)1、定时/中断的实现:每一次中断/定时只显示一位数码2、设计显示缓冲区:时,分,秒共六位,用六个字节的存储单元。3、查到笔形码。4、采用数码管的动态扫描工作方式,可通过键盘分别选择显示年或者月/日或者时/分或者分/秒。5LED数码管的笔段码0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf共阳数码管,代表0-9,以及-。3)、键盘部分在键盘电路中,使用的是54键盘。键盘在源程序中的功能安排如下:、第一次中断判断有无键按下,若有按下则实行定时一次,下一次中断开始扫描。2、键盘的设置键盘表面如图:ENTERESC其中各键设置为:键定义为“设置时间的递增”键。ENTER键定义为“确认”键,即设置完时间后,按此键保存。ESC键定义为“返回”键,即不保存设置,返回正常时间状态。 键定义为“设置时间的递减”键。 F 键定义为“时间翻页”键。按一下,时间就向下依次翻页显示一次,顺序为:年,月/日,时/分,分/秒,星期。E键定义为“校时”键。即可通过此键来设置年,月/日,时/分,分/秒,星期为可调。D 键定义为“闹钟”键,即按此键显示闹钟时间,如果再按时间递增减键,则可调闹钟C 键定义为“闹钟查询”键。即按下此键可以查询闹钟设置,但是不能修改闹钟。 B 键定义为“时间高位/低位切换”键。控制时间递增减键在哪位上设置。键定义为“闹钟确定”键。按下次键即可打开闹钟状态。 4)、系统:MCS-51单片机三、 实际整体系统设计:1)、时钟部分分为三个部分,分别为计时、校时、和定时闹钟。1、计时部分:用T2进行的,T2每10ms溢出一次,每一百秒刷新一次。每60秒就进一,且个位置零。每24小时,天数进一。2、较时部分:用计数器T2进行溢出计时,按下键9 T2停止计时。按键3开始校正时间,校正位闪烁,再次按下键3,移动校正位。键5进行加操作,键8进行减操作。键2确定当前设置时钟,键6退出时间校正。3、定时闹钟:闹钟的实现是通过设置标志位,标志位置位且时间到达闹钟报警。只能设置一个闹钟。2)、显示部分: LED数码管显示(动态显示)1、由8位7段共阳数码管组成,显示时-分-秒,年-月日。2、查到笔形码。3、采用数码管的动态扫描工作方式,可通过键盘分别选择显示时间、日期或者闹钟。4、LED数码管的笔段码0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf共阳数码管,代表0-9,以及-。2)、键盘的设置键盘表面如图:其中各键设置为: 键定义为“查询日期”键定义为“设置完成确认”设置完时间、日期、闹钟之后必须按下此键完成设置。键定义为“设置、移位”,在查询时间、日期、闹钟界面时,按下下此键,每按下一次,设置位移位一位键定义为“查询闹钟”,按下此键可查看当前闹钟。键定义为“设置位数值递增”,在设置时间、日期、闹钟时,可令当前设置位数值加一。键定义为“设置完毕退出键”, 在设置时间、日期、闹钟时,按下此键,重回时钟显示界面。键定义为“启动或禁止闹钟”,在设置闹钟时,按下此键可启动或者禁止当前闹钟。键定义为“设置位数值递减”,在设置时间、日期、闹钟时,可令当前设置位数值减一。键定义为“设置时间”,按下此键,时间停止计数。4)、系统:STM8105s4c6单片机四、 设计方案:1)、程序的流程图主程序初始化定时器以及IO口启动定时显示时间按键处理程序扫描按键分别对三行键盘引脚置低电平,读取列引脚的值,显示闹钟、设置时闹钟设置位闪烁显示日期、设置时日期设置位闪烁显示时间、设置时时间设置位闪烁2)、关键程序介绍(主时钟为系统上电默认时钟2MHz)1、定时器2的初始化void TIM2_Init(void) /*允许自动重裝载*/ TIM2_CR1 |= 0x80; /*设置为2分频*/ TIM2_PSCR |= 0x01; /*计数器初值设置为 0*/ TIM2_CNTRH = 0; TIM2_CNTRL = 0; /*自动重转载寄存器的值为10000,每10ms中断一次*/ TIM2_ARRH = 0x27; TIM2_ARRL = 0x10; /*允许更新中断*/ TIM2_IER |= 0x01; /*使能TIM2*/ TIM2_CR1_CEN = 1; 2、数码管显示/*显示时间*/void Display_Time() uint8_t i; for(i=0;i<8;i+) PD_ODR=(0x01<<i); switch(i) case 0: PB_ODR=blockSec%10; break; case 1: PB_ODR=blockSec/10; break; case 2: PB_ODR=block10; break; case 3: PB_ODR=blockMin%10; break; case 4: PB_ODR=blockMin/10; break; case 5: PB_ODR=block10; break; case 6: PB_ODR=blockHour%10; break; case 7: PB_ODR=blockHour/10; break; Delay_Ms(1); /*不显示当前位时间*/void No_Display_Time(uint8_t w) uint8_t i; for(i=0;i<8;i+) PD_ODR=(0x01<<i); if(i=w) PB_ODR=0xff; continue; switch(i) case 0: PB_ODR=blockSec%10; break; case 1: PB_ODR=blockSec/10; break; case 2: PB_ODR=block10; break; case 3: PB_ODR=blockMin%10; break; case 4: PB_ODR=blockMin/10; break; case 5: PB_ODR=block10; break; case 6: PB_ODR=blockHour%10; break; case 7: PB_ODR=blockHour/10; break; Delay_Ms(1); /*设置时闪烁当前位*/void Display_Set_Time(uint8_t v) uint8_t j=10,k=8; while(j-) Display_Time(); while(k-) No_Display_Time(v); 3、键盘扫描程序uint8_t Keyscan(void) uint8_t num=0; uint8_t temp; PC_ODR = 0x0c; /第一列设置为低电平 temp = PC_IDR & 0xe0; /读取PC5 PC6 PC7的电平值 if(temp != 0xe0) /判断按键是否被按下 Delay_Ms(1); /延迟消抖 temp = PC_IDR & 0xe0; /再次读取PC5 PC6 PC7的电平值 switch(temp) case 0xc0: num = 1; break; case 0xa0: num = 4; break; case 0x60: num = 7; break; .Delay_Ms(2); return num; /返回按键数4、void Process() uint8_t x; flag=Keyscan(); /*9被按下,时间停止*/ if(flag=9) /*6退出*/ while(flag!=6) TIM2_CR1_CEN = 0; x=0; Display_Time(); flag=Keyscan(); /*3校正时间*/ if(flag=3) /*2退出校正*/ while(flag!=2) Display_Set_Time(x); flag=Keyscan(); if(x=8) x=0; /*移动设置位*/ if(flag=3) x+; /*当前校正位加一*/ if(flag=5) switch(x) case 0:Sec+; if(Sec>60) Sec=0; break; case 1:Sec+=10; if(Sec>60) Sec=Sec%10; break; case 3:Min+; if(Min>60) Min=0; break; case 4:Min+=10; if(Min>60) Min=Min%10; break; case 6:Hour+; if(Hour>23) Hour=0; break; case 7:Hour+=10; if(Hour>23) Hour=Hour%10; break; /*当前校正位减一*/ if(flag=8) switch(x) case 0:Sec-; if(Sec=0) Sec=59; break;case 1:if(Sec/10=0) Sec=60+Sec%10;Sec-=10; break;case 3:Min-; if(Min=0) Min=59; break;case 4:if(Min/10=0) Min=60+Min%10;Min-=10; break;case 6:Hour-; if(Hour=0) Hour=23; break;case 7:if(Hour/10=0) Hour=30+Hour%10; Hour-=10; break; flag=Keyscan(); /*退出时间设置,时钟重新启动*/ TIM2_CR1_CEN = 1; .5、主程序void main() TIM2_Init(); GPIO_Init();TIM4_Init();/*开启中断*/ _asm("rim"); while(1) Display_Time(); Process(); if(Hour=Clock_h&&Clock_m=Min&&Clock_flag) PA_ODR=0x00; 3)、元器件介绍1、STM8105s4(1片):44个引脚,34个GPIO引脚,定时器有TIM1/TIM2/TIM3/TIM4。2、共阳数码管(2个):直插式,4位7段共阳数码管具有12管脚,8根LED段位及4根位选位。3、微动开关(9个):直插式微动开关,引脚两两内部相连。4、8550PNP型三极管(9个):贴片式,低电压,大电流,小信号的PNP型硅三极管。5、电容(若干):主要用于电源滤波。6、电阻(若干):用于限流分压。五、 调试过程:我在调试的时候是分步骤来调试的,最起初我调试数码管能否显示并且实现位选,将程序烧录进去之后发现数码管没有一点反应。数码管不显示可能存在两方面的原因,一是程序上的问题,二是硬件方面的问题,在检查程序没有什么问题时,接着用万用表测量对应引脚的高低电平是否与程序所实现的一致,检测结果表示,程序并不存在问题,所以便沿着对应的走线继续测量,结果发现驱动数码管的三极管不能正常工作,于是重回原理图查看引脚连接是否正确,发觉无误后,到PCB界面查看,发现三极管的封装引脚与自己想想的不一样,于是通过查看三极管的数据手册,最后原来引脚真的错了,因为用的是PCB软件自带的库,所以这种问题出现的可能性很大。在对硬件方面做了改正之后,再次烧录,这次,数码管虽然能够显示,但却无法通过动态扫描实现位选,这次就是程序方面的问题了,在对动态扫描的位选语句进行分析实验,发现确实值这里有问题,PD_ODR=(0x01<<i),这语句是正确的,但之前错误的语句是PD_ODR=0xfe<<i,我想通过这样让第i个数码管置0,以实现位选,这语句虽让能让第i为置0,但也让i以下的位也置0,因为移位操作时,低位也是自动补0的,自然就不能实现位选了。接下来就是键盘功能的实现,在检测到最后,有一个键不能实现功能,原因是因为画PCB是漏画了一根线,最后给接回去就实现了。至此,显示的数码管,操作的按键都没有硬件上的问题,接下来就是实现数字钟功能的单片机编程了。六、 结论设计的内容基本都实现了,但闹钟部分还没能实现,时间、日期都能显示,并且通过按键进行设置,在设置时设置为也能闪烁。闹钟也还没实现保存32个。七、 问题讨论与总结设计方案虽然能实现部分功能,但依旧还存在一些不足的地方,以及还有一些可以继续改进地的部分。不足:就如上所述,闹钟功能还不能实现,无法储存多个闹钟,这个可以通过外接储存芯片实现,但对于STM8来说,它有足够的内存来储存这些闹钟,所以,可能不用外接储存单元。改进:1、对于供电部分可以用纽扣电池与硬件电路组合在一起,这样就可以不用那么麻烦,在使用时就可以不用再外接电源了。2、在掉电时,可以把当前的时间存储在内存中,下次上电时就可以直接读取掉电是的值,继续计数,这个实现可以外接一个24c02,用IIC读写EEPROM的方式将当前值存到24c02上。3、同时也可以设置预备电源,当掉电时,单片机不停止工作,但数码管等外设不工作,减少损耗,再次上电时,就能够与外部的时钟同步。4、可以再添加一个温度传感器18B20,这样就可以轻易获取周围环境的温度,使该系统具备更多的功能。5、还能在系统上添加红外接收管,通过这样的方式替代键盘实现时间日期等的设置。此次课程设计的感受:整个设计过程来来回回也折腾了两个星期左右,这期间虽然有时候比较烦躁,但最后基本上把这个系统的硬件完成了。最开始我是用电协的开发板来实现功能,打算功能实现之后就按照原理图把电路画出来再做成PCB。一开始在用STM8实现数码管的位选就花了相当长的时间,这一点真令我有点受挫,最后查来查去是引脚太混乱了, 51转STM8的转接板把我弄得晕头转向,引脚老师对不上号。原本是打算用库来编写的,但最后因为这个原因,不得不回到寄存器操作来。在设置时间日期那部分,对于如何让设置位闪烁我也思考了好久,最后是通过两个循环实现亮灭的。在程序实现了时间正常的功能之后,便开始做硬件电路,做电路办事,我就觉得STM8105的引脚有44根而实际上用不了这么多,所以在实现数码管的位选那部分,我决定抛弃低啊写开发板通过595传入并出的串行移位寄存器来扩展IO引脚,而是直接使用整一组PD口来实现,这样就显得容易一些了。所以,原来写得差不多的程序又必须进行大面积修改,但修改对于刚开始的按要求编写就来的容易了。电路的制作也大概花了两天的功夫在制作调试,看上去并不复杂,但实际上会费了不少时间。经过不断地编写代码,修改代码,调试程序,一路下来,基本的功能都可以实现了。对于理工科的我们来说,动手能力是至高无上的,而整个过程我才发觉我严重缺乏实践,以至于这样简单的电路、程序还要花这么多时间,而且功能也不尽完善。这次课设也是给我机会去多动手,多实践,只有通过实践才能知道自己真正掌握了多少知识,才。能更加熟练地将理论转换成实践的东西。整个过程,得到了不少教训:尽信书不如无书;读万卷书不如行万里路,只有亲自动手,才知道是否真那样。只有通过实践,你才能知道自己有多大的能力。八、 参考文献1、STM8S系列单片机原理与应用潘永雄著2、STM8S105xx数据手册3、STM8技术参考手册4、风驰电子STM8历程与教程(网页)http:/www.amobbs.com/thread-5458127-1-2.htmlhttp:/www.amobbs.com/thread-5458127-1-2.html九、 附原理图19

    注意事项

    本文(多功能电子钟设计报告--单片机课程设计.docx)为本站会员(scccc)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开