实验报告册课程名称:单片机原理与应用B指导老师:xxx班级:xxx姓名:xxx学号:xxx学期:20 —20 学年第学期南京农业大学工学院教务处印实验目录实验一:指示灯/开关控制器实验二:指示灯循环控制实验三:指示灯/数码管的中断控制实验四:电子秒表显示器实验五:双机通信姓名:学号:班级:成绩:实验名称:指示灯/开关控制器一、实验目的:学习51单片机I/O口基本输入/输出功能,掌握C语言的编程与调试方法。
二、实验原理:实验电路原理图如图所示,图中输入电路由外接在P1口的8只拨动开关组成;输入电路由外接在P2口的8只低电平驱动的发光二极管组成。
此外,还包括时钟电路、复位电路和片选电路。
在编程软件的配合下,要求实现如下指示灯/开关控制功能:程序启动后,8只发光二极管先整体闪烁3次(即亮→暗→亮→暗→亮→暗,间隔时间以肉眼可观察到为准),然后根据开关状态控制对应发光二极管的亮灯状态,即开关闭合相应灯亮,开关断开相应灯灭,直至停止程序运行。
三、软件编程原理为;(1)8只发光二极管整体闪烁3次亮灯:向P2口送入数值0;灭灯:向P2口送入数值0FFH;闪烁3次:循环3次;闪烁快慢:由软件延时时间决定。
(2)根据开关状态控制灯亮或灯灭开关控制灯:将P1口(即开关状态)内容送入P2口;无限持续:无条件循环。
四、实验结果图:灯泡闪烁:按下按键1、3、5、7:经检验,其余按键按下时亦符合题目要求。
五、实验程序:#include"reg51.h"void delay(unsigned char time){unsigned int j=15000;for(;time>0;time--)for(;j>0;j--);}void main(){key,char i;for(i=0;i<3;i++){ P2=0x00;delay(500);P2=0xff;delay(500)}while(1){ P2=P3;}姓名:学号:班级:成绩:实验名称:指示灯循环控制一、实验目的:熟悉μVision4编译软件,掌握C51编程与调试方法。
二、实验原理:实验电路图如图所示,图中8只LED指示灯接于P0口,且都接有上拉电阻。
时钟电路、复位电路、片选电路与前面的实验电路相同。
在编程软件的配合下,要求实现如下功能:8只发光二极管做循环点亮控制,且亮灯顺序为D1→D2→D3→···→D8→D7→···→D1,无限循环,两次亮灯的时间间隔约为0.5s。
软件编程原理为:首先使P0.0←1,其余端口←0,这样可使D1灯亮,其余灯灭;软件延时0.5s后,使P0口整体左移1位,得到P0.1←1,其余端口←0,这样可使D2灯亮其余灯灭;照此思路P0整体左移7次,再右移7次,如此无限往复即刻实现上述功能。
三、实验结果图:····················经检验,其余指示灯循环正常四、实验程序:#include"reg51.h"unsigned char led[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; void delay(unsigned char time){unsigned int j=15000;for(;time>0;time--)for(;j>0;j--);}void main(){char i;while(1){for(i=0;i<=7;i++){ P0=led[i];delay(50);}for(i=6;i>=1;i--){P0=led[i];delay(500);}}}姓名:学号:班级:成绩:实验名称:指示灯/数码管的中断控制一、实验目的:掌握外部中断原理,学习中断编程与程序调试方法。
二、实验原理:实验原理图如图所示,图中按键K1和K2分别接于P3.2和P3.3,发光二极管D1接于P0.4,共阴极数码管LED1接于P2口。
时钟电路、复位电路、片选电路忽略。
在编程软件的配合下,要求实现如下功能:程序启动后,D1处于熄灯、LED1处于黑屏状态;单击K1,可使D1亮灯状态反转一次;单击K2,可使LED1显示值加1,并按十六进制数显示,达到F 后重新从1开始。
软件编程原理为:K1和K2的按键动作分别作为0INT 和1INT 的中断请求,在中断函数中进行指示灯和数码管的信息处理。
初始化后,主函数处于无限循环状态,等待中断请求。
三、实验结果图:四、实验程序:#include<reg51.h>sbit P0_4=P0^4;unsigned char count=0;unsigned charled_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x 71};void main(){ P2=0x00;P0_4=0;EA=1;EX1=EX0=1;IT1=IT0=1;while(1);}void INT_OSVR()interrupt 0{ P0_4=!P0_4;}void INNT_1SVR()interrupt 2{ count++;if(count==16) count=1;P2=led_mod[count]; }姓名:学号:班级:成绩:实验名称:电子秒表显示器一、实验目的:掌握中断和定时/计数器工作原理,熟悉C51编程与调试方法。
二、实验原理:实验电路原理图如图所示,该电路图与实验1基本相同,不再赘述。
在编程软件配合下,要求实验如下功能:数码管的初始显示值为“00”;当1s产生时,秒计数器加1;秒计数到60时清0,并从“00”开始,如此周而复始进行。
软件编程原理为:采用T0定时方式1中断法编程,其中1s定时采用20次50ms定时中断的方案实现。
三、实验结果图:四、实验程序:#include<reg51.h>unsigned char count=0;unsigned char s=0;unsigned char led_mod[10]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; timer0() interrupt 1{ count++;if(count==20){ count=0;s++;}if(s==60)s=0;P0=led_mod[s/10];P2=led_mod[s%10];TH0=0x3c;TL0=0xb0;}main(){TMOD=0x01;TH0=0x3c;TL0=0xb0;P0=led_mod[s/10];P2=led_mod[s%10];ET0=1;EA=1;TR0=1;while(1);}姓名:学号:班级:成绩:实验名称:双机通信一、实验目的掌握串行口通信工作原理。
二、实验原理实验的电路原理图如图所示,图中1#机的发送线与2#机的接收线相连,1#机的接收线与2#机的发送线相连,共阴极BCD数码管BCD_LED1和BCD_LED2分别接各机的P2口,两机共地(默认),晶振为11.0592MHz,波特率为2400bps,串口方式1。
实现功能为:通信中增加奇偶校验功能,即甲机在循环发送数据(0~F)的同时发送相应奇偶校验码,乙机接收后先进行奇偶校验。
若结果无误,在向甲机返回的接收值中使可编程位置1;若结果有误,则使可编程位清0。
甲机根据返回值中的可编程位作出发送新数据或重发当前数据的抉择。
甲、乙两机都在各自BCD数码管上显示当前数据。
三、软件编程原理1#采用查寻法编程,根据RI和TI标志的软件查询结果完成收发过程;2#机采用中断法编程,根据RI和TI的中断请求,在中断函数中完成收发过程。
实验原理图:四、实验结果图:五、实验程序:U1:#include<reg51.h>#define uchar unsigned charCharcodemap[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x7 9,0x71};void delay(unsigned int time){unsigned int j=0;for(;time>0;time--)for(j=0;j<125;j++);}void main(void){unsigned char counter=0;P2=0x3f;TMOD=0x20;TH1=0xf4;TL1=0xf4;PCON=0x00;TR1=1;SCON=0x50;while(1){ACC=counter;TB8=P;SBUF=counter;while(TI==0);TI=0;while(RI==0);RI=0;if(RB8==1){P2=map[counter];if(++counter>15) counter=0;delay(500);}}}U2:#include<reg51.h>#define uchar unsigned charcharcodemap[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e ,0x79,0x71};void main(void){P2=0x3f;TMOD=0x20;TH1=0xf4;TL1=0xf4;PCON=0x00;TR1=1;SCON=0x50;ES=1;EA=1;while(1);}void receive(void) interrupt 4{unsigned char receiv;while(RI==1){RI=0;receiv=SBUF;ACC=receiv;if(P!=RB8)TB8=1;else TB8=0;SBUF=receiv;while(TI==0);TI=0;P2=map[receiv];}}。