基于51单片机闹钟设计_第1页
基于51单片机闹钟设计_第2页
基于51单片机闹钟设计_第3页
基于51单片机闹钟设计_第4页
基于51单片机闹钟设计_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

电子课程设计实习报告元件购买及焊接元件购买地点广埠屯,华中电子市场二楼时间2011年4月7日过程大早到华中电子市场后,当时还没开门,等到九点才开门,据人介绍上了二楼,卖各种电子元件的店面很多,但都不大。选了一家比较小的店面,把老师给的清单给店主看后,店主很热情,但是说有两样元件没有,但承诺叫我们等等,到仓库去找一下。我们委婉拒绝了,想先看看,第一次来毕竟的货比三家嘛。又挨个找了几家店,对比价格和元件齐全程度后,我们选了一家比较大元件齐全而且价格合理的店面。由于主要的元件,包括板子和各种芯片老师都发了,我们主要买一些小型元件。主要是电阻电容,由于元件小,不是单个卖的,都是十个十个的卖。至于电阻电容的区分,以前参加电子协会也接触过,关键是一些不熟悉的元件,如串口下载线之类的,我们虽然在课堂听老师讲过区分公母,但对于是否买对了,还是有疑问,得到店主承诺买错了,可以包换后,才放心结账。对着清单上一一看好后,除了电阻点容多买了几个外,其他的东西都还齐全。最后叫店主结账,并依照老师要求开发票。原清单(部分元件由于分批购买或者网上购买,未能列入清单)焊接心得焊接时间2011年4月9日(星期六上午)地点信息楼405焊接元件电路图过程及心得有了大二焊接收音机的一些焊接功底后,对于焊接还是有些经验的,先将小的元件焊接好,比如说电容电感,避免大的高的元件焊好后留下的可操作空间太少,给小的元件焊接带来不便。而不耐高温的元件,如三极管等,可以留在最后焊接,以免引脚触到烙铁损坏元件。当然有些元件的引脚虽然是对称分布,但是是是有区别的,如电解电容,二极管,三极管等。特别应该注意的是排阻,普通电阻部没有负极,但是排阻比较特别,两端是不同的。由于排阻焊反了,导致与P0口相连的矩阵键盘无论如何都没法正常使用,后来发现后,拔了好久才拔下来,手还在此过程中,还跟烙铁来了个亲密接触,手指被烫的留下了一道白印记。拔下来时候,板子已经伤痕累累了,幸好买了新的排阻焊上去之后,键盘能够正常工作了,真可谓教训沉痛。焊接过程中,由于烙铁使用的还是比较少,开始时手拿着总觉得很别扭,点锡丝的时候甚至有点抖,不过焊完一两个元件后就适应了很多,后来越来越上手,速度也快了很多。我们特地几个人约好一起焊接,并对比,有疑问先讨论,再动手焊接。但是还是有些问题没得到解决,由于没接触过1602,对于排针和排插的位置还是焊反了,但是问题不大,后来的实习过程中证明液晶一直工作正常,不过以后还是得按常规出牌,以免遇到大麻烦。其间也遇到了复位开关的摆放问题,我一直觉得是只要能插进去就正确的,但有人觉得有正反问题,后来证明我的想法是正确。焊完后,分模块对整个硬件电路进行调试检测,看有没有漏焊,虚焊的地方。之后,插上芯片试电,一切正常后,用安装好的编译和STC串口下载软件给单片机下载程序,红色的二极管一闪一闪的,等二极管不闪后,第一个数码管被点亮了,当时很兴奋。至此焊接告一段落。在此过程中,我总结出1、焊接前需熟悉电路,了解各元件,因为真正的焊接过程实际上是很短的,而准备工作没做好,只会给后面的焊接带来意想不到的麻烦,甚至导致板子被毁。2、焊接过程中,要注意力集中,逐渐积累经验,怎样操作适应,怎样避免虚焊和短路,以提高效率。总的来说是一个熟练掌握焊枪和熟悉锡丝特性的过程。3、焊接后先不要急于上电,也不要想板子一定焊好了,或者不正常之后惶恐是不是焊废了。毕竟这也是一个小的系统,我们第一次接触,第一次上电就能一切运行成功不现实,出现情况不要急,可能只是一些小问题,如没插上芯片或跳线帽之类的。4、总之作为学电子电气的,我们毕竟还会接触硬件的焊接和调试,这只是一个开端,相信有了这次的经验后,以后的会对这一过程了解的更深入。基于数码管及矩阵键盘实现的移位等若干功能一、材料及硬件分析数码管的接法由于数码管的借口很多,如果一个个接在单片机IO口上,将会很占用硬件资源,同时编程时候要兼顾段选和位选,会给编程带来很大不便。使用74LS138和CD4511译码器后,两个问题迎刃而解,如下为数码管的接法原理图由图可知,138控制位选占用3个IO口,CD4511控制段选占用4个IO口,加上控制小数点的引脚总共占用8个IO口。给P1口赋值的时候,高3位控制的是位选,即第几个数码管亮,低4位控制的为段选,直接显示09,无需代码。而第4位则控制的是小数点的亮暗。动态显示的时候,只需要在某一位IO口后面的小数点点亮即可。矩阵键盘线反法矩阵键盘内部是4X4的8根线组成的16键的键盘,每个限于线交叉点,表示为一个键。总共需要8个IO口,当两个线没有交叉的时候,接通的两条线都变味低电平。首先可将高八位置为高电平第八位置为低电平,记下变为低电平的一条线路。然后将高低电平交换,再记下一条线路,即可确定按下的键的位置。具体程序如下VOIDPRESSUNSIGNEDCHARKEYBUF1,KEYBUF2P00XF0KEYBUF1P0IFP00XF0IFP00XF0/按键P00X0FKEYBUF2P0KEYVKEYBUF1KEYBUF2经过多次试验后得出的各键的代码为0XEE0XDE0XBE0X7E0XED0XDD0XBD0X7D0XEB0XDB0XBB0X7B0XE70XD70XB70X77,当然将键盘反接之后键就值完全变了。软件消抖当有键按下的时候,瞬间单片机的电平会不稳定,即出现电平抖动,为了消除抖动,可采用软件法UNSIGNEDCHARUPUNSIGNEDCHARP0BUFP00XF0/松键P0BUFP0RETURNP0BUF0XF0在有键按下之后执行WHILEUP即停在该处,只给KEYV赋值一次。二、程序功能1、密码锁其他所有功能都在此程序运行成功的基础才能执行。上电之后,输入密码,并按C键验证正确之后会显示全8,否则显示全0。验证成功后按下A可以自行下面程序2、自动拉幕式移屏1键左移,2键右移,其他键停止,全屏显示为12345678。3、定时器时钟BCD分别可调时分秒,A键实现下一功能4、秒表1、2、3分别可以实现暂停,继续,清零功能,可精确到百分之一秒5、手动式移位并删除输入数字的将第一个数字删除,并将所有数字前移一位。C键可实现删除,将最后一位数字删除,并在第一位补零。6、加法器输入两个数字可实现相加,并可清屏和连加,但不能实现小数相加。二、源程序INCLUDE“REG52H“UNSIGNEDCHARPIN88,5,8,5,8,5,8,5UNSIGNEDCHARLOCK811,11,11,11,11,11,11,11UNSIGNEDCHARL180,0,0,0,0,0,0,0UNSIGNEDCHARL80,0,0,0,0,0,0,0UNSIGNEDCHARLED180,0,0,0,0,0,0,0UNSIGNEDCHARLED1611,11,11,11,11,11,11,11,0,1,2,3,4,5,6,7UNSIGNEDCHARKEYV0UNSIGNEDCHARTOTAL0UNSIGNEDCHARDISP0X00,0X01,0X02,0X03,0X04,0X05,0X06,0X07,0X08,0X09UNSIGNEDCHARSECOND10UNSIGNEDCHARSECOND20UNSIGNEDCHARMINUTE10UNSIGNEDCHARMINUTE20UNSIGNEDCHARHOUR10UNSIGNEDCHARDAY0UNSIGNEDCHARMONTH0UNSIGNEDCHARCON60UNSIGNEDCHARCODEKEY0XD7,0XEE,0XDE,0XBE,0XED,0XDD,0XBD,0XEB,0XDB,0XBB,0X7EUNSIGNEDCHART0UNSIGNEDCHARV0VOIDDELAYINTNWHILENVOIDDLYUNSIGNEDINTQQ2000WHILEQ/CHANGEIFCON60CON1IFCON1CON60/UNSIGNEDCHARUPUNSIGNEDCHARP0BUFP00XF0/松键P0BUFP0RETURNP0BUF0XF0VOIDPRESSUNSIGNEDCHARKEYBUF1,KEYBUF2P00XF0KEYBUF1P0IFP00XF0IFP00XF0/按键P00X0FKEYBUF2P0KEYVKEYBUF1KEYBUF2WHILEUPDISPLAYUNSIGNEDCHARI,P1BUFFORI0I0ILOCKILOCKI1LOCK0KEYVLDISPLAYUNSIGNEDCHARI,P1BUFFORI0I10SECOND10SECOND2IFSECOND26/中断0MINUTE1SECOND20IFMINUTE110MINUTE10MINUTE2IFMINUTE26HOUR1MINUTE20IFHOUR113HOUR11ROTATELUNSIGNEDCHART,ITLED15FORI15I0ILEDILEDI1/左移LED0TROTATERUNSIGNEDCHART,ITLED0FORI1I0ILILI1L0KEYVVOIDADSCANUNSIGNEDCHARIFORI0I0ILED1ILED1I1LED10KEYVVOIDCLRIFKEYV0XBESECOND10SECOND20/清零3MINUTE10MINUTE20HOUR10EA0CON1ADD0UNSIGNEDCHARIFORI0I9T1/TLED1IL1IBIFT9LED1IT10B1ADCLUNSIGNEDCHARIIFKEYV0X77FORI0I7DS12887_WEEK1KEYCHAR0/设置新日期IFKEYCHARJDS12887_DAY1DS12887_WEEK1IFDS12887_WEEK9ALMTIME7ALMTIME710ALMTIME8ALMTIME81D21KEYCHAR0WRTLCDCMDCLEARBREAK/懒猪功能IFDATE_TIME6/10ALMTIME947D21WRTLCDCMDCLEARBREAK以上为第一次开始闹钟,一分钟后通过语句WHILEDATE_TIME510ALMTIME747,再次进入闹钟实现如上一样功能。4、闹钟的屏蔽样如果想屏蔽闹钟功能,按下P键,将闹钟屏蔽,屏蔽后,不扫描LED()及其AUTDLY()函数,同时显示“X”。在主函数循环中可定义如下语句IFKEYCHARPFLG1KEYCHAR0其中,如果FLG为1则不扫描LED()及AUTDLY();五、整体结构整个程序简化后如下时分秒调整();时间显示();闹钟设置();亮灯();MIAN()LCD初始化;开PS2中断;WHILE(1)时间数组DS12887_;时间显示();日期及星期调整;时分秒调整();闹钟设置();亮灯();开关闹钟屏蔽;6、源程序INCLUDE/包含单片机寄存器的头文件INCLUDE/包含随机函数RAND的定义文件INCLUDE“ABSACCH“INCLUDE/包含_NOP_函数定义的头文件INCLUDEINCLUDEINCLUDESBITD2P31UNSIGNEDCHARALMTIME15,_,_,_,_,_,_UNSIGNEDCHARDATE_TIME7UNSIGNEDCHARFLG1/闹钟屏蔽标志UNSIGNEDCHARFLAG1;/延时扫描标志VOIDDELAYUNSIGNEDCHARI,J200FORI0I9ALMTIME7ALMTIME710ALMTIME8ALMTIME81D21KEYCHAR0WRTLCDCMDCLEARBREAK/懒猪功能IFDATE_TIME6/10ALMTIME947D21WRTLCDCMDCLEARBREAKWHILEDATE_TIME510ALMTIME747/如果没有关,一分钟后再闹D20DISPLAY0,0,“LAZYPIG“DISPLAY4,1,“GETUP“DATE_TIME6DS12887_SECIFKEYCHARTD21FLAG1KEYCHAR0WRTLCDCMDCLEARBREAK/关闭闹钟IFKEYCHARYALMTIME73IFALMTIME79ALMTIME7ALMTIME710ALMTIME8ALMTIME81D21KEYCHAR0WRTLCDCMDCLEARBREAK/懒猪功能IFDATE_TIME6/10ALMTIME947D21FLAG1WRTLCDCMDCLEARBREAK/10秒后关VOIDLED/亮灯IFALMTIME1048DATE_TIME610VOIDDISALM/闹钟界面显示DISPONECHAR3,1,ALMTIME3DISPONECHAR4,1,ALMTIME4DISPONECHAR6,1,ALMTIME6DISPONECHAR7,1,ALMTIME7DISPONECHAR9,1,ALMTIME9DISPONECHAR10,1,ALMTIME10ALRMUNSIGNEDCHARX,Y/显示坐标/DELYKEYCHARKEYPRESS0WRTLCDCMDCLEAR/清显示WRTLCDCMDALLONX3Y0WHILE1DISPLAY0,0,“ALARMSET“DISPONECHAR5,1,DISPONECHAR8,1,WRTLCDCMD0X0EWHILEKEYPRESS0DISALM/等待有键按下KEYPRESS0/按键标识清零IFKEYCHARXSETCURSORX,1WRTLCDCMD0X0FIFKEYCHARXSETCURSORX,1IFX10|X7DS12887_WEEK1KEYCHAR0/设置新日期IFKEYCHARJDS12887_DAY1DS12887_WEEK1IFDS12887_WEEKINCLUDE/调用单值函数INCLUDEINCLUDE/包含SSCANF和SPRINTFINCLUDEINCLUDEVOIDFUNUNSIGNEDCHARNUM0,I0,SIGNUNSIGNEDCHARTEMP16/最大为十六位数字BITFLAGFLOATA0,B0UNSIGNEDCHARSWRTLCDCMDCLEARKEYPRESS0WHILE1WHILEKEYPRESS0/等待有键按下KEYPRESS0/按键标识清零IFKEYCHAR0X0EFSIGN0FLAG0AB0FORS0S16STEMPS0BREAKELSENUMKEYCHARIFI0/输入是第一个数字,清空WRTLCDCMDCLEARIFCNUM|I16|NUM|NUM|NUM|/NUM|LNUM|TNUM|SNUM|GNUM|PNUM|NUM/输入数字最大值16,输入符号表示输入结束I0/计数器复位IFFLAG0/如果是输入的第一个数据,赋值给A,并把标志位置1SSCANFTEMP,“F“,FLAG1ELSE/到下一个数据输入时可以跳转赋值给BSSCANFTEMP,“F“,FORS0S16S/赋值完成后把数组清零TEMPS0IFNUMSDISPLAY0,1,“SIN“IFNUMTDISPLAY0,1,“TAN“IFNUMCDISPLAY0,1,“COS“IFNUMLDISPLAY0,1,“LN“IFNUMGDISPLAY0,1,“SQRT“/开根号IFNUMPDISPLAY0,1,“POW“/X的Y次方ELSEDISPONECHAR0,1,NUM/其他符号IFNUM/判断当前符号位并做相应处理SIGNNUM/如果不是等号记下标志位ELSEFLAG0/检测到输入号,判断上次读入的符合SWITCHSIGNCASECACOSA31415926/180/转化成角度制BREAKCASESASINA31415926/180BREAKCASETATANA31415926/180BREAKCASELALOGABREAKCASEGASQRTABREAKCASEPAPOWA,BBREAKCASEAABBREAKCASEAABBREAKCASEAABBREAKCASE/AA/BBREAKDEFAULTBREAKSPRINTFTEMP,“G“,A/输出浮点型,无用的0不输出DISPONECHAR0,1,DISPLAY1,1,TEMP/结果显示到液晶屏SIGN0FLAG1/用完后所有数据清零,FLAG1表示可以继续算,连算并记录结果FORS0S16STEMPS0ELSEIFI16DISPONECHAR1,0,NUMIELSETEMP0NUM/如果是19数字,就将该数计为第一个数DISPONECHAR0,0,NUMELSETEMPINUMDISPONECHARI,0,NUMI/记录下一个数/主程序/MAINLCDINIT/LCD初始化IT00/设外部中断0为低电平触发EX01/开中断0EA1WRTLCDCMDCLEAR/清显示SETCURSOR0,0WHILEKEYPRESS0/等待有键按下DISPLAY0,1,“LCDCALCULATOR“DISPLAY0,0,“MULFUN“WHILE1/主循环FUN6、心得体会由于有了前几天做闹钟的经验,对于液晶和PS2键盘在程序中的使用已经比较熟悉,所以计算器的编写变得简单一些,只用了一天时间。要解决的只是算法问题,在网上找了一个参考的算法程序,觉得其中调用的STUDIOH中的SSCANF()和SPRINTF()函数很方便的实现了数组和字

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论