嵌入式系统实验报告姓名杨秀发学号130505401055课程名称嵌入式系统课程编号050450实验地点博技楼BC-301指导教师杜隆胤实验环境单片机实验组合模块实验一嵌入式系统编程环境实验时间:2015年9月15日一、实验目的熟悉嵌入式编程环境及基本流程二、实验内容打开编程环境,编写最简单的程序(P1口点亮LED灯实现走马灯效果),编译后烧录并运行。三、实验基本原理图四、关键代码及注释(控制P1口实现走马灯效果的代码)C语言程序:#includereg52.h//52系列单片机头文件#includeintrins.h#defineuintunsignedint//宏定义#defineucharunsignedchar//uchar表示无符号字节ucharcodetable[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};ucharcodeaa[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};ucharcodebb[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};ucharcodecc[]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};ucharcodedd[]={0x7e,0x3c,0x18,0x00,0x18,0x3c,0x7e,0xff};voiddelay_ms(ints){//延时函数intx;while(s--){//延迟for(x=0;x200;x++){}}}voiddisplay(void){//显示函数inti;for(i=0;i=7;i++){//单灯左移,p1.0先亮P1=table[i];delay_ms(100);}for(i=0;i=7;i++){//单灯右移,p1.7先亮P1=aa[i];delay_ms(100);}for(i=0;i=7;i++){//灯逐个点亮,p1.0先亮P1=bb[i];delay_ms(100);}for(i=0;i=7;i++){//灯逐个熄灭,p1.7先熄灭P1=cc[i];delay_ms(100);}for(i=0;i=7;i++){//两边向中间逐个点亮再向两边逐个熄灭P1=dd[i];delay_ms(100);}}voidmain(void){//主函数循环while(1){display();}}五、心得体会(请写嵌入式编程实验与常规编程实验的不同)嵌入式编程用的最多的也是C语言,和普通的windows下的C编程不同的就是,比如应用层开发,嵌入式开发出来的应用程序最终不是要运行在PC上的,而是目标板。所以嵌入式开发就一定会有交叉编译这个环节(简单一点理解就是,在PC下编程,然后交叉编译一下,让程序能运行在PC外的其他平台上,比如ARM开发板什么的)当然现在所讲嵌入式开发和单片机开发的区别不仅仅在是否有嵌入式操作系统上,嵌入式开发所使用的嵌入式处理器(比如ARM/MIPS等)在内核体系结构、指令系统、工作模式等方面与单片机都有很大不同。实验二按键响应实验实验时间:2015年9月29日一、实验目的熟悉C51中按键的判断方法二、实验内容编写程序完成系统按键响应,如实现如下功能:1、点按S1多点亮一个led灯2、点按S2少点亮一个led灯3、点按S3熄灭所有led灯4、点按S4点亮所有led灯三、硬件原理图四、关键代码及注释#includereg52.h//52系列单片机头文件sbitS1=P3^7;//按键接口位定义sbitS2=P3^6;sbitS3=P3^5;sbitS4=P3^4;voiddelay();//声明延时函数voidon(char);//声明函数voidmain(){//主函数unsignedcharf=0xff,h=0xff,g=0xff,k=0xff;//给按键赋值charcount=0;while(1){S1=1;//S1按下f=1;if(S1)f|=0x01;if(f==0xf0){//实现按键S1加LED点亮一个count++;count=count%9;on(count);}S2=1;//S2按下h=1;if(S2)h|=0x01;if(h==0xf0){//实现按键S2减LED灭一个count--;count=count%9;on(count);}S3=1;//S3按下g=1;if(S3)g|=0x01;if(g==0xf0){//实现按键S3灭掉所有灯P1=0xff;}S4=1;//S3按下k=1;if(S4)k|=0x01;if(k==0xf0){//实现按键S4点亮所有灯P1=0x00;}delay();}}voiddelay(){//延时函数unsignedinti;for(i=0;i100;i++);}voidon(charc){//定义字符型c调用函数P1=0xffc;}五、心得体会通过这次实验,让我学会了超级终端的基本设置,并且理解了超级终端、实验台、以及电脑之间数据的联系关系,通过实际操作了解了实际终端的各个功能的作用,为今后各个实验的学习打下了基础,也对嵌入式实验有了初步的认识和了解。实验三数码管控制实验时间:2015年10月20日一、实验目的熟悉多位数码管显示原理二、实验内容编写程序,通过控制51单片机并行口实现如下操作:1、驱动数码管显示预定内容三、实验基本原理图四、关键代码及注释预定显示2016#includereg52.h//52系列单片机头文件sbitshuma0=P0^0;//数码管接口位置#defineZZP2//宏定义unsignedcharcodezihuan[16]={//字位数0xc0,0xf9,0xa4,0xB0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};voiddelay();//延时main(){//主函数chari;P0=0x00;//P0口输入低电频while(1){//循环ZZ=0xff;//P2口输入高电频P0=0xfe;//1111ZZ=zihuan[2];//第四位显示2delay();ZZ=0xff;P0=0xfd;ZZ=zihuan[0];//第三位显示0delay();ZZ=0xff;P0=0xfb;ZZ=zihuan[1];//第二位显示1delay();ZZ=0xff;P0=0xf7;ZZ=zihuan[6];//第一位显示6delay();}}voiddelay(){//延时函数unsignedinti;for(i=0;i0;i++);}五、心得体会通过这次的实验,让我的专业知识又加强了一些在完成这次实验后,让我想到可以用多个按键控制多个数码管实现加减和暂停和开始。这次实验然我认识到了,有些东西光靠理论性的是远远不够的,要把之付之实践。实验四中断编程实验时间:2015年11月10日一、实验目的理解中断概念及中断在系统编程中的运用二、实验内容利用中断(时钟中断)编程,实现:1、无源蜂鸣器的驱动2、数码管实时扫描三、关键代码及注释1、无源蜂鸣器滴滴报警声#includereg52.h//52系列单片机头文件#includeintrins.h//函数调用头文件#defineucharunsignedchar//宏定义#defineuintunsignedintucharCount1,Count2;//定义两个字符bitflag;sbitK1=P3^2;sbitK2=P3^3;sbitBEEP=P1^0;main(){P0=0X0;Count1=0x00;Count2=0x00;BEEP=1;flag=0;TMOD=0x01;TH0=0xfc;TL0=0x66;//1ms定时EA=1;ET0=1;while(1){if(K1==0){while(K1==0);TR0=1;}if(K2==0){while(K2==0);TR0=0;}}}voidTime0(void)interrupt1using0{TH0=0xfc;//1ms定时TL0=0x66;Count1++;if(Count1==100){Count2++;if(Count2==4){Count1=0;Count2=0;flag=~flag;}}if(!flag){BEEP=~BEEP;}}2、数码管实时扫描#includereg52.hsbitS1=P3^7;sbitS2=P3^6;sbitS3=P3^5;sbitS4=P3^4;sbitspeeker=P3^3;unsignedcharcodetable[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF};unsignedcharcodetable2[]={0xFE,0xFD,0xFB,0xF7};unsignedcharvram[4]={16,16,16,0};unsignedcharcodemusiclen[]={32,14,14};bitfsec=0;bitkey3=0;bitkey4=0;voidflushVram(intcount);main(){intcount=0;unsignedcharn=0,i=0;charlen;bitpause=0;ET0=1;ET1=1;EA=1;IP=0x02;TMOD=0x21;TH0=0xEC;TL0=0x78;TR0=1;while(1){if(fsec){fsec=0;if(key3){key3=0;count+=2;count%=10000;flushVram(count);}if(key4){key4=0;count+=9998;count%=10000;flushVram(count);}}}voidflushVram(intcount){inti=3;do{vram[i]=count%10;i--;count/=10;}while(i=0&&count0);while(i=0){vram[i]=16;i--;}}voidtimer0()interrupt1using1//timer05ms{staticchari=0;staticunsignedcharfs3=0xFF;staticunsignedcharfs4=0xFF;staticunsignedcharcount=0;TR0=0;TH0=0xEC;TL0=0x78;TR0=1;count++;if(count==50){count=0;fsec=1;}//扫描数码管P0=0xff;P2=table[vram[i]];P0=table2[i];i++;i%=4;//扫描按键S3、S4fs3=1;if(S3)fs3|=0x01;if(fs3==0xF0)key3=1;fs4=1;if(S4)fs4|=0x01;if(fs4==0xF0)key4=1;}四、心得体会通过这次的实验使我体会到要想综合运用所学的理论知识,提高我的设计能力,必须增加实际操作的环节。而操作能力却是我们大学生最缺乏的能力之一,也使得我想到必要的准备是以后的机会。实验五综合设计实验时间:2015年11月24日一、实验目的使用所学知识,设计实现简单的实用系统二、实验内容综合利用现有知识和硬件,设计一个简单温度测仪器的应用三、主要需实现的功能及实现方法#includereg52.h#defineucharunsignedchar#defineuintunsignedintsbitDQ=P2^0;//ds18b20与单片机连接口sbitRS=P1^0;sbitRW=P1^1;sbitEN=P1^2;unsignedcharcodestr1[]={temperature:};unsignedcharcodestr2[]={};uc