电气学院
班级 电气1049班
姓名 冯岗
学号 1000001426
实训地点 电气学院605实训室
指导教师 杨宇
2012年5月23日
实训项目一
项目名称 | 一灯(LED)闪烁控制 |
一、要求及功能描述: 功能:用单片机控制一个LED灯快速闪烁。 要求: 1)设计一个电路,用单片机端口控制控制一个LED灯; 2)编写一个控制程序,实现LED灯快速闪烁,闪烁时间采用软件延时反法; 3)在01板上实现,并改变闪烁延时后,观察效果。 2、电路设计: 三、程序设计: C语言程序 #include sbit led_en=P4^2; sbit L1=P0^7; delay( ) { unsigned char i,j,k; for(i=20;i>0;i--) for(j=200;j>0;j--) for(k=248;k>0;k--); } main( ) { led_en=0; while(1) { L1=0; delay( ); L1=1; delay( ); } } 四、项目小结: 此项目以ATC51芯片为核心部件,实现了单片机的一灯闪烁。此次实训在老师的讲解下,在软件、编写程序方面,花费了我们大量的时间,不过也尽可能多的让我了解一灯闪烁知识。通过这三周的实训,熟练掌握了keil u Vision4软件开发环境的使用,并且进一步加深对单片机常用指令的理解与运用。在实训过程中,使我得到了一次用专业知识、专业技能分析和解决问题、全面系统的锻炼。使我在单片机的基本原理、单片机系统开发过程,以及在常用编程设计思路技巧的掌握方面迈进了一大步。 同时在老师的悉心指导和严格要求下,获得了丰富的理论知识,极大的提高了时间能力,单片机领域对我今后进一步学习计算机方面知识有极大的帮助。使我认识到课程的重要性,同时也感受到理论与实践之间的差距,是我对单片机系统的运用由来更深刻的认识。 |
项目名称 | 电子门铃与控制 |
一、要求及功能实现: 功能:用单片机实现一个门铃控制 要求: 1)设计一个电路,用单片机端口读取按键,并使蜂鸣器响; 2)编写一控制程序,实现门铃功能; 3)在01板上实现,并改变鸣方式。 二、电路设计:
三、程序设计: C语言程序 #include sbit key1=P3^2; sbit bell=P3^6; main( ) { P3M0=0x40; P3M1=0x00; if(!key1)bell=1; else bell=0; } 四、项目小结: 这次实习让我受益匪浅,无论是理论知识还是其他的各个方面。上课时也只是见到过一次单片机,只能从理论的角度去理解枯燥乏味。但在实训过程中真正的了解的一些单片机知识,及单片机运用系统,能理论联系实际,开阔了眼界,提高了对单片机知识的理解和运用。 单片机是一门很重要的课程,老师和一些工作的朋友都曾说过,尽管我们在课堂上学到的内容很有限,但在以后的学习中单片机还需要好好地深入研究和学习,最后感谢老师对我们的精心指导和帮助。 |
项目名称 | 流水灯控制 |
一、要求及功能实现 功能:用单片机实现一个流水灯控制 要求: 1) 设计一个电路,用单片机流水灯控制功能; 2)编写一个控制程序,实现流水灯控制功能; 3)在01板上运行控制程序后,观察效果。 二、电路设计 三、程序设计 C语言程序 #include unsigned char a=1; sbit led_en=P4^2; delay (unsigned int T) {while(--T);} main( ) { led_en=0; while(1) { P0=~a; a<<=1; if(a==0)a=0; delay(50000); } } 四、项目小结 本设计成品是以单片机ATC51芯片为核心部件,实现了流水灯的功能。此次设计在软件、编写程序方面花费时间太多,我们尽可能多的了解流水灯控制的相关知识。通过这几周的综合实训(单片机课程设计),熟练掌握了Keil C51集成开发环境的使用方法,了解并掌握到单片机芯片的烧写方法与步骤,进一步加深了对单片机常用指令的理解与运用。在实训过程中,使我得到了一次用专业知识、专业技能分析和解决问题、全面系统的锻炼。使我在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧(特别是C语言)的掌握方面都能向前迈了一大步。 同时在老师的悉心指导和严格要求下,获得了丰富的理论知识,极大地提高了实践能力,单片机领域对我今后进一步学习计算机方面的知识有极大的帮助。使我们认识到课程的重要性,同时也感受到理论与实践之间的差距,使我们对单片机系统的应用有了更加深刻的认. |
项目名称 | 数码管驱动与控制 |
一.要求及功能实现: 功能:用单片机实现LED数码管的静态与动态驱动显示。 要求: 1)设计一个电路,用单片机驱动LED数码管; 2)编写一控制程序,控制LED数码管显示,可分为静态显示和动态显示; 3)在01板上实现,并改变显示内容后,观察效果。 二.电路设计 3.程序设计 静态显示C语言程序 #include sbit led_bit=P1^0; unsigned char a=0; unsigned char disp[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6}; delay(unsigned int T) {unsigned char i; for(i=0;i<2;i++) while(T--); } main() { P1M0=0X01; P1M1=0X00; led_bit=1; while(1) { for(a=0;a<10;a++) { P0=~disp[a]; delay(5000); } } } 动态显示C语言程序 #include sbit led_en=P4^2; unsigned char code disp[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0x00}; unsigned char buffer[6]; unsigned char m_sec=0,sec=0,min=0; unsigned char n=0,num=0,b=1; main() { P1M0=0x3f; P1M1=0x00; TMOD=0x11; TH0=0x3c; TL0=0xb0; TH1=(65536-4000)/256; TL1=(65636-4000)%256; IE=0x8a; TR0=1; TR1=1; while(1); } T0_int() interrupt 1 {TH0=0x3c; TL0=0xb0; n++; if(n>=2) { n=0; m_sec++; } if(m_sec>=100){sec++;m_sec=0;} if(sec>=60){min++;sec=0;} if(min>=100)min=0; buffer[0]=m_sec%10; buffer[1]=m_sec/10; buffer[2]=sec%10; buffer[3]=sec/10; buffer[4]=min%10; buffer[5]=min/10; } T1_int() interrupt 3 {TH1=(65536-4000)/256; TL1=(65536-4000)%256; if(num==2||num==4) P0=~(disp[buffer[num]]|0x01); else P0=~disp[buffer[num]]; num++; P1=b; b=b<<1; if(num>=6) {b=1;num=0;} } 四.项目小结 回想起整个实训过程,本次实训是本人到目前为止觉得最有意义,也是最有收获的,作为学自动化方面的学生,设计是我们将来必须的技能,而这个实训刚刚给了我们提供了一个应用自已所学知识的平台。 从通过理论设计,到具体方案,到调试电路成品。整个过程都需要我充分利用所学的知识进行思考借鉴。我认为这次实训是针对前面所学的知识进行一次比较全面的检测,总的来说,我觉得的听充实的。 |
项目名称 | 电子钟 |
一.要求及功能实现: 功能:用单片机实现电子钟。 要求: 1)设计一个电路,用单片机实现电子钟; 2)编写一控制程序,控制LED数码管显示时间,并可通过按键设定时间。 3)在01板上运行程序后,观察效果。 2.电路设计: 三.程序设计: C语言程序 #include #define Uchar unsigned char #define Uint unsigned int Uchar code disp[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0x00}; Uchar buffer[6]; Uchar sec=0,min=0,hour=0; Uchar led_bit=0x20,num=0,n=0,a=0; sbit key1=P3^2; sbit key2=P3^3; sbit key3=P3^4; sbit key4=P3^5; delay(Uint T) { while(T--); } main() { TMOD=0x11; TH0=0xdc; TL0=0x00; TH1=0xee; TL1=0x00; IE=0x8b; P1M0=0x3f; P1M1=0x00; TR0=1; TR1=1; while(1) { if(key1==0) { a++; if(a>3)a=0; if(key2==0&&a==0) switch(a) { case 1:hour++;if(hour>23)hour=0;break; case 2:min++;if(min>59)min=0;break; case 3:sec=0;break; } } switch(a) { case 0: buffer[0]=hour/10; buffer[1]=hour%10; buffer[2]=min/10; buffer[3]=min%10; buffer[4]=sec/10; buffer[5]=sec%10; break; case 1: buffer[0]=hour/10; buffer[1]=hour%10; buffer[2]=10; buffer[3]=10; buffer[4]=10; buffer[5]=10; break; case 2: buffer[0]=10; buffer[1]=10; buffer[2]=min/10; buffer[3]=min%10; buffer[4]=10; buffer[5]=10; break; case 3: buffer[0]=10; buffer[1]=10; buffer[2]=10; buffer[3]=10; buffer[4]=sec/10; buffer[5]=sec%10; break; } ; } } T0_int() interrupt 1 { TH0=0xdc; TL0=0x00; n++; if(n>99) { n=0; sec++; if(sec>59) { sec=0; min++; if(min>59) { min=0; hour++; if(hour>23)hour=0; } } } } T1_int() interrupt 3 { TH1=0xee; TL1=0x00; if((num==1||num==3)&&a==0) P0=~(disp[buffer[num]]|0x01); else P0=~disp[buffer[num]]; P1=led_bit; led_bit=led_bit>>1; num++; if(num>5){led_bit=0x20;num=0;} } 四.项目小结 在整个课程设计完后,总的感觉是:有收获。以前上课都是一些最基本的东西,而现在却可以将以前学的东西做出有实际价值的东西。在这个过程中,我的确学到很多书本上学不到的东西,如:如何利用现有的元件组装得到设计要求,如何找到错误的原因,等等。但也遇到了不少的挫折,有时遇到的错误怎么也找不到原因所在。在学习中的小问题在课堂上不能犯,在动手的过程中却很有可能犯。特别是在书写程序时,一不小心就出错,而且很不容易检查出来,还有就是自己的动手能力有欠缺,在做的过程中遇到了很大的困惑,耽误了不少时间。但现在回头看看,感觉还是挺有成就感的。 |