嵌入式课程设计与总结报告一、设计实习任务1.焊接ARM7(LPC2132)最小系统PCB。要求仔细认真焊接,并调试使其能正常工作(提供最简易测试程序)。2.设计数码管动态扫描显示电路,三个按键的键盘电路,模拟电压取样电路等。要求原理图设计合理,要求有与最小系统板的接口,正确焊接,调试后能正常工作。3.控制软件设计在嵌入式控制系统的设计中,系统控制软件的设计是一项非常重要且艰巨的工作,系统能否正常可靠的工作,成败在此一举。因此要求同学们认真仔细的设计、调试控制软件。要求软件语句精炼,整体健壮,有一定的抗干扰能力。二、数码管动态扫描显示电路控制软件设计要求显示电路能正常显示数据,数码管无闪烁,明亮,可随时刷新显示的数据,参考流程图见图1。开始送显数据延时(20mS)N完否?Y图1三.键盘识别软件设计嵌入式控制系统一般的是配备简易键盘,即根据需要设3~4按键基本能满足使用要求,因此键盘控制软件也是必须的,参考下图N有建按下?YN有建按下?Y四、ADC控制软件设计END开始有建按下延时40mS等待键释放读取键值END开始ENDN转换结束?YNN-1=0?Y图3五、电路与程序六、程序源代码#includeLPC2294.htypedefunsignedintU32;//无符号32位整型变量typedefunsignedcharU8;//无符号8位整型变量//typedefsignedcharint8;//有符号8位整型变量typedefunsignedshortU16;//有符号8位整型变量#defineFpclk11059200#defineDIS_10x06//个位选通#defineDIS_20x05//十位选通#defineDIS_30x03//百位选通读取保存数据设置转换次数N启动A/D设置转换次数N启动A/D#defineKEY10x04//+#defineKEY20x02//-#defineKEY30x01//okU16cunt;U16data_dis,data_set;U8dis3=10,dis2=10,dis1=10;U8flag_dis,dis_n;U8timeout;constU8led_seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xff,0x00};//段吗:0,1,2,3,4,5,6,7,8,9all_l关显void__irqTimer0_ISR(void);voidcpu_init(void){PINSEL0=0x00;IO0DIR=0x3FF;//显示分配在P000~P010,段码P000~P007,位码P008~P010//健P016~P018//定时器0T0TC=0;T0PR=0;T0MCR=0x03;T0MR0=Fpclk/1000;//定时1mST0TCR=0x01;VICIntSelect=VICIntSelect&(~(14));VICVectCntl0=0x20|4;VICVectAddr0=(U32)Timer0_ISR;VICIntEnable=(14);}voidupdata(void){U16temp;//u8temp1,temp2,temp3;//WDT_CONTR=0x3c;if(data_dis=999){dis3=temp/100;//百位temp=temp%100;dis2=temp/10;//十位dis1=temp%10;//个位}}//======================================//Timer0_ISR//======================================void__irqTimer0_ISR(void){cunt++;if(cunt%10==0)flag_dis=1;if(timeout0)timeout--;}//======================================//display共阳极动态扫描显示//======================================display(){//WDT_CONTR=0x3c;dis_n++;switch(dis_n){case1:IO0PIN=led_seg[dis1]|DIS_18;//显示个位break;case2:IO0PIN=led_seg[dis2]|DIS_28;//显示十位break;case3:IO0PIN=led_seg[dis2]|DIS_38;//显示百位break;}if(dis_n=3)dis_n=0;}//=========================//key_do//按键接于P0.16~18//=========================voidkey_do(void){U8key,key_d;U32temp1;key=(U8)IO0PIN16;if(key&0x07!=0x07)//有按键{timeout=20;//延时20mswhile(timeout!=0);key=(U8)IO0PIN16;if(key&0x07!=0x07)//有按键key_d=key;temp1=1;while(temp1)//等待健释放{key=(U8)IO0PIN16;if(key&0x07==0x07)//temp1=0;}//??data_temp=data_dis;key_d=~key_d;switch(key_d){caseKEY1:data_dis++;//data_temp++;break;caseKEY2:data_dis--;//data_temp--;break;caseKEY3:data_set=data_dis;break;}}}//=================//MAIN//===============intmain(void){cpu_init();while(1){/*if(flag_dis){key_do();flag_dis=0;//updata();display();}*/IO0PIN=0xff;}}七、检测与调试(1)硬件调试:硬件调试是利用DVCC实验与开发系统、基本测试仪器(万用表、示波器等),检查用户系统硬件中存在的故障。硬件调试可分为静态调试与动态调试两步进行。静态调试是在用户系统未工作时的一种硬件检测。1)目测。检查外部的各种元件或者是电路是否有断点。2)用万用表测试。先用万用表复核目测中有疑问的连接点,再检测各种电源线与地线之间是否有短路现象。3)加电检测。给板加电,检测所有插座或是器件的电源端是否符合要求的值4)联机检查。只有用ARM开发系统才能完成对用户系统的调试。动态调试是在用户系统工作的情况下发现和排除用户系统硬件中存在的器件内部故障、器件连接逻辑错误等的一种硬件检查。动态调试的一般方法是由近及远、由分到合。由分到合是指首先按逻辑功能将用户系统硬件电路分为若干块,当调试电路时,与该元件无关的器件全部从用户系统中去掉,这样可以将故障范围限定在某个局部的电路上。当各块电路无故障后,将各电路逐块加入系统中,在对各块电路功能及各电路间可能存在的相互联系进行调试。由分到合的调试既告完成。由近及远是将信号流经的各器件按照距离单片机的逻辑距离进行由近及远的分层,然后分层调试。调试时,仍采用去掉无关元件的方法,逐层调试下去,就会定位故障元件了。(2)软件调试:软件调试是通过对程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。七、总结与体会本系统是以LPC2114芯片为核心部件。此次在软件上是花费时间最多的,我主要通过上网找资料,上图书馆查资料,尽可能的了解有关于这方面的知识。通过这次毕业设计,使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。使我在ARM的基本原理、及应用系统开发过程,和编程设计思路技巧的方面都有了很大一步的提高。通过本次ARM实习设计,我在老师的精心指导和严格要求下,不仅获得了丰富的理论知识,而且极大地提高了实践能力,这对我今后进一步学习有极大的帮助。