基于-51单片机闹钟设计

上传人:ph****6 文档编号:66612394 上传时间:2022-03-28 格式:DOC 页数:28 大小:102.50KB
返回 下载 相关 举报
基于-51单片机闹钟设计_第1页
第1页 / 共28页
基于-51单片机闹钟设计_第2页
第2页 / 共28页
基于-51单片机闹钟设计_第3页
第3页 / 共28页
点击查看更多>>
资源描述
-电子课程设计实习报告 元件购置及焊接 元件购置:地点:广埠屯,华中电子市场二楼时间:2021年4月7日过程:大早到华中电子市场后,当时还没开门,等到九点才开门,据人介绍上了二楼,卖各种电子元件的店面很多,但都不大。选了一家比拟小的店面,把教师给的清单给店主看后,店主很热情,但是说有两样元件没有,但承诺叫我们等等,到仓库去找一下。我们委婉拒绝了,想先看看,第一次来毕竟的货比三家嘛。又挨个找了几家店,比照价格和元件齐全程度后,我们选了一家比拟大元件齐全而且价格合理的店面。由于主要的元件,包括板子和各种芯片教师都发了,我们主要买一些小型元件。主要是电阻电容,由于元件小,不是单个卖的,都是十个十个的卖。至于电阻电容的区分,以前参加电子协会也接触过,关键是一些不熟悉的元件,如串口下载线之类的,我们虽然在课堂听教师讲过区分公母,但对于是否买对了,还是有疑问,得到店主承诺买错了,可以包换后,才放心结账。对着清单上一一看好后,除了电阻点容多买了几个外,其他的东西都还齐全。最后叫店主结账,并依照教师要求开发票。原清单:局部元件由于分批购置或者网上购置,未能列入清单焊接心得:焊接时间:2021年4月9日星期六上午地点:信息楼405焊接元件电路图:过程及心得: 有了大二焊接收音机的一些焊接功底后,对于焊接还是有些经历的,先将小的元件焊接好,比方说电容电感,防止大的高的元件焊好后留下的可操作空间太少,给小的元件焊接带来不便。而不耐高温的元件,如三极管等,可以留在最后焊接,以免引脚触到烙铁损坏元件。当然有些元件的引脚虽然是对称分布,但是是是有区别的,如电解电容,二极管,三极管等。特别应该注意的是排阻,普通电阻部没有负极,但是排阻比拟特别,两端是不同的。由于排阻焊反了,导致与P0口相连的矩阵键盘无论如何都没常使用,后来发现后,拔了好久才拔下来,手还在此过程中,还跟烙铁来了个亲密接触,手指被烫的留下了一道白印记。拔下来时候,板子已经伤痕累累了,幸好买了新的排阻焊上去之后,键盘能够正常工作了,真可谓教训沉痛。 焊接过程中,由于烙铁使用的还是比拟少,开场时手拿着总觉得很别扭,点锡丝的时候甚至有点抖,不过焊完一两个元件后就适应了很多,后来越来越上手,速度也快了很多。 我们特地几个人约好一起焊接,并比照,有疑问先讨论,再动手焊接。但是还是有些问题没得到解决,由于没接触过1602,对于排针和排插的位置还是焊反了,但是问题不大,后来的实习过程中证明液晶一直工作正常,不过以后还是得按常规出牌,以免遇到大麻烦。其间也遇到了复位开关的摆放问题,我一直觉得是只要能插进去就正确的,但有人觉得有正反问题,后来证明我的想法是正确。 焊完后,分模块对整个硬件电路进展调试检测,看有没有漏焊,虚焊的地方。之后,插上芯片试电,一切正常后,用安装好的编译和STC串口下载软件给单片机下载程序,红色的二极管一闪一闪的,等二极管不闪后,第一个数码管被点亮了,当时很兴奋。至此焊接告一段落。在此过程中,我总结出1、 焊接前需熟悉电路,了解各元件,因为真正的焊接过程实际上是很短的,而准备工作没做好,只会给后面的焊接带来意想不到的麻烦,甚至导致板子被毁。2、 焊接过程中,要注意力集中,逐渐积累经历,怎样操作适应,怎样防止虚焊和短路,以提高效率。总的来说是一个熟练掌握焊枪和熟悉锡丝特性的过程。3、 焊接后先不要急于上电,也不要想板子一定焊好了,或者不正常之后惶恐是不是焊废了。毕竟这也是一个小的系统,我们第一次接触,第一次上电就能一切运行成功不现实,出现情况不要急,可能只是一些小问题,如没插上芯片或跳线帽之类的。4、 总之作为学电子电气的,我们毕竟还会接触硬件的焊接和调试,这只是一个开端,相信有了这次的经历后,以后的会对这一过程了解的更深入。基于数码管及矩阵键盘实现的移位等假设干功能一、材料及硬件分析数码管的接法:由于数码管的借口很多,如果一个个接在单片机IO口上,将会很占用硬件资源,同时编程时候要兼顾段选和位选,会给编程带来很大不便。使用74LS138和CD4511译码器后,两个问题迎刃而解,如下为数码管的接法原理图:由图可知,138控制位选占用3个IO口,CD4511控制段选占用4个IO口,加上控制小数点的引脚总共占用8个IO口。给P1口赋值的时候,高3位控制的是位选,即第几个数码管亮,低4位控制的为段选,直接显示0-9,无需代码。而第4位则控制的是小数点的亮暗。动态显示的时候,只需要在*一位IO口后面的小数点点亮即可。矩阵键盘线反法:矩阵键盘部是4*4的8根线组成的16键的键盘,每个限于线穿插点,表示为一个键。总共需要8个IO口,当两个线没有穿插的时候,接通的两条线都变味低电平。首先可将高八位置为高电平第八位置为低电平,记下变为低电平的一条线路。然后将上下电平交换,再记下一条线路,即可确定按下的键的位置。具体程序如下:void press() unsigned char keybuf1,keybuf2; P0=0*f0;keybuf1=P0; if(P0!=0*f0) if(P0!=0*f0) /按键 P0=0*0f;keybuf2=P0;KeyV=keybuf1+keybuf2;经过屡次试验后得出的各键的代码为:0*ee 0*de 0*be 0*7e0*ed 0*dd 0*bd 0*7d0*eb 0*db 0*bb 0*7b0*e7 0*d7 0*b7 0*77,当然将键盘反接之后键就值完全变了。软件消抖:当有键按下的时候,瞬间单片机的电平会不稳定,即出现电平抖动,为了消除抖动,可采用软件法:unsigned char up() unsigned char P0Buf; P0=0*f0; /松键 P0Buf=P0; return(P0Buf-0*f0);在有键按下之后执行while(up();即停在该处,只给Keyv赋值一次。二、程序功能1、密码锁:其他所有功能都在此程序运行成功的根底才能执行。上电之后,输入密码,并按c键验证正确之后会显示全8,否则显示全0。验证成功后按下A可以自行下面程序2、自动拉幕式移屏:1键左移,2键右移,其他键停顿,全屏显示为12345678。3、定时器时钟:BCD分别可调时分秒,A键实现下一功能4、秒表:1、2、3分别可以实现暂停,继续,清零功能,可准确到百分之一秒5、手动式移位并删除:输入数字的将第一个数字删除,并将所有数字前移一位。C键可实现删除,将最后一位数字删除,并在第一位补零。6、加法器:输入两个数字可实现相加,并可清屏和连加,但不能实现小数相加。二、源程序*includereg52.hunsigned char Pin8=8,5,8,5,8,5,8,5;unsigned char Lock8=11,11,11,11,11,11,11,11;unsigned char L18=0,0,0,0,0,0,0,0;unsigned char L8=0,0,0,0,0,0,0,0;unsigned char Led18=0,0,0,0,0,0,0,0;unsigned char Led16=11,11,11,11,11,11,11,11,0,1,2,3,4,5,6,7;unsigned char KeyV=0;unsigned char Total=0;unsigned char disp=0*00,0*01,0*02,0*03,0*04,0*05,0*06,0*07,0*08,0*09;unsigned char second1=0;unsigned char second2=0;unsigned char minute1=0;unsigned char minute2=0;unsigned char hour1=0;unsigned char day=0;unsigned char month=0;unsigned char Con=60;unsigned char code Key=0*d7,0*ee,0*de,0*be,0*ed,0*dd,0*bd,0*eb,0*db,0*bb,0*7e;unsigned char T=0;unsigned char V=0;void delay(int n) while(n-);void dly() unsigned int q; q=2000; while(q-);/*change() if(Con=60)Con=1; if(Con=1)Con=60; */unsigned char up() unsigned char P0Buf; P0=0*f0; /松键 P0Buf=P0; return(P0Buf-0*f0);void press() unsigned char keybuf1,keybuf2; P0=0*f0;keybuf1=P0; if(P0!=0*f0) if(P0!=0*f0) /按键 P0=0*0f;keybuf2=P0;KeyV=keybuf1+keybuf2; while(up(); display() unsigned char i,P1Buf; for(i=0;i=7;i+) P1Buf=i*2; P1Buf=P1Buf4; P1Buf=P1Buf+Ledi; /显示 P1=P1Buf; /delay(); void lscan() unsigned char i; for(i=0;i0;i-) Locki=Locki-1; Lock0=KeyV;ldisplay() unsigned char i,P1Buf; for(i=0;i=7;i+) P1Buf=i*2; P1Buf=P1Buf4; P1Buf=P1Buf+Locki; /显示 P1=P1Buf; /delay(); display1() unsigned char i,P1Buf; for(i=0;i=7;i+) P1Buf=i*2; P1Buf=P1Buf=10) second1=0; second2+; if(second2=6) /中断0 minute1+; second2=0; if(minute1=10) minute1=0; minute2+; if(minute2=6) hour1+; minute2=0;if(hour1=13)hour1=1; rotatel() unsigned char t,i; t=Led15; for(i=15;i0;i-) Ledi=Ledi-1; / 左移 Led0=t; rotater() unsigned char t,i; t=Led0; for(i=1;i=15;i+) /右移 Ledi-1=Ledi; Led15=t; back() unsigned char i; for(i=1;i=7;i+) /右移 Li-1=Li; L7=0;void Timer1() interrupt 3TH1=(65536-40000)/256; TL1=(65536-40000)%256; T+; if(T=200) switch(KeyV) case 0*ee: rotatel(); break; case 0*de: rotater(); break; default: break; void scan() unsigned char i; for(i=0;i0;i-) Li=Li-1; L0=KeyV;void adscan() unsigned char i; for(i=0;i0;i-) Led1i=Led1i-1; Led10=KeyV;void clr() if(KeyV=0*be) second1=0; second2=0; /清零 3 minute1=0; minute2=0; hour1=0;EA=0; Con=1; add0() unsigned char i; for(i=0;i=7;i+) L1i=Led1i; for(i=0;i=7;i+) Led1i=0;eql() unsigned char t,i,b; t=0; b=0; for(i=0;i9) t=1;*/ t=Led1i+L1i+b; if(t9) Led1i=t-10;b=1; adcl() unsigned char i; if(KeyV=0*77) for(i=0;i=7;i+) Led1i=0; L1i=0; void sec2() if(KeyV=0*de) EA=0; /暂停 2void sec1() if(KeyV=0*ed) /切换 4 EA=1;Con=60;void sec() if(KeyV=0*ee) /开场 1 EA=1;addisp() unsigned char i,P1Buf; for(i=0;i=7;i+) P1Buf=i*2; P1Buf=P1Buf4; P1Buf=P1Buf+Led1i; P1=P1Buf; add() while(1) KeyV=0; press(); adcl(); if(KeyV=0*7e) screen(); if(KeyV=0*e7) add0(); if(KeyV=0*b7) eql(); if(KeyV!=0*b7&KeyV!=0*e7&KeyV!=0&KeyV!=0*77&KeyV!=0*7e) adscan(); addisp(); rotate() KeyV=0; while(1) KeyV=11; press(); if(KeyV=0*7e) add(); if(KeyV=0*77) back(); if(KeyV!=0*7e&KeyV!=11&KeyV!=0*77) scan(); display1(); /移位 second() KeyV=0; second1=0; second2=0; minute1=0; minute2=0; hour1=0; TMOD=0*01; TH0=(65536-16666)/256; TL0=(65536-16666)%256; TR0=1; ET0=1; /秒表 EA=1; Con=1; while(1)P1=0*50+dispminute1;P1=0*60+dispminute2;P1=0*00+dispsecond1; P1=0*20+dispsecond2; P1=0*90+disp(hour1%10);P1=0*a0+disp(hour1/10); press(); sec(); sec1(); sec2(); clr(); if(KeyV=0*7e) rotate();clock() KeyV=0; TMOD=0*01; TH0=(65536-16666)/256; TL0=(65536-16666)%256; TR0=1; TR1=0; ET0=1; /时钟 EA=1; Con=63; while(1)P1=0*50+dispminute1;P1=0*60+dispminute2;P1=0*00+dispsecond1; P1=0*20+dispsecond2; P1=0*90+disp(hour1%10);P1=0*a0+disp(hour1/10); scan1(); press(); if(KeyV=0*7e) second();screen() KeyV=0; TMOD=0*01; TH1=(65536-40000)/256; TL1=(65536-40000)%256; TR1=1; TR0=0; ET1=1; /时钟 EA=1; /dly(); while(1) press(); display(); if(KeyV=0*7e) clock(); Klock() unsigned char i,t; V=0; while(1) KeyV=11; V=0; press(); ldisplay(); if(KeyV!=11&KeyV!=0*7b&KeyV!=0*7e) lscan(); if(KeyV=0*7b) for(i=0;i=7;i+) if(Pini=Locki) V+; if(V!=8)for(i=0;i=7;i+) Locki=0; if(V=8)for(i=0;i7) DS12887_Week=1;KeyChar=0; /设置新日期if(KeyChar=j)DS12887_Day-=1;DS12887_Week-=1;if(DS12887_Week9)Almtime7=Almtime7-10;Almtime8=Almtime8+1;D2=1;KeyChar=0;WrtLcdCmd(Clear);break; /懒猪功能 if(Date_Time6/10=(Almtime9-47)D2=1;WrtLcdCmd(Clear);break; 以上为第一次开场闹钟,一分钟后通过语句 while(Date_Time5%10=(Almtime7-47),再次进入闹钟实现如上一样功能。4、闹钟的屏蔽样如果想屏蔽闹钟功能,按下p键,将闹钟屏蔽,屏蔽后,不扫描Led及其autdly函数,同时显示$*。在主函数循环中可定义如下语句:if(KeyChar=p)flg=1;KeyChar=0;其中,如果flg为1则不扫描Led及autdly;五、整体构造整个程序简化后如下:时分秒调整;时间显示;闹钟设置;亮灯;mianLcd初始化;开ps2中断;While1时间数组=DS12887_;时间显示;日期及星期调整;时分秒调整;闹钟设置;亮灯;开关闹钟屏蔽; 六、 源程序*include /包含单片机存放器的头文件*include /包含随机函数rand()的定义文件*include absacc.h*include /包含_nop_()函数定义的头文件*include*include*includesbit D2=P31;unsigned char Almtime15= , , ,_,_,:,_,_,:,_,_;unsigned char Date_Time7;unsigned char flg=1;/闹钟屏蔽标志unsigned char Flag=1;/延时扫描标志void delay() unsigned char i,j=200; for(i=0;i200;i+) while(j) j-;void dely() unsigned char i; for(i=0;i200;i+) delay();void DisplayTime() /别离并显示时间 /取余运算,求得各位数字 DispOneChar(12,0,(Date_Time2/10)+48); DispOneChar(13,0,(Date_Time2%10)+48); /日期 DispOneChar(9,0,(Date_Time1/10)+48)
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!