淮北师范大学硬件课程设计.doc_第1页
淮北师范大学硬件课程设计.doc_第2页
淮北师范大学硬件课程设计.doc_第3页
淮北师范大学硬件课程设计.doc_第4页
淮北师范大学硬件课程设计.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

淮北师范大学硬件课程设计电子钟制作硬件设计学 院 计算机科学与技术 专 业 计算机科学与技术(非师范)学 号 20091202001 20091202002 学 生 姓 名 柏传玉 蔡俊卿 指导教师姓名 一、设计任务:1、熟悉整个电路图,练习一下焊接操作;2、能够根据原理图焊接电路板,经过调试,保证整个电路板没有虚焊点;3、熟练掌握C51的编程方法与技巧;4、能够有效地控制LED、蜂鸣器和键盘的操作(可采用多种形式);5、编写出一个电子钟,六个数码管每两个一组,分别显示小时、分钟和秒;二、设计思路:利用89C51单片机来进行控制,通过简单的程序及控制功能来实现电子钟的显示。1、对数码管来显示的09的数字进行编码,以便于后来的数码管显示的调用,通过单片机的P0引脚来进行相关控制。2、利用动态扫描来对多个数码管进行控制,通过视觉暂留来显示出数码管的动态显示效果,达到显示时间的目的。3、为了较为精确的控制时间,通过两个中断函数来实现控制功能,计时器1用来实现时间的运行,通过一次50ms的中断循环20次来实现1s的效果;计数器2用来进行动态扫描,较为快速的实现多个数码管之间的切换。4、通过四个按键来实现对小时、分钟的加、减操作。5、将控制蜂鸣器的函数和时间的运行写在一起来时间一秒响一次的效果。6、定义一个数组实现8个LED灯的亮灭情况。三、硬件电路图模块分析:1、三极管:三极管的三个极E、B、C如右图所示,在知道为NPN型时,也可将万用表拨到hFE档,将三极管三个管脚插入NPN插孔中,读数最大的表示和上面的EBC标号一致。2、排阻:所谓排阻就是若干个参数完全相同的电阻,它们的一个引脚都连到一起,作为公共引脚。其余引脚正常引出,本设计中的排阻共有9个引脚,如图所示,有圆点标记的为公共端,3、数码管:数码管有共阴极和共阳极两种,如下图所示,本电路采用了共阴极数码管,因此位选COM为0时,段选a-g及DP为高电平1,相应的LED点亮,显示不同的数字。在本次设计中,段选a-g及DP由P0口控制(注意段选位与P0各端口的对应关系),位选由P2口通过NPN三极管来进行控制,P2.7引脚控制数码管的位选COM电平,如果希望数码管显示,那么就应该使得COM公共端为0,因此,结合电路图,P2.7应该为1,此时通过P0口控制段选来显示不同的数码。请同学们根据电路的具体连接来计算出09分别对应的段码值。 注:以上引脚对应位置有误。a-g依次对应为5、7、4、2、0、3、1、6。4、晶振及其电路:本电路采用内部时钟方式,单片机内部有一个用于构成振荡器的高增益反相放大器,引脚XTAL1为输入端,XTAL2为输出端。两个引脚跨接晶体振荡器与微调电容组成并联谐振回路,构成一个自激振荡器为内部时钟电路提供振荡时钟。振荡器的频率主要取决与晶体的振荡频率。本电路晶振为11.0592MHz。电容C1、C2通常为30pF。 5、复位电路:复位操作完成单片机内部电路的初始化。除系统上电时进行复位操作外,系统出错处于死机状态时,也需要执行复位操作,时单片机重新启动,这时只要单片机的复位引脚RST上出现两个机器周期以上的高电平,单片机就进行复位操作。 6、蜂鸣器:通过P2_1引脚来控制蜂鸣器的发声情况,若想提高或降低蜂鸣器的响度,可适当的改变控制蜂鸣器开、关的频率来实现7、LED彩灯:通过P1引脚来控制彩灯的两灭情况,若给予引脚一个低电平,则控制LED灯亮,反之则灭。可事前定义一个一维数组放于函数中控制LED灯的亮灭情况。四、软件设计:1、流程图:(1)main函数:Main函数流程图开始TMOD=0x11;TH0=Tim0;TL0=Tim1;TH1=Disp0;TL1=Disp1;EA=1;ET0=;TR0=1;ET1=1;TR1=1;P1=0xff;While(1)Keycontrol();是(2)timecontrol函数Timecontrol流程图开始Num5+If(Num5)=10Num4+,Num5=0;If(Num4=6)Num3+;Num4=0;If(Num3=10)Num2+;Num3=0;If(Num2=6)Num1+; Num2=0;If(Num1=10)Num0+;Num1=0;if(Num0=2&Num1=4)是是是是是是(3)中断函数:timer()interrupt 1TH0=Tim0;TL0=Tim1;time+tf(time=50)time=0;Beep();count+;是if(count=10);Count=0P1=ledcount; timecontrol();是否否disp () interrupt;TH1=Disp0;TL1=Disp1;i+if(i5)i=0是P2=contexti;否if(i=1|i=3|i=5)P0=tableNumi%10+0x40;P0=tableNumi%10;是否(4)keycontrol函数:If(P3_4=0)Delay(5)If(P3_4=0)Num3+If(Num3=10)Num3=0;Num2+If(Num2=6)Num2=0While(P3_4=0)按键加1If(P3_5=0)Delay(5)If(P3_5=0)if(Num2=0&Num3=0)Num2=6;Num3=0;Num3-;if(Num3=-1)Num2-;Num3=9;While(P3_4=0)按键减1是否是是是是是是是否否否否否(1)(1)否否while(P3_3=0)按键减1否if(P3_2=0)否Num1=9;Num0-If(Num1=-1)时低位减Num1-;否Num0=2;Num1=0;是是否时的高低位为0是if(P3_3=0)delay(5)If(P3_3=0)while(P3_2=0)按键加1Num0=0;Num1=0;if( P3_2=0)if(Num0=2&Num1=4)是否Num1=0;时的高位加1,Num0+是是是if(Num1=10)时的低位Num1+是delay(5)是P3=0xff开始Keycontrol流程图五、源程序#include const unsigned int code table10=0xbd,0x90,0xa7,0xb6,0x9a,0x3e,0x3f,0xb0,0xbf,0xbe ;/位选码unsigned int Num6=0,0,0,0,0,0; /六位数码管初始值const unsigned int code context6=0x80,0x40,0x20,0x10,0x08,0x04; /段选码unsigned char led36=0xfe,0xfc,0xf8,0xf0, 0xe0,0xc0,0x80,0x00,0xff, 0x7f,0x3f,0x1f,0x0f, 0x07,0x03,0x01,0x00,0xff, 0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f,0xff, 0x7f,0xbf,0xdf,0xef, 0xf7,0xfb,0xfd,0xfe,0xff; /LED灯码值#define Tim0 (65535-20000)/256) /定时器1初值#define Tim1 (65535-20000)%256)#define Disp0 (65535-100)/256) /定时器2初值#define Disp1 (65535-100)%256)#define uint unsigned int void display();uint count= 0;/LED灯计数uint time=0;/计时器控制uint i=0; void delay(int x) /延时函数 int i,j; for(i=x;i0;i-) for(j=150;j0;j-);void timecontrol() /时间控制 Num5+; /秒个位加 if(Num5=10) /满足条件进位 Num4+; /秒十位加 Num5=0; if(Num4=6) /满足条件进位 Num3+; /分个位加 Num4=0; if(Num3=10) /满足条件进位 Num2+; /分十位加Num3=0;if(Num2=6) /满足条件进位 Num1+; /时个位加 Num2=0; if(Num1=10) /满足条件进位 Num0+;/时十位加 Num1=0; if(Num0=2&Num1=4)/判断小时是否符合逻辑 Num0=0; Num1=0; void keycontrol() /按键控制 P3=0xff;if(P3_2=0)/小时加 delay(5);/去抖操作 if(P3_2=0) Num1+; if(Num1=10) Num1=0; Num0+; if(Num0=2&Num1=4) Num0=0;Num1=0; while(P3_2=0);if(P3_3=0) /小时减 delay(5); if(P3_3=0) if(Num0=0&Num1=0) /若两位均为0,则先赋24,用于下步减 Num0=2; Num1=4; Num1-; if(Num1=-1) Num1=9; Num0-; while(P3_3=0); if(P3_4=0)/分钟加 delay(5); if(P3_4=0) Num3+; if(Num3=10) Num3=0; Num2+; if(Num2=6) Num2=0; while(P3_4=0); if(P3_5=0) /分钟减 delay(5); if(P3_5=0) if(Num2=0&Num3=0) Num2=6;Num3=0; Num3-; if(Num3=-1) Num2-; Num3=9; while(P3_5=0); void Beep() /蜂鸣器 P2_1=0;delay(1);P2_1=1;delay(1); void timer()interrupt 1 /时间中断uint i; TH0=Tim0; TL0=Tim1;/赋初值 time+; if(time=50) /20ms循环50次约1s time=0; for(i=0;i5) i=0; P2=contexti; if(i=1|i=3|i=5) P0=tableNumi%10+0x40;/时、分、秒的个位显示带小数点的数 else P0=tableNumi%10;void main() TMOD=0x11; TH0=Tim0; TL0=Tim1; TH1=Disp0; TL1=Disp1; EA=1; ET0=1; TR0=1; ET1=1; TR1=1; P1=0xff; while(1) keycontrol();三、心得体会在这次课程设计中,刚开始还真不

温馨提示

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

评论

0/150

提交评论