单片机课程设计报告
课 题: 可编程微波炉控制系统设计 学 院: 电气与信息工程学院 报 告 人: 周宜行 (20080711127) 班级 : 08级电自08班 同组成员: 陈亚临
设计时间: 2011年5月30日-6月10日
目录
1 课题概述„„„„„„„„„„„„„„„„„„3
1.1 选题背景„„„„„„„„„„„„„„„3 1.2 课题描述及实现功能„„„„„„„„„„3 1.3 设计难点„„„„„„„„„„„„„„„3
2 课题分析及设计思路• „„„„„„„„„„„4
2.1 系统功能分模块描述•„„„„„„„„„„4 2.1.1 按键模块•„„„„„„„„„„„„4
2.1.2 数码管模块•„„„„„„„„„„„5 2.1.3 蜂鸣器模块•„„„„„„„„„„„5
2.2 系统的工作流程„„„„„„„„„„„„5
2.2.1 系统的总体流程图„„„„„„„„„5
3 系统程序设计•„„„„„„„„„„„„„„„7
3.1 输入模块设计•„„„„„„„„„„„„7 3.2 显示模块设计•„„„„„„„„„„„„9 3.3 控制模块设计•„„„„„„„„„„„„14 3.4 时钟芯片IIC应用模块设计„„„„„„„19 3.5 系统的总体原理图„„„„„„„„„„„26
4 课程设计硬件介绍„„„„„„„„„„„„„„„27
5 课程设计感想„„„„„„„„„„„„„„„28
1 课题概述
1.1 选题背景
随着人们生活水平的提高,微波炉已经成为每家人必不可少的家用电器,其提供的方便的烹调方式让煮食更加快速而健康。不同的微波炉厂商基于不同角度的考虑得到自己的设计,旨在生产出适合消费者的人性化的产品。本文给出了一种具有微波炉基本功能,并可以在各状态间合理转换,带有加热过程主动停止功能的程序设计方案。
1.2 课题描述及实现功能
本课题是一种基于ADuC848单片机的微波炉程序设计。由于C语言具有更清晰的结构,更可靠的可读性,而且能更有效地被维护,我们采用了C语言来编写程序。
我们根据课程设计要求,所设计的微波炉的功能如下:
1)制定一个在不同功能时火力的控制时序表。具有三档微波加热功能,分别表示微波炉工作状态为烹调、烘烤、解冻,试验中用LCD模拟
2)实现工作步骤:复位待机-----》检测显示电路-----》设置输出功能和定时器初值-----》启动定时和工作开始-----》结束烹调和音响提示
3)在上电和手动按复位键时,控制器输出的微波功率默认控制信号为“PT”(烹调的拼音缩写),微波加热处于待机状态,加热时间不显示
4)具有4位时间预置电路,按键启动时间设置,最大预设数为99分59秒 5)设定初值后按开启键,一方面按选择的挡位启动相应的微波加热;另一方面使计时电路以秒为单位做倒计时。当计时到时间为0时,则断开微波加热器,并给出声音提示,即蜂鸣器发出2至3秒的双音频提示音
6)若在待机状态时按测试键,采用LCD显示,有“WBL”字符的跑马灯与88:88数字时间的闪烁
7)未工作时显示北京时间
1.3 设计难点
由于本实验所需的单片机开发板已经确定,相应的硬件部分已经做好,所以我们只需要根据硬件原理图进行软件设计。本实验设计的微波炉程序需要建立正确显示北京时间的状态,而其余工作状态也比较多,也需要在各状态中互相转换,而停止加热的设定也采用建立状态的方式实现,所以本实验的难点在于如何建立各状态并正确表达各状态间的逻辑联系。
2 课题分析及设计思路
根据题目要求,该系统控制部分以ADuC848单片机为核心、C语言为载体,实现微波炉的北京时间显示,检测显示电路,设定加热时间,倒计时,报警等功能。
2.1 系统功能分模块分析描述
本实验主要用到的部分有4×4矩阵键盘,LCD液晶屏等。
2.1.1 按键模块
本系统采用4×4矩阵键盘作为输入部分,实现数据输入功能。本程序采用按键分时复用的方式,键盘上各按键编号如下图所示,其中的键盘与图4_1中的矩阵键盘相对应。
13 9 5 1 14 10 6 2 15 11 7 3 0
12 8 4 图2.1.1_1 4×4键盘各按键对应的功能
在图2.1.1_1中,各按键功能如下:
1:从“未工作”状态转到待机状态,从待机状态转到工作状态选择状态的确定键;加热时间设置时候的秒位加一
2:待机状态时的测试键;加热时间设置时候的秒位减一 3:加热时间设置时候的秒位加十 4:加热时间设置时候的秒位减十 5:加热时间设置时候的分位加一 6:加热时间设置时候的分位减一 7:加热时间设置时候的分位加十
8:加热时间设置时候的分位减十
15:从加热时间设置状态转到工作状态选择状态,从加热状态转到确认停止加热状态,从确认停止加热状态转到加热状态的返回键
0:从工作状态选择状态转到加热时间设置状态,从加热时间设置状态转到加热状态,从确认停止加热状态转到“未工作”状态的确定键
2.1.2 LCD模块
本实验采用LCD液晶屏作为显示部分,用于显示北京时间及工作各操作及状态的显示。
当上电复位,按键复位和加热停止时,LCD显示北京时间,例如,时间是11年3月17日 星期四 12时34分56秒,则LCD显示如下: 1 1 1 2 Y h 03 M 3 4 1 m 7 5 D 6 s T h u r s 在待机状态中,若无按键按下,LCD上排显示“DJ”(待机的拼音缩写);若长按测试键,上排有“WBL”字符的从左往右的跑马灯,下排有88:88的时间数字闪烁
在工作状态选择状态中,上排默认显示“PT”,选择工作状态后改为相对应状态的拼音缩写
在加热时间设置状态和加热状态中,上排显示选择的工作状态,下排显示加热时间,显示如下:
在确认停止加热状态中,上排显示“QDTZ?”(确定停止?的拼音缩写)
1 2 P : T 3 4 2.1.3 蜂鸣器模块
本实验采用蜂鸣器实现加热结束时的报警提示。当加热时间倒计时到达00:00时,停止加热并有蜂鸣器提示,之后进入“未工作”状态并显示北京时间。
2.2 系统的工作流程
2.2.1 系统的总体流程图
N N 复位 显示北京时间 扫描按键 蜂鸣提示 确定键按下? Y N 确定键按下? Y Y 测试键按下? Y 测试显示电路 N 时间为00:00? 返回键按下? N Y 确定键按下? N Y N 修改状态键按下? 返回键按下? 修改状态 Y Y N 加热倒计时 确定键按下? Y N 确定键按下? Y 修改时间键按下? Y 修改时间 N 返回键按下? N Y 3 系统程序设计
3.1 输入模块设计
输入模块主要采用4*4矩阵键盘作为输入设备,实现数据输入,具体程序为: void KeyDelay(unsigned int KeyJsTime); unsigned char GetKey();
unsigned char GetKey() {
unsigned char temp; P1&=0xf0; P2&=0xf0; temp=P1&0x0f; if(temp!=0x0f) {
KeyDelay(3333); if(temp==(P1&0x0f)) {
P2|=0x0e;
switch(P1&0x0f) {
case 0x0e:return 1; case 0x0d:return 2; case 0x0b:return 3; case 0x07:return 4; case 0x0f:break; default:return 0x80; }
P2&=0xf0;
P2|=0x0d;
switch(P1&0x0f) {
case 0x0e:return 5; case 0x0d:return 6; case 0x0b:return 7; case 0x07:return 8; case 0x0f:break; default:return 0x80; }
P2&=0xf0;
P2|=0x0b;
switch(P1&0x0f) {
case 0x0e:return 9; case 0x0d:return 10; case 0x0b:return 11; case 0x07:return 12; case 0x0f:break; default:return 0x80; }
P2&=0xf0;
P2|=0x07;
switch(P1&0x0f) {
case 0x0e:return 13; case 0x0d:return 14; case 0x0b:return 15; case 0x07:return 0; case 0x0f:break; default:return 0x80; } } }
return 0x55; }
void KeyDelay(unsigned int KeyJsTime) {
unsigned char temp;
unsigned int JsKeyDelay;
for(JsKeyDelay=0;JsKeyDelay 图3.1_1 矩阵键盘原理图 3.2 显示模块设计 显示模块主要采用LCD作为输出设备,实现北京时间,工作状态,加热时间等数据显示,具体程序为: sbit LCD_RS = P3^6; sbit LCD_RW = P3^5; sbit LCD_EN = P3^3; sfr LCDData=0x80; void LCDWrite(bit cd,unsigned char input); void LCDWait(unsigned char CiShu); void LCDDelay(); void LCDInitialize(); void LCDPrintString(unsigned char x,unsigned char y,unsigned char *string); void LCDPrintNumber(unsigned char x,unsigned char y,unsigned char bits,unsigned int number); unsigned char ReadState(); void LCDInitialize() { LCDDelay(); LCDWrite(0,0x38); 据接口*/ LCDDelay(); LCDWrite(0,0x38); LCDDelay(); LCDWrite(0,0x38); LCDDelay(); LCDWrite(0,0x38); LCDDelay(); LCDWrite(0,0x08); */ LCDDelay(); LCDWrite(0,0x01); 示清零*/ LCDDelay(); LCDWrite(0,0x06); 且光标加一,整屏显示不移动*/ LCDDelay(); LCDWrite(0,0x0c); } void LCDWrite(bit cd,unsigned char DATA) /*cd=0,写命令;cd=1,写数据*/ { LCDWait(20); LCD_RS=cd; LCD_RW=0; /*开显示,不显光标,光标不闪*/ /*读或写一个字符后地址指针加一, /*显示清屏,数据指针清零,所有显 /*关显示,不显示光标,光标不闪烁 /*设置16*2显示,5*7点阵,8位数 LCD_EN=0; LCDData=DATA; LCD_EN=1; LCD_EN=0; } void LCDPrintString(unsigned char x,unsigned char y,unsigned char *string) /*写字符串*/ { unsigned char address; address=x+(y-1)*0x40+0x80; LCDWrite(0,address); while(*string!='\\0') { LCDWrite(1,*string); string++; } } void LCDPrintNumber(unsigned char x,unsigned char y,unsigned char WeiShu,unsigned int number) { unsigned char address; 数,x列,y行,位数,数字*/ unsigned char j,temp[5]; address=x+(y-1)*0x40+0x80; LCDWrite(0,address); temp[0]=(number%100000)/10000+48; temp[1]=(number%10000)/1000+48; temp[2]=(number%1000)/100+48; /*写数字,最大为6位 /*指针定位,x为列,y为行*/ temp[3]=(number%100)/10+48; temp[4]=number%10+48; for(j=5-WeiShu;j<5;j++) { LCDWrite(1,temp[j]); } } void LCDWait(unsigned char CiShu) { unsigned char i; for(i=0;i unsigned char ReadState() { unsigned char temp; P0=0xff; LCD_EN=0; LCD_RS=0; LCD_RW=1; LCD_EN=1; temp=LCDData; /*读状态*/ LCD_EN=0; return temp; } void LCDDelay() { unsigned int a; for(a=0;a<1000;a++); } 显示由LCD实现,LCD的原理图如下图所示: 图3.2_1 LCD的原理图 3.3 控制模块设计 控制部分作为整个微波炉程序的核心,包括状态建立、状态转换、时间显示、蜂鸣等,具体程序为如下: ng(7,1,\"PT\");break; case 2:LCDPrintString(7,1,\"HK\");break; case 3:LCDPrintString(7,1,\"JD\");break; default:break; } delay02(); key=GetKey(); if(key==0) {CurrentTime[0]=0x00;CurrentTime[1]=0x00;zt=2;delay02();} key=0x80;delay02(); break; case 2: key=GetKey(); switch(key) //加热时间设置 { case 0x01: //sec+1 CurrentTime[0]++; if(CurrentTime[0]>0x3b) CurrentTime[0]=0x00; break; case 0x02: //sec-1 if(CurrentTime[0]==0x00) CurrentTime[0]=0x3b; else CurrentTime[0]--; break; case 0x03: //sec+10 CurrentTime[0]+=10; if(CurrentTime[0]>0x3b) CurrentTime[0]=0x00; break; case 0x04: //sec-10 if(CurrentTime[0]<0x0a) CurrentTime[0]=0x3b; else CurrentTime[0]-=10; break; case 0x05: //min+1 CurrentTime[1]++; if(CurrentTime[1]>0x63) CurrentTime[1]=0x00; break; case 0x06: //min-1 if(CurrentTime[1]==0x00) CurrentTime[1]=0x63; else CurrentTime[1]--; break; case 0x07: //min+10 CurrentTime[1]+=10; if(CurrentTime[1]>0x63) CurrentTime[1]=0x00; break; case 0x08: //min-10 if(CurrentTime[1]<0x0A) CurrentTime[1]=0x63; else CurrentTime[1]-=10; break; default:break; } LCDPrintNumber(5,2,2,CurrentTime[1]); LCDPrintString(7,2,\":\"); LCDPrintNumber(8,2,2,CurrentTime[0]); delay02(); key=GetKey(); if(key==0x00) zt=3;else if(key==15) {zt=1;gzzt=1;LCDInitialize();} delay02(); key=0x80; break; case 3: key=GetKey(); if(key==15) //判断是否停止加热 {LCDInitialize();zt=5;key=0x80;delay02();} else {if (CurrentTime[1]==0x00 && CurrentTime[0]==0x00) { buzzer(); LCDInitialize(); zt=4;gzzt=0; } else { for(i=95;i>0;i--) {for(j=629;j>0;j--) delay(1); }; if(CurrentTime[0]==0x00) {CurrentTime[1]--; CurrentTime[0]=0x3b;} else CurrentTime[0]--; LCDPrintNumber(5,2,2,CurrentTime[1]); LCDPrintNumber(8,2,2,CurrentTime[0]); } } break; case 4: //显示北京时间 delay(100); ReadTime(time); switch(time[3]) { case 1: LCDPrintString(10,1,\" \");LCDPrintString(10,1,\"Mon.\");break; case 2: LCDPrintString(10,1,\" \");LCDPrintString(10,1,\"Tues\");break; case 3: LCDPrintString(10,1,\" \");LCDPrintString(10,1,\"Weds\");break; case 4: LCDPrintString(10,1,\" \");LCDPrintString(10,1,\"Thurs\");break; case 5: LCDPrintString(10,1,\" \");LCDPrintString(10,1,\"Fri.\");break; case 6: LCDPrintString(10,1,\" \");LCDPrintString(10,1,\"Sat.\");break; case 7: LCDPrintString(10,1,\" \");LCDPrintString(10,1,\"Sun.\");break; default:break; } LCDPrintNumber(0,1,2,time[6]); //year LCDPrintString(2,1,\"Y\"); LCDPrintNumber(3,1,2,time[5]); //month LCDPrintString(5,1,\"M\"); LCDPrintNumber(6,1,2,time[4]); //day LCDPrintString(8,1,\"D\"); LCDPrintNumber(0,2,2,time[2]); //hour LCDPrintString(2,2,\"h\"); LCDPrintNumber(3,2,2,time[1]); //minute LCDPrintString(5,2,\"m\"); LCDPrintNumber(6,2,2,time[0]); //second LCDPrintString(8,2,\"s\"); delay(10); key=GetKey(); if(key==1) {zt=0;delay02();} key=0x80; break; case 5: //确认是否中断加热 LCDPrintString(5,1,\"QDTZ?\"); key=GetKey(); if(key==0) {CurrentTime[0]=0x00;CurrentTime[1]=0x00;gzzt=0;i=0;zt=4;key=0x80;LC DInitialize();} else if(key==15) { LCDInitialize(); zt=3;key=0x80;delay02();delay02(); LCDPrintNumber(5,2,2,CurrentTime[1]); LCDPrintString(7,2,\":\"); LCDPrintNumber(8,2,2,CurrentTime[0]); switch(gzzt) { case 1:LCDPrintString(7,1,\"PT\");break; case 2:LCDPrintString(7,1,\"HK\");break; case 3:LCDPrintString(7,1,\"JD\");break; default:break; } } break; default:break; } } } void buzzer() //蜂鸣器 { unsigned char i,j,k,l; for(k=0;k<8;k++) { for(i=0;i<100;i++) {for(j=0;j<10;j++) {P2|=0x40; /*P2.6=1*/ delay(3); P2&=0xbf; /*P2.6=0*/ delay(4); } } for(l=0;l<100;l++) delay(100); for(i=0;i<100;i++) {for(j=0;j<5;j++) {P2|=0x40; /*P2.6=1*/ delay(6); P2&=0xbf; /*P2.6=0*/ delay(8); } } for(l=0;l<100;l++) delay(100); } } void delay(unsigned int x) { unsigned int m,n; for(m=0;m void delay02() //0.1秒的延迟 { unsigned int i,j; for(i=20;i>0;i--) {for(j=629;j>0;j--) {delay(1); } } } 本实验用到的核心器件即为ADUC848,其原理图如下图所示: 图3.3_1 ADUC848原理图 3.4 时钟芯片IIC应用模块设计 利用实验板上提供的时钟芯片作为北京时间的初始化和计时,具体程序如下: void iicdelay(unsigned int times); void iicstart() { MDE=1; MDO=1; iicdelay(2); MCO=1; iicdelay(2); MDO=0; iicdelay(2); } void iicstop() { MDE=1; MDO=0; iicdelay(2); MCO=1; iicdelay(2); MDO=1; } void iicack() { MDE=1; MCO=0; MDO=0; iicdelay(2); MCO=1; iicdelay(2); MCO=0; iicdelay(1); MDO=1; } void iicnack() { MDE=1; //MCO=0; MDO=1; iicdelay(2); MCO=1; iicdelay(2); MCO=0; } bit iicreadack() { bit ack; MCO = 0; iicdelay(2); MDE=1; MDO=1; MCO=1; iicdelay(2); MDE=0; ack=MDI; MCO=0; return ack; } void iicwriteda(unsigned char da) { unsigned char i; MDE=1; for(i=0;i<8;i++) { MCO=0; iicdelay(0); if((da<MDO=0; iicdelay(2); MCO=1; iicdelay(3); } MCO=0; } unsigned char iicreadda() { unsigned char da; int i; da=0; MDE=1; MDO=1; MDE=0; for(i=0;i<8;i++) { MCO=0; iicdelay(3); MCO=1; iicdelay(1); if(MDI==1) {da=da<<1;da++;} else da=da<<1; } MCO=0; return da; } void iicdelay(unsigned int t) { unsigned int i,j; for(i=0;i void ReadTime(unsigned char TIME[7]) { bit EATemp; unsigned char temp; EATemp=EA; CFG848|=0x01;//使用片内xram iicstart(); iicwriteda(0xd0); iicreadack(); iicwriteda(0x00); iicreadack(); iicstop(); iicdelay(1); iicstart(); iicwriteda(0xd1); iicreadack(); TIME[0]=iicreadda(); iicack(); TIME[1]=iicreadda(); iicack(); TIME[2]=iicreadda(); iicack(); TIME[3]=iicreadda(); iicack(); TIME[4]=iicreadda(); iicack(); TIME[5]=iicreadda(); iicack(); TIME[6]=iicreadda(); iicnack(); iicstop(); iicdelay(1); TIME[0]=((TIME[0]&0x7f)>>4)*10+(TIME[0]&0x0f); TIME[1]=((TIME[1]&0x7f)>>4)*10+(TIME[1]&0x0f); if(TIME[2]&0x40) //second //minute { if(TIME[2]&0x20)temp=0x80;else temp=0x40; TIME[2]=((TIME[2]&0x1f)>>4)*10+(TIME[2]&0x0f); //hour TIME[2]|=temp; } else { TIME[2]=((TIME[2]&0x3f)>>4)*10+(TIME[2]&0x0f); } TIME[3]=TIME[3]&0x07; //week TIME[4]=((TIME[4]&0x3f)>>4)*10+(TIME[4]&0x0f); //date TIME[5]=((TIME[5]&0x1f)>>4)*10+(TIME[5]&0x0f); //month TIME[6]=(TIME[6]>>4)*10+(TIME[6]&0x0f); //year EA=EATemp; } void SetTime(unsigned char TIME[7]) { bit EATemp; unsigned char temp=0; unsigned char TimeTemp[7]; EATemp=EA; CFG848|=0x01;//使用片内xram for(temp=0;temp<7;temp++)TimeTemp[temp]=TIME[temp]; temp=0; TimeTemp[6]=((TimeTemp[6]/10)<<4)+(TimeTemp[6]%10); TimeTemp[5]=((TimeTemp[5]/10)<<4)+(TimeTemp[5]%10); TimeTemp[4]=((TimeTemp[4]/10)<<4)+(TimeTemp[4]%10); TimeTemp[3]=((TimeTemp[3]/10)<<4)+(TimeTemp[3]%10); if((TimeTemp[2]&0xc0)==0x00) { TimeTemp[2]=((TimeTemp[2]/10)<<4)+(TimeTemp[2]%10); } else { if((TimeTemp[2]&0xc0)==0x01)temp=0x40;else temp=0x60; TimeTemp[2]&=0x3f; TimeTemp[2]=((TimeTemp[2]/10)<<4)+(TimeTemp[2]%10); TimeTemp[2]|=temp; } TimeTemp[1]=((TimeTemp[1]/10)<<4)+(TimeTemp[1]%10); TimeTemp[0]=((TimeTemp[0]/10)<<4)+(TimeTemp[0]%10); TimeTemp[0]&=0x7f; iicstart(); iicwriteda(0xd0); iicreadack(); iicwriteda(0x00); iicreadack(); iicwriteda(TimeTemp[0]); iicreadack(); iicwriteda(TimeTemp[1]); iicreadack(); iicwriteda(TimeTemp[2]); iicreadack(); iicwriteda(TimeTemp[3]); iicreadack(); iicwriteda(TimeTemp[4]); iicreadack(); iicwriteda(TimeTemp[5]); iicreadack(); iicwriteda(TimeTemp[6]); iicreadack(); iicstop(); iicdelay(1); EA=EATemp; } void SwitchRTC(unsigned char SWITCH) { unsigned char temp; bit EATemp; EATemp=EA; CFG848|=0x01;//使用片内xram iicstart(); iicwriteda(0xd0); iicreadack(); iicwriteda(0x00); iicreadack(); iicstop(); iicstart(); iicwriteda(0xd1); iicreadack(); temp=iicreadda(); iicnack(); iicstop(); if(SWITCH)temp&=0x7f; else temp|=0x80; iicstart(); iicwriteda(0xd0); iicreadack(); iicwriteda(0x00); iicreadack(); iicwriteda(temp); iicreadack(); iicstop(); EA=EATemp; } 该模块原理图如下图所示: 图3.4_1 时钟芯片原理图 3.5 系统的总体原理图 系统的电气的原理图如下图所示: 图3.5_1 系统总体原理图 4 课程设计硬件介绍 本次课程设计使用的是ADuC848,其详细情况请参见数据手册。本单片机学习板集成多个基础硬件资源模块,各个资源模块可以相互组合使该板实现不同的功能。因此,本学习板既可用于51单片机的教学实验,又可用于做功能比较强的单片机课程设计,是51单片机初学者的好帮手。所使用开发板的的资源是非常丰富的,如下图所示: 图4_1 实验所用开发板的实物图 1、2、3:单片机P0、P2、P3口引出接口(有限流保护电阻); 4:上排图形点阵LCD128的接口、下排LCD1602的接口; 5、6:两路16位ADC输入、可作差分输入; 7、8:12位DAC输出、对DAC输出进行比例放大或者跟随的运放; 9:单片机AduC848; 10:无源蜂鸣器、由单片机PWM模块输出信号控制; 11:8位数码管; 12:SPI接口; 13:RS232串口(通过串口在线下载、单步、断点、运行到某一行等方式 调试程序); 14:步进电机(5V、70欧姆、6线4相)接口; 15:8路LED,从左至右为LED7~0,分别被P0.7~P0.0控制; 16:复位按键和下载按键; 17、18:IIC总线上的EEPROM AT24C08和RTC DS1307; 19:IIC接口; 20:PS/接口; 21:红外接头; 22:功能选择和配置插针; 23:4×4矩阵键盘; 24:直流电源输入; 此外还有红外二极管、USB电源输入接口。 5 课程设计感想 两周的时间,用来学习一门以前从来没有接触过的设计软件,感觉是不够的。从一开始,紧张地确立状态,编写自己的课程设计程序,到最后的下板调试,我们能够感觉到自己在一步一步地进步着,但也同时深深意识到自己在设计上面的不足和不熟练。 在课程设计里,我们第一次尝试一种以小组为单位的长时间的学习,这和我们以往的实验和理论学习是有着很大的区别。我们需要有很强的自觉性,随时督促着自己要用心处理现在面对的困难,如果一直觉得剩下的时间还有很多很多,两个星期可能一转眼过去了而自己却收获很少,甚至影响设计的完成进度。我们还要尝试小组工作的挑战,每个人都有着自己的任务,可能你的一个错误会让别人的工作无法进行;而面对难以一个人解决的困难时,更多地不是第一时间问老师而是组内的讨论并尝试解决。有时候,你会因为遇到不知名的错误而停滞不前,也许你努力找寻你程序上面的逻辑错误而终无所得,也许你多次尝试修改可能会有影响的数值而结果毫无变化,因为这不是纯理论的教学,而是和实际硬件紧密结合的设计。我也曾经因为电脑和板子的问题而苦恼不已,但当我们一次又一次,辛苦地解决,让我们的想法能更好地在实验板上实现出来时,我们的喜悦也是难以言喻的。有时候两个人整天地呆在实验室里,除了吃饭,一走出去便夜色已深,甚至回到宿舍第一时间打开电脑,继续之前在实验室里的工作,这样的情况在之前真的很少有过。 这次的课程设计的确很难忘,无论自身的能力还是团队协作方面都有着一定的提高,而那种类似于搞项目的学习过程更让我从中学习到很多。虽然我们这次的设计结束了,设计结果也比较理想地得到了,我们需要努力的还有太多太多。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务