《单片机课程设计(数字时钟).doc》由会员分享,可在线阅读,更多相关《单片机课程设计(数字时钟).doc(18页珍藏版)》请在三一办公上搜索。
1、单片机课程设计报告课题名称:数字时钟一、设计目的: 随着半导体技术的不断发展,各种微处理芯片的性价比越来越高,在各个领域的应用也越来越广泛,其中MCU在工业控制、航天航空、民用家电、医疗设备等方面占有十分重要的地位。我们在之前所学习的MCS-51系统单片机就是MCU中的一员,作为低端的8位MCU它具有价格低、适配器件成熟种类多等优势,因此尽管现在32位、16位MCU不断发展,但8位的MCU仍占有大约50%的市场份额,同时它也是我们学习MCU的必要的入门途径,本次实习就是应用我们所学习的MCS-51单片机进行一次实际制作,要经过从硬件设计、软件设计、实验电路调试、软件调试直至最后作品焊接成型,这
2、对以前我们所学习的理论知识进行进一步的巩固和深化,更重要的是学习以MCU为控制核心的应用的实际设计流程及基本的实践动手能力。二、设计内容 应用AT89S51及相关器件制做一个LED数码显示电子时钟。所需使用的软件及硬件具体内容如下:1 使用软件及器件1) 软件:Keil uVision2(IDE集成开发环境)、ELITE-IV单片机开发系统、protel99se2) 器材清单:序号名称数量备注1面包板12AT89S5113双位数码块3412M晶振15按钮46三极管901267电容30p28电容10419电容10uf/10v110电阻100711电阻10k112二极管4148113导线若干三、实
3、习步骤1 根据实习内容及所提供元器件,设计硬件电路,提供的参考电路见图1,也可自行设计1)复位及晶振电路是单片机最小系统必备部分2)三个按钮接在P3.0、P3.1、P3.2上用于调整时、分、秒3)P2口送LED数码显示的段码4)P1.0至P1.5送数码显示控制的位码2 根据设计的硬件电路,在面包板上搭接实验电路3 在硬件基础在keil上上进行软件设计,调试4 调试通过后, 向AT89S51烧写程序5 将烧写好的AT89S51插接到实验电路中,验证是否正常,如果正常说明软、硬件正确可进行电子时钟焊接制做。6 焊接好电子时钟后,再次上电调试,验证通过,实习圆满完成。注意的问题:l 单片机在锁紧座的
4、正确放法:单片机缺口朝上。l 在面包板上接好电路后,先用万用表测量一下电源及地是否会短路。l 接电源调试时不能带电插拔元件四、元件参数190129012是一种最常用的普通三极管。 它是一种低电压,大电流,小信号的PNP型硅三极管集电极电流Ic:Max -500mA 集电极-基极电压Vcbo: -40V 工作温度:-55 to +150 主要用途: 开关应用、射频放大289S51管脚图3双位共阴极数码块管脚图a1b1c1d1e1f1g1dp1a2b2c2d2e2f2g2dp2a1abfcdpedgcom1com部分程序参考流程图主程序流程图结束调按键处理程序按键处理调显示子程序启动定时器定时器初
5、始化:时间常数、工作方式、中断控制位设置初始化:时、分、秒、定时最小单元设置初值开始显示程序流程图返回显示缓存地址指针加1,位码左移一位延时1MS段码送P2口,位码送P1口取显示缓存中数据查表取段码取显示缓存区首地址,设置位控制码初始值是否一轮动态显示结束?分数据转换BCD码存入缓存区秒数据转换BCD码存入缓存区取显示缓存区首地址开始时数据转换BCD码存入缓存区分调整键是否按下?延时去抖分调整键是否按下?秒数据清0秒是否为60?秒值加1秒调整键是否按下?秒调整键是否按下?延时去抖开始调显示子程序键盘处理程序流程图返回时是否为24?时调整键是否按下?时数据清0延时去抖调显示子程序时值加1秒是否为
6、60?分数据清0调显示子程序分值加1时调整键是否按下?定时中断程序流程图中断返回时清零分清零,取时单元中数据加1时单元中数据是否为24?分单元中数据是否为60?秒清零,取分单元中数据加1秒单元中数据是否为60?50ms清零取秒单元中数据加150ms单元中数据是否为20?取50ms单元中数据加1重新加载时间常数开始ELITE-III系统硬件(V2.0)介绍ELITE-IV实物图:硬件资源介绍: 1电源输入(6V) 2电源开关按钮3电源正常指示灯4700mA过流指示灯5NE555 6高档一体化红外接受头7流水等开关按键8Usb取电接口9DS1302时钟芯片10 流水灯 11 24C02 12 93
7、C46 13 ADC0804 模数转换芯片14 MAX232 15 串口接口 16 AT89S*ISP切换键17 蜂鸣器 18 复位键 19 华邦ISP切换20 COM1座21 MCU冷启动22 COM1切换23 I2C接口24 A/D内外切换25 EA切换26 A/D输入27 INTO 28 INT_TO 29 SPI接口30 COM0测试31 18B20温度传感器接口32 KEY_A 33 KEY-B 34 51单片机35 单片机缩紧座 36 A/D调节37 LCD12864接口38 74HC574 39 LCD1602接口 40 ULN2003步进电机驱动芯片41 LCD12232接口4
8、2 1602、12232LCD对比度43 74HC244 44 LCD12864对比度调整旋钮45 4*4键盘46 8*8键盘扩展接口47 输出5V电源接口48 6位8字数码管49 数码管开关按键。 50 步进电机 (二)下载器的安装和使用 一 AT89S系列下载器1 打开随机光盘中的“ISPSetup”文件夹,双击ISPSetup.exe执行安装程序。2点击“下一步”,出现图6对话框,继续点“下一步”。3选择安装路径。4点击“完成”按钮,完成安装过程。说明:本软件是对Atmel 的89S系列MCU进行在线下载程序,打开hex文件之前需要执行“清空”操作,同时要按下开发板上的 S1和S2 按钮
9、。依次执行“鉴别”“擦除”“写入”操作后,弹起S1和S2按钮,按复位键,单片机即可运行刚下载的新程序。 (三)电子钟电路板布线 (四)数字钟程序程序#include#include#define uchar unsigned char#define uint unsigned int/*七段共阴管显示定义*/ uchar code dispcode =0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F, 0xBF,0x86,0xCB,0xCF,0xEF,0xED,0xFD,0x87,0xFF,0xDF;/*定义并初始化变量*/uchar seco
10、nde=0;uchar minite=0;uchar hour=12;uchar mstcnt=0;sbit P3_0=P30; / second 调整定义sbit P3_1=P31; /minite调整定义sbit P3_2=P32; /hour调整定义/*函数声明*/void delay(uchar k ); /延时子程序void time_pro( ); /时间处理子程序void display( ); /显示子程序void keyscan( ); /键盘扫描子程序/*/*延时子程序*/*/void delay (uchar k)uchar j;while(k-)!=0) for(j=0
11、;j125;j+) ; /*/*时间处理子程序*/*/void time_pro( void) if(seconde=60) /秒钟设为60进制 seconde=0; minite+; if( minite=60) /分钟设为60进制 minite=0; hour+; if(hour=24) /时钟设为24进制 hour=0; /*/* 显示子程序*/*/void display(void) P2=0xfe; P0=dispcodehour/10; /显示小时的十位 delay(4); P2=0xfd; P0=(dispcode(hour%10)|0X80; /显示小时的个位 delay(4)
12、; P2=0xfb; P0=dispcodeminite/10; /显示分的十位 delay(4); P2=0xf7; P0=(dispcodeminite%10)|0X80; /显示分的个位 delay(4); P2=0xef; P0=dispcodeseconde/10; /显示秒的十位 delay(4); P2=0xdf; P0=dispcodeseconde%10; /显示秒的个位 delay(4); /*/*键盘扫描子程序*/*/void keyscan (void) if(P3_0=0) /按键1秒的调整 delay(30); if(P1_0=0) seconde+; if(sec
13、onde=60) seconde=0; if(P3_1=0) /按键2分的调整 delay(30); if(P1_1=0) minite+; if(minite=60) minite=0; if(P3_2=0) /按键3小时的调整 delay(30); if(P1_2=0) hour+; if(hour=24) hour=0; void timer0(void) interrupt 1 using 0 /定时器0方式1,50ms中断一次 TH0=0x3c;TMOD = 0x11; mstcnt+; if(mstcnt=20) seconde+; mstcnt=0; /对计数单元的清零 /*/*
14、主函数*/*/void main(void) P1=0xff; /初始化p1口,全设为1 TMOD = 0x11; /time0为定时器,方式1TH0=0x3c; /预置计数初值TL0=0xb0;EA=1; ET0=1; TR0=1; while (1) keyscan( ); /按键扫描 time_pro( ); /时间处理 display( ); /显示时间 附流水灯实验程序:#include #define uint unsigned int#define uchar unsigned charuint count,i=0;void main() TMOD=0x01;/定时器0工作方式1
15、 TH0=0x3c;/装定时器初值高8位,50ms中断一次 (65536-50000)/256 TL0=0xb0;/装定时器初值低8位,50ms中断一次 (65536-50000)%256 EA=1;/开中断 TR0=1;/定时器0开始 ET0=1;/定时器0允许中断 while(1);/等待中断void timer0()interrupt 1 TH0=0x3c;/重新设置初值 TL0=0xb0;/重新设置初值 count+; if(count=20) count=0; P1=(0X01i); /P1接8个LED if(+i=8) i=0; 实习心得机制0973班 杨少波 2009963107
16、时光飞逝,一转眼,一个学期又接进尾声了,本学期的单片机综合课程设计也在一周前完成了。俗话说“好的开始是成功的一半”。说起课程设计,我认为最重要的就是做好设计的预习,认真的研究下老师所给的题目。其次,老师对实验的讲解要一丝不苟的去听去想,因为只有都明白了,做起设计来才会事半功倍,如果没有弄明白,就迷迷糊糊的去做,到头来一点收获也没有。最后,要重视程序的模块化,修改的方便,也要注重程序的调试,掌握其方法。虽然这次的课程设计算起来在实验室的时间只有五天,不过因为我们每个小组都有自己的实验板,所以可以自己带回宿舍里做,时间还是蛮充裕的。硬件的设计跟布线都要我们自己动手去连接,软件的编程也要我们不断的调
17、试,最终一个能完成课程设计的劳动成果出来了,很高兴它能按着设计的思想与要求运动起来。当然,这其中也存在着很多问题,可以总结如下:第一、不够细心比如由于粗心大意接错了线,导致有些数码管不亮等等,还有由于对课本理论知识的不熟悉导致编程出现错误。第二、是在学习态度上,这次课设是对我的学习态度的一次检验。对于这次单片机课程实习,我的第一大心得体会就是作为一名工程技术人员,要求具备的首要素质绝对应该是严谨。我们这次实习所遇到的问题多数都是由于我们不够严谨不够细心照成的。第三、在做人上,我认识到,无论做什么事情,只要你足够坚强,有足够的毅力与决心,有足够的挑战困难的勇气,就没有什么办不到的。在这次难得的课
18、程设计过程中我锻炼了自己的思考能力和动手能力。通过程序的编写以及设计电路的过程,加强了我思考问题的完整性和理论联系实际的可行性。通过各个I/O口的接线,使我们对单片机的各个管脚的功能也有了进一步的认识。还锻炼我们个人的查阅技术资料的能力,动手能力,发现问题,解决问题的能力。并且使我们熟练掌握了有关器件的性能及测试方法。再次感谢老师的辅导以及同学们的帮助,是他们让我有了一个更好的认识,无论是学习还是生活,生活是实在的,要一步一个脚印的走。课程设计时间虽然很短,但我还是学习了很多的东西,使我眼界打开,感受颇深。实习心得机制0973班 谢永福 2009963116通过这一周的单片机的实训,让我有了不
19、少体会。首先,通过老师对单片机C51程序设计基础的讲解,我对C语言程序中的数组、指针以及函数的一些只是有了更深一步的认识,并且通过老师对C51时钟芯片实时读写程序,接口电路设计实例程序和液晶模块实例程序的读取,让我对时钟芯片和液晶显示的功能有了更深的了解。然后,在上机实训中,老师先让我们调试从课堂中认识的流水灯程序和电子时钟程序,通过对这两个程序的调试,我对液晶显示屏、时钟芯片的工作原理有了更深的理解,并且通过一些改编,让我们发现了一些问题,并通过自己修改,最后完成实验。最后,在开始设计实验时,先通过老师对我们的演示,使我们对程序设计有了初步了解,让后通过自己实践动手,自己发现解决问题,最后达到完成程序的问题,在这过程中,发现自己平时基本功不够扎实,不能及时有效的解决问题,而且不能善于思考问题,不能对问题有本质上的了解,而老师的一些点拨让我有些了解,进而解决问题,这次实训还是有了不少收获,对单片机的认识更加深了,自己动手能力也提高一些。这次实训虽然其中会有些错误和失败,但总的来说是受益匪浅,在运用中发现问题,解决问题,就是最大的收获。专心做自己的事,是一种乐趣;互相交流,是大家一起进步的必要过程;上网查阅资料,是获得所需信息的有效途径。我想,这些练习和经验都将是我以后最宝贵的财富!