单片机课程设计报告课题名称:数字时钟一、设计目的:随着半导体技术的不断发展,各种微处理芯片的性价比越来越高,在各个领域的应用也越来越广泛,其中MCU在工业控制、航天航空、民用家电、医疗设备等方面占有十分重要的地位。
我们在之前所学习的MCS-51系统单片机就是MCU中的一员,作为低端的8位MCU它具有价格低、适配器件成熟种类多等优势,因此尽管现在32位、16位MCU不断发展,但8位的MCU仍占有大约50%的市场份额,同时它也是我们学习MCU的必要的入门途径,本次实习就是应用我们所学习的MCS-51单片机进行一次实际制作,要经过从硬件设计、软件设计、实验电路调试、软件调试直至最后作品焊接成型,这对以前我们所学习的理论知识进行进一步的巩固和深化,更重要的是学习以MCU为控制核心的应用的实际设计流程及基本的实践动手能力。
二、设计内容应用AT89S51及相关器件制做一个LED数码显示电子时钟。
所需使用的软件及硬件具体内容如下:1.使用软件及器件1)软件:Keil uVision2(IDE集成开发环境)、ELITE-IV单片机开发系统、protel99se 2)器材清单:三、实习步骤1.根据实习内容及所提供元器件,设计硬件电路,提供的参考电路见图1,也可自行设计1)复位及晶振电路是单片机最小系统必备部分2)三个按钮接在P3.0、P3.1、P3.2上用于调整时、分、秒3)P2口送LED数码显示的段码4)P1.0至P1.5送数码显示控制的位码2.根据设计的硬件电路,在面包板上搭接实验电路3.在硬件基础在keil上上进行软件设计,调试4.调试通过后,向A T89S51烧写程序5.将烧写好的A T89S51插接到实验电路中,验证是否正常,如果正常说明软、硬件正确可进行电子时钟焊接制做。
6.焊接好电子时钟后,再次上电调试,验证通过,实习圆满完成。
注意的问题:●单片机在锁紧座的正确放法:单片机缺口朝上。
●在面包板上接好电路后,先用万用表测量一下电源及地是否会短路。
●接电源调试时不能带电插拔元件四、元件参数1.90129012是一种最常用的普通三极管。
它是一种低电压,大电流,小信号的PNP型硅三极管集电极电流Ic:Max -500mA集电极-基极电压Vcbo:-40V工作温度:-55℃to +150℃主要用途:开关应用、射频放大2.89S51管脚图3.双位共阴极数码块管脚图c dp ed g部分程序参考流程图主程序流程图显示程序流程图键盘处理程序流程图定时中断程序流程图ELITE-III系统硬件(V2.0)介绍ELITE-IV实物图:硬件资源介绍:1.电源输入(6V)2.电源开关按钮3.电源正常指示灯4.700mA过流指示灯5.NE5556.高档一体化红外接受头7.流水等开关按键8.Usb取电接口9.DS1302时钟芯片10.流水灯11.24C0212.93C4613.ADC0804 模数转换芯片14.MAX23215.串口接口16.AT89S**ISP切换键17.蜂鸣器18.复位键19.华邦ISP切换20.COM1座21.MCU冷启动22.COM1切换23.I2C接口24.A/D内外切换25.EA切换26.A/D输入27.INTO28.INT_TO29.SPI接口30.COM0测试31.18B20温度传感器接口32.KEY_A33.KEY-B34.51单片机35.单片机缩紧座36.A/D调节37.LCD12864接口38.74HC57439.LCD1602接口40.ULN2003步进电机驱动芯片41.LCD12232接口42.1602、12232LCD对比度43.74HC24444.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 按钮。
依次执行“鉴别”—“擦除”—“写入”操作后,弹起S1和S2按钮,按复位键,单片机即可运行刚下载的新程序。
(三)电子钟电路板布线(四)数字钟程序程序#include<reg51.h>#include<absacc.h>#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 seconde=0;uchar minite=0;uchar hour=12;uchar mstcnt=0;sbit P3_0=P3^0; // second 调整定义sbit P3_1=P3^1; //minite调整定义sbit P3_2=P3^2; //hour调整定义/*函数声明*/void delay(uchar k ); //延时子程序void time_pro( ); //时间处理子程序void display( ); //显示子程序void keyscan( ); //键盘扫描子程序/*****************************//*延时子程序*//****************************/void delay (uchar k){uchar j;while((k--)!=0){for(j=0;j<125;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=dispcode[hour/10]; //显示小时的十位delay(4);P2=0xfd;P0=(dispcode[(hour%10)])|0X80; //显示小时的个位delay(4);P2=0xfb;P0=dispcode[minite/10]; //显示分的十位delay(4);P2=0xf7;P0=(dispcode[minite%10])|0X80; //显示分的个位delay(4);P2=0xef;P0=dispcode[seconde/10]; //显示秒的十位delay(4);P2=0xdf;P0=dispcode[seconde%10]; //显示秒的个位delay(4);}/*******************************//*键盘扫描子程序*//*******************************/void keyscan (void){if(P3_0==0) //按键1秒的调整{delay(30);if(P1_0==0){seconde++;if(seconde==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; //对计数单元的清零}}/**************************//*主函数*//**************************/void main(void){ P1=0xff; //初始化p1口,全设为1TMOD = 0x11; //time0为定时器,方式1TH0=0x3c; //预置计数初值TL0=0xb0;EA=1;ET0=1;TR0=1;while (1){keyscan( ); //按键扫描time_pro( ); //时间处理display( ); //显示时间}}附流水灯实验程序:#include <reg51.h>#define uint unsigned int#define uchar unsigned charuint count,i=0;void main(){TMOD=0x01;//定时器0工作方式1TH0=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=~(0X01<<i); //P1接8个LEDif(++i==8)i=0;}}机制0973班杨少波2009963107时光飞逝,一转眼,一个学期又接进尾声了,本学期的单片机综合课程设计也在一周前完成了。
俗话说“好的开始是成功的一半”。
说起课程设计,我认为最重要的就是做好设计的预习,认真的研究下老师所给的题目。
其次,老师对实验的讲解要一丝不苟的去听去想,因为只有都明白了,做起设计来才会事半功倍,如果没有弄明白,就迷迷糊糊的去做,到头来一点收获也没有。