《单片机原理及应用》实验报告2017/2018 学年第1 学期系别计算机学院专业软件工程班级17软件工程班姓名XXXXXX学号8888888888授课老师******实验一:流水灯实验1.实验目的(1)学习编译和仿真环境使用(2)学习P3口的使用方法(3)学习延时子程序的编写2实验内容(1)通过对P3口地址的操作控制8位LED流水点亮,从而认识单片机的接口;(2)通过改变并行口输出电平控制LED灯的点亮与否,通过延时程序控制亮灯时间。
3.实验运行结果图4.源代码//流水灯实验#include<reg51.h> //包含单片机寄存器的头文件sfr x=0xb0; //P3口在存储器中的地址是b0H,通过sfr可定义8051内核单片机//的所有内部8位特殊功能寄存器,对地址x的操作也就是对P1口的操作/****************************************函数功能:延时一段时间*****************************************/void delay(void){unsigned char i,j;for(i=0;i<255i++)for(j=0;j<255j++); //利用循环等待若干机器周期,从而延时一段时间 }/*****************************************函数功能:主函数******************************************/void main(void){while(1){x=0xfe; //第一个灯亮delay(); //调用延时函数x=0xfd; //第二个灯亮delay(); //调用延时函数x=0xfb; //第三个灯亮delay(); //调用延时函数x=0xf7; //第四个灯亮delay(); //调用延时函数x=0xef; //第五个灯亮delay(); //调用延时函数x=0xdf; //第六个灯亮delay(); //调用延时函数x=0xbf; //第七个灯亮delay(); //调用延时函数x=0x7f; //第八个灯亮delay(); //调用延时函数}}实验二:中断实验1.实验目的(1)熟悉51单片机中断初始化编程方法。
(2)掌握51单片机外部中断源的设计使用。
(3)中断处理应用程序的设计与调试技巧。
2.实验内容通过对P3.2、P3.3引脚的电平控制,实现外部中断处理,从而控制输出口P1的输出效果变化。
3.实验运行结果图4.源代码/用外中断0的中断方式进行数据采集和处理#include<reg51.h> //包含51单片机寄存器定义的头文件sbit S=P3^2; //将S位定义为P3.2,/*******************************************函数功能:主函数******************************************/void main(void){EA=1; //开放总中断EX0=1; //允许使用外中断IT0=1; //选择负跳变来触发外中断P1=0xff;while(1); //无限循环,防止程序跑飞}/**************************************************************函数功能:外中断T0的中断服务程序**************************************************************/void int0(void) interrupt 0 using 0 //外中断0的中断编号为0{P1=~P1; //每产生一次中断请求,P1取反一次。
}//用外中断0的中断方式进行数据采集和处理#include<reg51.h> //包含51单片机寄存器定义的头文件#define uchar unsigned charvoid Delay(unsigned int i){uchar j;for(;i>0;i--)for(j=0;j<125;j++){;}}//sbit S=P3^2; //将S位定义为P3.2,/*******************************************函数功能:主函数******************************************/void main(void){uchar display[9]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsigned int a;while(1){EA=1; //开放总中断EX0=1; //允许使用外中断EX1=1;IT0=1; //选择负跳变来触发外中断IT1=1;IP=0;for(a=0;a<9;a++){Delay(500);P1=display[a];}}}/**************************************************************函数功能:外中断T0的中断服务程序**************************************************************/ void int0_isr(void) interrupt 0 using 1 //外中断0的中断编号为1 {uchar n;for(n=0;n<10;n++){p1=0x0f;Delay(500);P1=0xf0;Delay(500);}}void int1_isr (void) interrupt 2 using 2{uchar n;for(n=0;n<10;n++){p1=0xff;Delay(500);P1=0;Delay(500);}}实验三:定时器/计数器实验1.实验目的(1)熟悉51单片机中断初始化编程方法(2)熟悉51单片机定时计数器的初始化编程方法(3)掌握定时计数器的应用2.实验内容通过使用定时器T0的中断来控制P2.0引脚的的LED的灯闪烁,要求闪烁时间2S,既亮1 S,灭1 S。
3.实验运行结果图M1M2ABCDX1CRYSTALC11uFXTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51R1330RR2330RM1M2VCCC233PC333PR310kD1LED-YELLOWD2LED-YELLOW4.源代码#include<reg51.h> // 包含51单片机寄存器定义的头文件sbit D1=P1^4; //将D1位定义为P1.4引脚unsigned char Countor; //设置全局变量,储存定时器T0中断次数/************************************************************** 函数功能:主函数**************************************************************/ void main(void)EA=1; //开总中断ET0=1; //定时器T0中断允许TMOD=0x01; //使用定时器T0的模式2TH0=(65536-15536)/256; //定时器T0的高8位赋初值TL0=(65536-15536)%256; //定时器T0的高8位赋初值TR0=1; //启动定时器T0Countor=0; //从0开始累计中断次数while(1)//无限循环等待中断;}/**************************************************************函数功能:定时器T0的中断服务程序**************************************************************/void Time0(void) interrupt 1 using 0 //"interrupt"声明函数为中断服务函数//其后的1为定时器T0的中断编号;0表示使用第0组工作寄存器{Countor++; //中断次数自加1if(Countor==20) //若累计满20次,即计时满1s{D1=~D1; //按位取反操作,将P2.0引脚输出电平取反Countor=0; //将Countor清0,重新从0开始计数}TH0=(65536-15536)/256; //定时器T0的高8位重新赋初值TL0=(65536-15536)%256; //定时器T0的高8位重新赋初值}实验四:串行口实验1.实验目的(1)掌握单片机的串行口的工作原理(2)掌握单片机串行口收发数据的方法2.实验内容本实验要求单片机U1通过其串行口TXD向单片机U2发送数据。
单片机U1的P1口接8个开关,U2的P1口接8个发光二极管。
U1设置为只能发送不能接收,U1读入P1口的8个开关状态后,通过串行口发送到U2,U2将接收到的数据送入P1口,由P1口上连接的8个发光二极管显示8个开关的状态。
3.实验运行结果图4.源代码/*********发送单片机的发送程序***********/#include<reg51.h> //包含寄存器的头文件/*********向PC发送一个字节数据**************/void Send(unsigned char date){SBUF=date;while(TI==0);TI=0;}/*********延时约150ms*********/void delay(void){unsigned char m,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}/*******函数功能:主函数*********/void main(void){unsigned char temp;TMOD=0x20; //定时器T1工作于方式2SCON=0x40; //串口工作方式1PCON=0x00; //波特率9600TH1=0xfd; //根据规定给定时器T1赋初值TL1=0xfd; //根据规定给定时器T1赋初值TR1=1; //启动定时器T1P1=0xff; //读取P1端口数据while(1){temp=P1;Send(temp); //发送数据idelay(); //50ms发送一次检测数据}}/**********接收单片机的接收程序***********/#include<reg51.h> //包含单片机寄存器的头文件/**接收一个字节数据******/unsigned char Receive(void){unsigned char date;while(RI==0) ; //只要接收中断标志位RI没有被置“1” //等待,直至接收完毕(RI=1)RI=0; //为了接收下一帧数据,需将RI清0date=SBUF; //将接收缓冲器中的数据存于dat return date;}/*****主函数*******/void main(void){TMOD=0x20; //定时器T1工作于方式2SCON=0x50; //SCON=0101 0000B,串口工作方式1,REN=1 PCON=0x00; //PCON=0000 0000B,波特率9600TH1=0xfd; //根据规定给定时器T1赋初值TL1=0xfd; //根据规定给定时器T1赋初值TR1=1; //启动定时器T1REN=1; //允许接收while(1){P1=Receive(); //将接收到的数据送P1口显示}}实验五:输入接口实验1.实验目的(1)掌握共阴极、共阳极LED的使用方法(2)掌握矩阵键盘输入扫描和识别程序编写2.实验内容设计一个4X4的矩阵键盘,键盘的号码0~15,要求编写出一个键盘输入扫描程序,要求单片机能根据键盘排列顺序,能将按下去键盘号正确识别出来,并采用两个数码管分别键盘号码的个位和十位。