专业:计算机科学与技术学号:姓名:单片机原理实验报告实验1计数显示器【实验目的】熟悉Proteus仿真软件,掌握单片机原理图的绘图方法【实验内容】(1)熟悉Proteus仿真软件,了解软件的结构组成与功能(2)学习ISIS模块的使用方法,学会设置图纸、选元件、画导线、修改属性等基本操作(3)学会可执行文件加载及程序仿真运行方法(4)理解Proteus在单片机开发中的作用,完成单片机电路原理图的绘制【实验步骤】(1)观察Proteus软件的菜单、工具栏、对话框等基本结构(2)在Proteus中绘制电路原理图,按照表A.1将元件添加到编辑环境中(3)在Proteus中加载程序,观察仿真结果,检测电路图绘制的正确性表A.1CategoryReferenceValueMicroprocessorICsU180C51MiscellaneousX1CRYSTALCapacitorsC1,C2/1nFCAPCapacitorsC3/22uFCAP-ELECResistorsR2~R8/100RESResistorsR1/1000RESOptoelectronicsLED1,LED27SEG-COM-CAT-GRNSwitches&RelaysBUTBUTTON【实验原理图】【实验源程序】#includereg51.hsbitP3_7=P3^7;unsignedcharx1=0;x2=0;unsignedcharcount=0;unsignedcharidatabuf[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};voiddelay(inttime){intk,j;for(;time0;time--)for(k=200;k0;k--)for(j=500;j0;j--);}voidinit(){P0=buf[x1];delay(10);P2=buf[x2];delay(10);}voidmain(){init();while(1){x1=count/10;x2=count%10;P0=buf[x1];delay(10);P2=buf[x2];delay(10);if(P3_7==0)//{delay(10);while(!P3_7);if(count==99)count=0;elsecount=count+1;}}}【实验结果】说明该计数器的功能是,按下按下K1后,数码管LED1和LED2会显示出按键的按下次数,LED1表示个位,LED2表示十位。当计数器达到99后再次按压K1按键,显示值从0重新开始。实验2指示灯开关控制器【实验目的】学习汇编语言的编程与调试方法【实验内容】(1)熟悉Proteus仿真软件,了解软件的结构组成与功能(2)学习汇编语言的程序设计方法(3)学会在ISIS模块中进行汇编程序录入、编译和调试(4)理解单片机程序控制原理,实现指示灯/开关控制器的预期功能【实验步骤】(1)在ISIS中绘制电路原理图,并把对应元件添加到编辑环境中(2)在ISIS中编写汇编语言程序(3)利用ISIS的汇编调试功能检查程序的语法和逻辑错误(4)观察仿真结果,检测程序与电路的正确性【实验原理图】【实验源程序】#includereg51.hvoiddelay(inttime){intk,j;for(;time0;time--){for(k=100;k0;j--)for(j=500;j0;j--);}}voidinit(){P1=0x00;delay(20);P1=0xff;delay(20);P1=0x00;delay(20);P1=0xff;delay(20);P1=0x00;delay(20);P1=0xff;delay(20);}voidmain(){init();P1=0x00;delay(20);P1=0xff;delay(20);while(1){P1=P2;}}【实验结果】说明点击运行后,8个发光二极管一起闪烁3次。然后根据开关K2K4K6K8控制对应发光二极管的亮灯状态,当按下K1K3K5K7中的其中一个是,该开关对应的二极管亮,除K2以外,K2不亮的原因我也不明白,代码没有问题,电路图也没有问题,我觉得是BUG。实验3指示灯循环控制【实验目的】熟悉uVision3编译软件,掌握C51编程与调试方法【实验内容】(1)熟悉uVision3编译软件,了解软件的结构组成与功能(2)学习C51语言的程序设计方法(3)学会在uVision3中进行C51程序录入、编译和调试(4)理解Proteus与Keil联合的仿真原理,实现LED指示灯循环控制功能【实验步骤】(1)在ISIS中绘制电路原理图,将相应元件添加到编辑环境中(2)在uVision3中编写C51程序(3)利用uVision3的编译调试功能检查程序的语法和逻辑错误(4)下载可执行文件,在Proteus中观察仿真结果,检验程序的正确性【实验原理图】【实验源程序】#includereg51.hvoiddelay(inttime){intk;for(;time0;time--)for(k=1000;k0;k--);}voidinit(){P1=0x00;delay(100);P1=0xff;delay(100);P1=0x00;delay(100);P1=0xff;delay(100);P1=0x00;delay(100);P1=0xff;delay(100);}voidmain(){inti,j;init();while(1){unsignedchark=0x01;for(i=7;i0;i--){P1=~k;k=k*2;delay(100);}for(j=8;j0;j--){P1=~k;k=k/2;delay(100);}}}【实验结果】说明程序开始后,8只发光二极管依次从上到下闪烁,然后再从下到上闪烁。实验4指示灯中断控制【实验目的】掌握行列式键盘的工作原理,熟悉C51语言的编程与调试【实验内容】(1)学习使用Proteus软件,掌握原理图绘图方法(2)学习KeilC软件,掌握C51程序编写与调试方法(3)理解行列式键盘的扫描工作原理,完成扫描程序的编写与调试(4)实现行列式键盘扫描中断控制功能【实验步骤】(5)在Proteus中绘制电路原理图,将相应的元件添加到编辑环境中(6)在Keil中编写C51程序,并使之编译通过(7)在Proteus中加载程序,观察仿真结果【实验原理图】【实验源程序】#includereg51.hsbitP3_7=P3^7;unsignedcharx1=0;x2=0;unsignedcharcount=0;unsignedcharidatabuf[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71};charkey_buf[]={0x11,0x21,0x41,0x81,0x12,0x22,0x42,0x82,0x14,0x24,0x44,0x84,0x18,0x28,0x48,0x88};voidinit();voidkey_scan();charkey=0,k=0;bitint_flag;voiddelay(inttime){intk,j;for(;time0;time--)for(k=20;k0;k--)for(j=500;j0;j--);}voidmain(){init();while(1){P2=0x0f;P0=buf[k];}}voidinit(){IE=0xff;TCON=0x05;int_flag=0;P2=0x0f;P0=buf[0];}voidkey_scan()interrupt1{chari=16;charkeycode=0;delay(1);while(INT0==1)return;EX0=0;keycode=P2&0xf0;P2=0xf0;keycode=0x0f&P2|keycode;for(;i0;i--){if(key_buf[i]==keycode){k=i;EX0=1;return;}}EX0=1;}【实验结果】说明按下相应的1~F按键在LED的显示屏中会显示相应的按键对应的数字实验5电子秒表显示器【实验目的】掌握中断和定时/计数器工作原理,熟悉C51编程与调试方法【实验内容】(1)学习使用Proteus软件,掌握原理绘制图的方法(2)学习KeilC软件,掌握C51程序编写与调试方法(3)理解定时器的工作原理,完成定时中断程序的编写与调试(4)深入理解定时中断的编程【实验步骤】(8)在Proteus中绘制电路原理图,将相应的元件添加到编辑环境中(9)在Keil中编写C51程序,并使之编译通过(10)在Proteus中加载程序,观察仿真结果【实验原理图】【实验源程序】#includereg51.hunsignedcharmin=0,sec=0,count=0;unsignedcharidatabuf[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};voidinit();voidisr_timer0();voiddelay(inttime){intk,j;for(;time0;time--)for(k=20;k0;k--)for(j=50;j0;j--);}voidmain(){init();while(1){P2=0xfe;P0=buf[min/10];delay(1);P2=0xfd;P0=buf[min%10];delay(1);P2=0xfb;P0=buf[sec/10];delay(1);P2=0xf7;P0=buf[sec%10];delay(1);}}voidinit(){TMOD=0x01;TH0=0x3c;TL0=0xb0;ET0=1;EA=1;TR0=1;P2=0xf0;P0=0xff;delay(1);}voidisr_timer0()interrupt1{P1=0x0f;if(count==20){count=0;if(sec==59){P1=!P1;sec=0;if(min==59)min=0;elsemin=min+1;}elsesec=sec+1;}else{count=count+1;}TH0=0x3c;TL0=0xb0;}【实验结果】说明数码管的初始值为00,每过一秒,秒计数器加一;秒计数器到60时清零,并从00重新开始,当秒计时器清0时,分计时器加一,由此实现数字时钟。实验6单片机双机通信系统设计【实验目的】掌握串行口通信工作原理,熟悉C51编程方法,了解PCB设计过程【实验内容】(1)学习使用Proteus软件,掌握原理图绘图方法(2)学习使用KeilC软件,掌握C51程序编写与调试方法(3)理解串行口通信的工作原理,完成串行口通信程序的编写与调试(4)学习使用ARES模块,了解PCB设计方法【实验步骤】(1)在Proteus中绘制电路原理图,将相应元件添加到编辑环境中(2)在Keil中编写C51程序,并使之编译通过(3)在Proteus中加载程序,观察仿真结果【实验原理图】【实验源程序】#includereg51.hcharled_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71};voiddelay(inttime){intk,j;for(;time0;time--)for(k=20;k0;k--)for(j=500;j0;j--);}voidmain(){charcounter=0;chartext;P1=0x3f;TMOD=0x20;TH1=0xfd;TL1=0xfd;PCON=0x00;TR1=1;SCON=0x50;while(1){t