您好,欢迎访问三七文档
单片机实习报告学院:专业:姓名:学号:起讫时间:指导教师:二〇一〇年九月九日一、实习目的1、熟悉单片机的原理、功能与应用2、熟悉单片机开发的相关软硬件3、培养单片机应用开发的兴趣4、提高单片机应用系统的开发能力二、实习要求1、熟悉MCS-51单片机的原理;2、熟悉单片机KEILC51编程语言;3、熟悉uVision2单片机C语言开发环境;三、实习内容1、熟悉单片机实习板的电路原理,焊接数字钟电路板,连接实习板上的电路,构成数字钟电路。2、熟悉C51编程语言和开发环境,设计数字钟的软件程序,调试软硬件实习数字时钟功能。数字钟的具体设计要求一、设计要求1、以MCS-51系列单片机为核心器件,组成一个电子时钟系统。2、系统显示器由8位LED数码管组成,分别显示时间值的小时、分和秒,以24h(小时)计时方式。3、能够使用按键开关随时对当前时间进行调整。(推荐:键1为功能切换键,键2为移位键,键3为增加键,键4为减少键。也可自行定义。)4、有精力的学生可以实现秒表功能、闹钟定时功能、温度显示功能和通讯功能。二、实习工具计算机、万用表、稳压电源、编程器、电烙铁、单片机实习套件三、方案论证1、总体设计为了实现LED显示器的数字显示,采用静态显示法和动态显示法。由于静态显示法需要数据锁存器等硬件,接口复杂一些。考虑时钟显示有8位,且系统没有其他复杂的处理任务,所以决定采用动态扫描法实现LED的显示。单片机采用Atmel的AT89S52芯片,这样单片机可具有足够的空余硬件资源实现其它的扩充功能。2、系统硬件电路的设计秒表/时钟计时器的硬件电路采用AT89S52单片机,最小化应用设计;采用共阴七段LED显示器,P0口输出段码数据,P2.0~P2.5口作列扫描输出,P1.0,P1.1,P1.2,p1.3口接四个按钮开关,用以调时功能设置。P3.2口接温度传感器,P3.3口接闹铃,P3.4口接闹铃旁的LED。采用12MHz晶振,有利于精确定时。3、系统程序的设计(1)程序实现功能说明刚开始复位,数码管显示学号,随后从1秒开始计时。短按按键1,可以实现调时功能,长按1可实现闹钟设置功能,当可以设置闹钟时LED灯亮,当设置时间与计时时间吻合时,闹铃响1分钟。短按按键2,实现移位功能,长按按键2,实现确定锁定功能。按键3实现“+”功能,按键4实现“-”功能。18B20为温度传感器,所以数码管后两位可以实现温度显示功能。(2)主程序本设计中,计时采用定时器T0中断完成,其余状态循环调用显示子程序,当端口开关按下时,转入相应功能程序。(3)LED显示子程序数码管显示的数据存放在内存单元dis[0]-dis[5]中。其中dis[0]-dis[1]存放秒数据,dis[2]-dis[3]存放分数据,dis[4]-dis[5]存放时数据,每一地址单元内均为十进制BCD码。由于采用软件动态扫描实现数据显示功能,显示用十进制BCD码数据的对应码段存放在ROM表(LEDMAP[]中)。显示时,先取出dis[0]-dis[5]中的某一数据,然后查得对应的显示用码段,并从P0口输出,P2口将对应的数码管选中供电,就能显示该地址单元的数据值。(4)定时器T0中断服务程序定时器T0用于时间计时。中断进入后,时钟计时累计中断达1秒时,对秒计数单元进行加1操作。在计数单元中采用十进制BCD码计数,满60进位,T0中断服务程序执行流程见图2.4。(5)具体程序如下#includereg52.h#includemath.h#defineLEDLen8#definejump_ROM0xcc#definestart0x44#defineread_EEROM0xbeunsignedchark=0;unsignedcharstatus;//按键处理的状态bitseconds_flag=0;//秒标志位,表明时间已到一秒bitflag_key_delay;//键盘连续处理间隔时间周期信号bitkey_first=1;//第一次扫描到按键按下#defineKEY_PORTP1//按键连接的端口bitkey_operated=1;//按键已处理过标记unsignedcharelaps;//按键长按的时间unsignedchartimer_s;//按键随时时间unsignedchartemperature;//温度显示unsignedcharhours,minutes,seconds;//时间显示的时、分、秒unsignedchartimer_hours,timer_minutes;//闹钟定时的小时、分钟unsignedcharhours_flag,minutes_flag,naozhong_flag;//小时,分钟,闹钟可设置标志位sbitP10=P1^0;sbitP11=P1^1;sbitP12=P1^2;sbitP13=P1^3;sbitDQ=P3^2;sbitP33=P3^3;sbitP34=P3^4;unsignedchardis[LEDLen];//发光二极管位选数组codeunsignedcharLEDMAP[]={//发光二极管0~F的段码0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};————————————————延时程序———————————————————voiddelay_ms(unsignedcharN)//N*100us软件延时{unsignedchari,j;i=N;j=50;do{do{}while(--j);}while(--i);}————————————————-键盘相关程序————————————————unsignedcharscankey()//按键的监测{unsignedchartemp1,temp2;unsignedcharstart_time;temp1=~KEY_PORT;//按键未按下为1,按下为0temp1&=0x0f;//取低四位if(temp1==0)//若没有键按下,temp1为0{key_first=1;elaps=0;}else//否则有键按下{delay_ms(10);//延时去抖动,通过比较temp1和temp2=~KEY_PORT;temp2是否相等,确切判断是否有键temp2&=0x0f;按下if(temp1==temp2){if(key_first){start_time=timer_s;key_first=0;key_operated=0;}elaps=(timer_s+60-start_time)%60;//计算按键时间长短returntemp1;//返回键值}}return0;//没键按下时返回0}voidkeydeal()//按键的处理{unsignedcharkeyval;//键值keyval=scankey();if(keyval==1)//长按及短按key1(调时、定时闹钟){if(elaps=6){hours_flag=1;//小时标志位,等于1时表示可设置小时}if(elaps6){hours_flag=1;naozhong_flag=1;//闹钟标志位,等于1时表示可以设置闹钟P34=0;//可设置闹钟时间时LED灯亮}}if(keyval==2)//短按及长按key2(移位、锁定){if(elaps=6)minutes_flag=1;//分钟标志位,等于1时表示可设置分if(elaps6)//长按为锁定功能{if((hours_flag==1)&&(minutes_flag==0)&&(naozhong_flag==0))hours_flag=0;if((hours_flag==1)&&(minutes_flag==1)&&(naozhong_flag==0)){hours_flag=0;minutes_flag=0;}if((hours_flag==1)&&(minutes_flag==1)&&(naozhong_flag==1)){P34=1;hours_flag=0;minutes_flag=0;naozhong_flag=0;}if((hours_flag==1)&&(minutes_flag==0)&&(naozhong_flag==1)){P34=1;hours_flag=0;minutes_flag=0;naozhong_flag=0;}}}if((keyval==4)&&(!key_operated))//短按key3(慢+){key_operated=1;if(hours_flag==1&&(minutes_flag==0)&&(naozhong_flag==0)){hours++;hours=hours%24;}if((hours_flag==1)&&(minutes_flag==1)&&(naozhong_flag==0)){minutes++;minutes=minutes%60;}if((hours_flag==1)&&(minutes_flag==0)&&(naozhong_flag==1)){timer_hours++;timer_hours=timer_hours%24;}if((hours_flag==1)&&(minutes_flag==1)&&(naozhong_flag==1)){timer_minutes++;timer_minutes=timer_minutes%60;}}if((keyval==8)&&(!key_operated))//短按key4键(慢-){key_operated=1;if(hours_flag==1&&(minutes_flag==0)&&(naozhong_flag==0)){hours+=24;hours--;hours=hours%24;}if((hours_flag==1)&&(minutes_flag==1)&&(naozhong_flag==0)){minutes+=60;minutes--;minutes=minutes%60;}if((hours_flag==1)&&(minutes_flag==0)&&(naozhong_flag==1)){timer_hours+=24;timer_hours--;timer_hours=timer_hours%24;}if((hours_flag==1)&&(minutes_flag==1)&&(naozhong_flag==1)){timer_minutes+=60;timer_minutes--;timer_minutes=timer_minutes%60;}}}————————————————温度相关函数—————————————————voiddelay(unsignedcharN)//N*4us软件延时{unsignedchari;i=N;do{}while(--i);}unsignedcharreset(void)//18B20复位{unsignedcharready;DQ=1;delay(1);DQ=0;delay(120);//480us,120DQ=1;delay(8);//大于60us小于75,注意值不能太大或太小(7)ready=DQ;delay(80);//响应周期300us,75,不能太小return(ready);}voidwrite_byte(unsignedchardat)//18B20写字节{unsignedchari;for(i=0;i8;i++){DQ=0;DQ=dat&0x01;//至少隔1us再输出delay(15);//数据至少保持60us,注意值不能太大或太小(10)DQ=1;dat=1;//至少隔1us再输出下一位}}unsignedcharread_byte(void)//18B20读字节{unsignedchari=0;unsignedchardat=0;for(i=0;i
本文标题:单片机实习报告
链接地址:https://www.777doc.com/doc-5876941 .html