计算机工程实践实习报告专业:班级:姓名:学号:指导老师:设计时间:指导教师对实习报告的评语指导教师签字:年月日一前言漫步在繁华的现代化的大都市的大街上,随时都可以看到街上有很多可以用卡取钱的机器(ATM自动柜员机),十字路口的交通灯。我们的手机,我们家里数码电视机、数码音响、遥控器、空调、智能玩具.....这些“高科技”看上去是如此的神秘,它到底是怎样构成的,它是通过什么样的程序和什么样的方式来完成这一系列指令的呢?让我们取钱更方便、避免城市的交通混乱和交通阻塞……给我们生活带来了处处方便。其实这也是用单片机来控制的,单片机在我们生活中触手可及,它是如此地贴近我们的生活,单片机给我们的生活带来的有如此多的便利。目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。科技越发达,智能化的东西就越多,使用的单片机就越多。看来学单片机是社会发展的需求。据统计,我国的单片机年容量已达1-3亿片,且每年以大约16%的速度增长,但相对于世界市场我国的占有率还不到1%。特别是沿海地区的玩具厂等生产产品多数用到单片,并不断地辐射向内地,这说明单片机应用在我国才刚刚起步,有着广阔的前景。培养单片机应用人才,特别是在工程技术人员中普及单片机知识有着重要的现实意义。面对着学习单片机一个终生受用的职业,不受年龄的限制。同时面对着生活的现代化,我们衣、食、住、行也就越来越依赖各式各样的“高科技”了,也就有很多地方都用到高集成电路IC和单片机。学习单片机,做现代生活的领航人,你还在等什么呢?二要求设计1个电子钟,用4位7段码LED显示器,显示当前时间时和分。时和分之间用2个LED作为分隔,每秒钟小数点闪动1次。用89C2051内部定时器定时,每10ms中断1次,中断100次后秒单元+1,秒单元累加到60时自动清零,分单元+1,分单元累加到60时自动清零,小时单元+1,小时单元累加到24时,又回到0时,0分,0秒。设有校表功能,通过按键可与北京时间校准。按一下S1键,进入“校时”状态,在“校时”状态按一下S2键小时单元+1,按一下S3键小时单元-1。再按一下S1键,进入“校分”状态,在“校分”状态,按一下S2键分单元+1,按一下S3键分单元-1。再按一下S1键,退出“校表”状态。三原理图四编程思路说明及程序流程图1.编程思路定时器0,1在12MHz晶振频率时,最大的计时能力在80ms左右。所以按50ms计算最好。故首先初始化定时器0如下:TH0=0xD8;TL0=0xF0;通过中断方法来获取时间的计数,使用变量tim来进行计数,当tim==20时,即为一秒。如此即可得出分,时的值。具体看如下程序流程图。2.程序流程图主程序流程图:图1;按键设置流程图:YNNYY第一次按下S1键进入调节小时按下S2键小时加一按下S3键小时减一YNNYYY五程序清单#includeAT892051.h#includestdio.h#includestring.hunsignedcharnum[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};unsignedcharmins=0;unsignedcharsecd=0;unsignedcharhours=0;unsignedchartim=0;unsignedcharcount=0;voiddelayms(unsignedintms);voidkey(void);第二次按下S1键进入调节分按下S2键分加一按下S3键分减一第三次按下S1键退出校分状态voidled(unsignedcharn);voidconfig(void);/****************************************************delayms****************************************************/voiddelayms(unsignedintms){unsignedchartemp=125;for(;ms0;ms--){while(temp0)temp--;temp=125;}}/**********************************************interrupt**********************************************/voidtimer0(void)interrupt1{TH0=0xD8;//reloadtimerTL0=0xF0;tim++;}/***************************************************display7seg***************************************************/voidled(unsignedcharn){unsignedchari;unsignedcharx;x=n;for(i=0;i8;i++){P3_1=0;P3_0=x&0x80;P3_1=1;x=x1;}}/***************************************************ifconfigbuttonispressed***************************************************/voidkey(void){unsignedchartemp;P1=0xFF;temp=P1&0x70;//pressconfigbuttonif(temp==0x30){delayms(100);//5P1=0xFF;temp=P1&0x70;if(temp==0x30)count=1;elsecount=0;}}/***********************************************config();***********************************************/voidconfig(void){unsignedchartemp;P1=0xFF;temp=P1&0x70;delayms(100);while(count==1)//confighour{P1=0xFF;temp=P1&0x70;if(temp==0x60){tim=0;count=2;}switch(temp){case0x50://hour++{hours++;if(hours==24)hours=0;led(num[mins%10]);led(num[(unsignedchar)mins/10]);led(num[hours%10]);led(num[(unsignedchar)hours/10]);}break;case0x30:///hour--{if(hours==0){hours=23;}elsehours--;led(num[mins%10]);led(num[(unsignedchar)mins/10]);led(num[hours%10]);led(num[(unsignedchar)hours/10]);}break;default:break;}P1=0xFF;temp=P1&0x70;delayms(100);//100}while(count==2)//configminutes{P1=0xFF;temp=P1&0x70;if(temp==0x60){TH0=0xDF;TL0=0xF0;TR0=1;EA=1;tim=0;count=3;}switch(temp){case0x50:{mins++;if(mins==60)mins=0;led(num[mins%10]);led(num[(unsignedchar)mins/10]);led(num[hours%10]);led(num[(unsignedchar)hours/10]);}break;case0x30:{if(mins==0)mins=59;elsemins--;led(num[mins%10]);led(num[(unsignedchar)mins/10]);led(num[hours%10]);led(num[(unsignedchar)hours/10]);}break;default:break;}P1=0xFF;temp=P1&0x70;delayms(100);//100}count=0;return;}voidmain(void){led(num[0]);led(num[0]);led(num[0]);led(num[0]);TH0=0xD8;TL0=0xF0;TMOD=0x01;//timer0,16bitTR0=1;//enabletimer0ET0=1;//enabletimer0tointerruptEA=1;//enaleinterruptwhile(1){if(tim==50){P3_4=0;P3_5=0;}if(tim==100){P3_4=1;P3_5=1;tim=0;secd++;}key();if(count==1){EA=0;TR0=0;delayms(50);//50config();}delayms(10);if(secd==60){secd=0;mins++;if(mins==60){mins=0;hours++;}if(hours==24){hours=0;}led(num[mins%10]);led(num[(unsignedchar)mins/10]);led(num[hours%10]);led(num[(unsignedchar)hours/10]);}}}六总结通过本电子表系统的设计,我学到了很多东西。首先,了解了怎样去设计一个应用系统。应用系统需要考虑的稳定性、实用性和编软件时的程序优化性,均在设计过程中涉及到了。其次,更深入体会到了模块化设计系统的优越性,在设计电子表的过程中,我们把系统分为了主程序、中断服务程序、显示程序、延时程序、等几个部分,再逐个编写,单独调试通过,再连接在一起。大大的减小了工作量,这主要体现在调试工作中。最后再将所有程序连接在一起调试,并根据此时系统的稳定性修改程序中的参数,最终系统达到比较好的效果。当然,在调试程序的过程中任务是很艰巨的,经常遇到很多意想不到的错误。另外,在此次课程设计中,更加感到了团结协作的重要性,当一个人陷入困境时他人的帮助十分重要的。大家共同商量还可以发现许多个人无法发现的问题