单片机原理及应用实验报告模板汇编.docx
《单片机原理及应用实验报告模板汇编.docx》由会员分享,可在线阅读,更多相关《单片机原理及应用实验报告模板汇编.docx(38页珍藏版)》请在冰豆网上搜索。
![单片机原理及应用实验报告模板汇编.docx](https://file1.bdocx.com/fileroot1/2023-2/6/595075b7-ae02-46da-92a3-e9cc3ba1102c/595075b7-ae02-46da-92a3-e9cc3ba1102c1.gif)
单片机原理及应用实验报告模板汇编
实验报告
课程名称单片机原理及应用
专业电子信息工程
班级信息1201B
学号
学生姓名
学院信息工程学院
实验报告一
实验名称
P1口实验
实验时间
2014年月日
学生学号
学生姓名
同组人员
专业班级
信息1201B
实验类型
验证性
指导老师
实验地点
1号楼614
学时
2
一、实验要求
P1口做为输出口,接8只发光二极管,编写程序,使发光二极管循环点亮。
二、实验目的
1、学习P1口的使用方法。
2、学习延时子程序的编写和使用。
三、实验说明
P1口为准双向口,P1的每一位都能独立地定义为输出线或输入线,作为输入的口线,必须向锁存器的相应位写入“1”,该位才能作为输入。
8031中所有口锁存器在复位时均置为“1”,如果后来在口锁存器写入过“0”,在需要时应写入一个“1”使它再成为一个输入。
可以用第二个实验做一下试验。
先按要求做好程序并调试成功后,可将P1口锁存器中置“0”,此时将P1做输入口,会有什么结果。
再来看一下延时程序的实现。
现常用的有两种方法,一是用定时器中断来实验,一是用指令循环来实现。
在系统时间允许的情况下可以采用后一种方法。
本实验系统晶振为6.144MHZ,则一个机器周期为约为0.2us。
现要写一个延时0.1S的程序,可大致写出如下:
DEL1:
MOVR2,#200
DEL2:
MOVR3,#126
DEL3:
DJNZR3,DEL3
DJNZR2,DEL2
RET
四、实验电路
五、实验程序
#include
voiddelay10ms(intn)
{
inti=0,j;
while(n--)
{
for(i=0;i<10;i++)
for(j=0;j<120;j++);
}
}
voidmain()
{
unsignedchari=0;
P1=0x01;
while
(1)
{
delay10ms(100);
P1=P1<<1;
if(i==8)
{
i=0;
P1=0x01;
}
i=i+1;
}
}
六、实验中遇到的问题及解决办法
指导教师批阅成绩
指导教师签字:
年月日
实验报告二
实验名称
简单I/O口扩展实验
实验时间
2014年月日
学生学号
学生姓名
同组人员
专业班级
信息1201B
实验类型
验证性
指导老师
禹定臣
实验地点
1号楼614
学时
2
一、实验要求
1、P1口做为输入口,接8个扭子开关,以实验台上74LS273做输出口,编写程序读取开关状态,将此状态,在发光二极管上显示出来。
二、实验目的
1.学习在单片机系统中扩展简单I/O接口的方法。
2.学习数据输出程序的设计方法。
3.学习模拟交通灯控制的实验方法。
三、实验说明
P1口为准双向口,P1的每一位都能独立地定义为输出线或输入线,作为输入的口线,必须向锁存器的相应位写入“1”,该位才能作为输入。
8031中所有口锁存器在复位时均置为“1”,如果后来在口锁存器写入过“0”,在需要时应写入一个“1”使它再成为一个输入。
可以用第二个实验做一下试验。
先按要求做好程序并调试成功后,可将P1口锁存器中置“0”,此时将P1做输入口,会有什么结果。
再来看一下延时程序的实现。
现常用的有两种方法,一是用定时器中断来实验,一是用指令循环来实现。
在系统时间允许的情况下可以采用后一种方法。
四、实验电路
五、实验程序#include
sbitCLK=P3^0;
voidmain()
{CLK=0;
WR=1;
while
(1)
{unsignedinttemp=8;
P2=P1;
CLK=1;
while(temp--);
CLK=0;
}
}
六、实验中遇到的问题及解决办法
指导教师批阅成绩
指导教师签字:
年月日
实验报告三
实验名称
交通灯控制实验
实验时间
2014年月日
学生学号
1234131024
学生姓名
许帅
同组人员
专业班级
信息1201B
实验类型
综合性
指导老师
禹定臣
实验地点
1号楼614
学时
2
一、实验要求
用汇编和C51编写模拟交通灯的控制程序。
二、实验目的
1.学习汇编和C51程序的编写方法。
2.学习模拟交通灯控制的实现方法。
三、实验说明
要完成本实验,首先必须了解交通路灯的亮灭规律。
假设交通灯的亮灭规律为:
初始态是两个路口的红灯全亮,之后,东西路口的红灯亮,南北路口的绿灯亮,南北方向通车,延时一段时间后,南北路口绿灯灭,黄灯开始闪烁。
闪烁若干次后,南北路口红灯亮,而同时东西路口的绿灯亮,东西方向开始通车,延时一段时间后,东西路口的绿灯灭,黄灯开始闪烁。
闪烁若干次后,再切换到南北路口方向,重复上述过程。
四、实验电路
五、实验程序
#include
unsignedcharsegdata[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsignedchars=0,q=0;
voiddelay1()
{
unsignedchari,j,k;
for(i=0;i<4;i++)
for(j=0;j<100;j++)
for(k=0;k<250;k++);
}
voiddelay2()
{unsignedcharx,y;
for(x=0;x<40;x++)
for(y=0;y<100;y++);
}
voidmain()
{
unsignedcharc;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
EX0=1;
IT0=1;
TR0=1;
P2=0x00;
P2_0=1;
P2_3=1;
for(c=0;c<6;c++)
{
delay1();
}
while
(1)
{if(s==60)
{
s=0;
}
if(s<10){
P2_5=0;
P2_0=P2_3=1;
P1=0xfe;
P0=segdata[(10-s)/10];
delay2();
P1=0xfd;
P0=segdata[(10-s)%10];
delay2();
}
elseif(s<15)
{P2_3=1;
P2_1=1;
delay2();
P2_1=0;
P1=0xfe;
P0=segdata[(15-s)/10];
delay2();
P1=0xfd;
P0=segdata[(15-s)%10];
delay2();
}
elseif(s<35)
{P2_0=0;
P2_3=1;
P2_2=1;
P1=0xfe;
P0=segdata[(35-s)/10];
delay2();
P1=0xfd;
P0=segdata[(35-s)%10];
delay2();
}
elseif(s<40)
{P2_0=1;
P2_2=0;
P2_1=0;
P2_4=1;
delay2();
P2_4=0;
P1=0xfe;
P0=segdata[(40-s)/10];
delay2();
P1=0xfd;
P0=segdata[(40-s)%10];
delay2();
}
elseif(s<60)
{P2_0=1;
P2_3=0;
P2_2=0;
P2_1=0;
P2_5=1;
P1=0xfe;
P0=segdata[(60-s)/10];
delay2();
P1=0xfd;
P0=segdata[(60-s)%10];
delay2();
}
}
}
voidint0(void)interrupt1
{q++;
//TR0=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if(q==20)
{q=0;
s++;
}
}
/*voidit0()interrupt0
{
TR0=1;
}*/
六、实验中遇到的问题及解决办法
指导教师批阅成绩
指导教师签字:
年月日
实验报告四
实验名称
外部中断实验
实验时间
2014年月日
学生学号
学生姓名
同组人员
专业班级
信息1201B
实验类型
验证性
指导老师
禹定臣
实验地点
1号楼614
学时
2
一、实验要求
在上一实验(交通灯控制实验)内容的基础上增加允许急救车优先通过的要求。
有急救车到达时,各方向交通灯信号为全红,以便让急救车通过,假定急救车通过路口的时间为10秒,急救车通过后,交通灯恢复中断前的状态。
本实验以单脉冲为中断申请,表示有急救车通过。
二、实验目的
1.学习外部中断技术的基本使用方法。
2.学习中断处理程序的编程方法。
三、实验说明
本实验中断处理程序的应用,最主要的地方是如何保护进入中断前的状态,使得中断程序执行完毕后能回到交通灯中断前的状态。
要保护的地方,除了累加器ACC、PSW外,还要注意:
一是主程序中的延时程序和中断处理程序中延时程序不能混用,本实验中,主程序中的延时用的寄存器和中断延时用的寄存器应不相同。
第二,主程序中往端口输出数据操作要先保存再输出。
四、实验电路
五、实验程序
#include
unsignedcharcodesegdata[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsignedcharn;
voiddelay(unsignedchark)
{
unsignedchari,j;
for(i=0;ifor(j=0;j<110;j++);
}
voiddxshanshuo()
{
unsignedchara;
for(a=0;a<6;a++)
{
P2=0x80;
delay(100);
P2=0x00;
delay(100);
}
}
voidnbshanshuo()
{
unsignedcharb;
for(b=0;b<6;b++)
{
P2=0x02;
delay(100);
P2=0x00;
delay(100);
}
}
voidmain()
{
unsignedcharc;
EA=1;
IT0=1;
EX0=1;
P2=0x00;
P2=0x09;
for(c=0;c<6;c++)
{
delay(100);
}
while
(1)
{
P2=0x21;
for(c=0;c<12;c++)
{
delay(100);
}
P2=0x20;
dxshanshuo();
P2=0x00;
P2=0x0c;
for(c=0;c<12;c++)
{
delay(100);
}
P2=0x04;
nbshanshuo();
P2=0x00;
}
}
voidint0(void)interrupt0
{unsignedchartemp,i;
temp=P2;
P2=0x09;
for(i=0;i<50;i++)
{delay(250);
}
P2=temp;
}
六、实验中遇到的问题及解决办法
指导教师批阅成绩
指导教师签字:
年月日
实验报告五
实验名称
定时器实验
实验时间
2014年月日
学生学号
学生姓名
同组人员
专业班级
信息1201B
实验类型
验证性
指导老师
禹定臣
实验地点
1号楼614
学时
2
一、实验要求
由AT89C51内部定时器T1,按方式1工作,即作为16位定时器使用每0.1秒钟T1溢出中断一次。
P1口的P1.1—P1.7分别接八个发光二极管。
要求编写程序模拟一时序控制装置。
开机后第一秒钟L1、L3亮,第二秒钟L2、L4亮,第三秒钟L5、L7亮,第四秒钟L6、L8亮,第五秒钟L1、L3、L5、L7亮,第六秒钟L2、L4、L6、L8亮,第七秒钟八个二极管全亮,第八秒钟八个二极管全灭,以后又从头开始,L1、L3亮,然后L2、L4亮,……一直循环下去。
二、实验目的
1.学习51单片机内部定时/计数器的使用和编程方法。
2.进一步掌握中断处理程序的编程方法。
三、实验说明
1、定时常数的确定
定时器/计数器的输入脉冲周期与机器周期一样,为振荡器频率的1/12。
本实验中时钟频率为6.144MHZ,现要采用中断方法来实现1秒延时,要在定时器1中设置一个时间常数,使其每隔0.1S产生一次中断,CPU响应中断后R0中计数值减一,令(R0)=0AH,即可实现1S延时。
时间常数可按下法确定:
机器周期=12÷6.144×106=1.9531×10-6S,需设初值X,则(216-X)×1.9531×10-6=0.1
X=14336
化为十六进制:
X=3800H,故初始值TH1=38H,TL1=00H
2、初始化程序
包括定时器初始化和中断系统初始化,主要是对IP、IE、TCON、TMOD的相应位进行正确的设置,并将时间常数送入定时器中。
由于只有定时器中断,IP不必设置。
注意一点,定时器1初始化时建议用下述指令:
ANLTMOD,#0FH
ORLTMOD,#10H
而不要用如下指令:
MOVTMOD,#10H
否则定时器0被屏蔽,可能会影响串行口波特率,使程序不能执行。
3、设计中断服务程序和主程序
中断服务程序要将时间常数重新送入定时器中,为下一次中断做准备。
主程序则用来控制发光二极管按要求顺序亮灭。
四、实验电路
五、实验程序
#include
#defineucharunsignedchar
#defineuintunsignedint
uchara;
voiddelay()
{uchari,j;
for(i=0;i<20;i++)
for(j=0;j<110;j++);
}
voidmain()
{P1=0xff;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
EA=1;
TR0=1;
while
(1)
{
if(a==1)
{P1=0xfa;
delay();
}
if(a==2)
{P1=0xf5;
delay();}
if(a==3)
{P1=0xaf;
delay();
}
if(a==4)
{P1=0x5f;
delay();
}
if(a==5)
{P1=0xff;
delay();
a=0;
}
}
}
voidint0()interrupt1
{ucharx;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
x++;
if(x==20)
{x=0;
a++;
}
}
六、实验中遇到的问题及解决办法
指导教师批阅成绩
指导教师签字:
年月日
实验报告六
实验名称
8255A可编程并行接口实验
实验时间
2014年月日
学生学号
学生姓名
同组人员
专业班级
信息1201B
实验类型
综合性
指导老师
禹定臣
实验地点
1号楼614
学时
2
一、实验要求
利用8255A可编程并行接口芯片,B口作为输入口接8个开关,A口作为输出口接8只发光二极管,开关控制相应发光二极管。
二、实验目的
1.了解8255A芯片的结构及编程方法。
2.掌握通过8255A读取开关数据的方法。
三、实验说明
先根据电路设计确定各端口的地址,向控制口写入方式控制字,设置好各端口的工作方式,实验中A、B、C都应工作在方式0,B口输入,A口输出。
方式字为82H。
四、实验电路
五、实验程序
#include
#include
#defineCOMXBYTE[0xbfff]
#definePAXBYTE[0xb3ff]
#definePBXBYTE[0xb7ff]
voidmain()
{unsignedchartemp;
PB=0xff;
COM=0x82;
while
(1)
{temp=PB;
PA=temp;
}
}
六、实验中遇到的问题及解决办法
指导教师批阅成绩
指导教师签字:
年月日
实验报告七
实验名称
数码显示实验
实验时间
2014年月日
学生学号
学生姓名
同组人员
专业班级
信息1201B
实验类型
综合性
指导老师
禹定臣
实验地点
1号楼614
学时
2
一、实验要求
用共阳极7段显示器显示按键的键值,要求用74LS164做为显示接口,用矩阵式键盘,至少识别16个按键,键值能在7段显示上显示。
二、实验目的
1.理解LED七段数码管的显示控制原理。
2.掌握数码管与单片机的接口技术,能够编写数码管显示驱动程序。
3.熟悉接口程序调试方法。
三、实验说明
用74LS164作为显示接口,单片机串行口工作在方式0。
可将共阳极7段显示器的段码放在数组中,根据键值查数组,通过串口送出段码并显示。
四、实验电路
五、实验程序
#include
unsignedcharcodesegdata[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsignedchara,key;
unsignedchartemp;
unsignedchari,j,k;
voiddelay(unsignedcharz)
{while(z--)
{
for(i=0;i<10;i++)
for(j=0;j<250;j++);
}
}
voidkeysel()
{unsignedm,n;
temp=0x0f;
P1=temp;
if(P1!
=temp)
{delay
(2);
if(P1!
=temp)
{m=P1&temp;
temp=~temp;
P1=temp;
n=P1&temp;
key=m|n;
switch(key)
{
case0xee:
key=0;
break;
case0xde:
key=1;
break;
case0xbe:
key=2;
break;
case0x7e:
key=3;
break;
case0xed:
key=4;
break;
case0xdd:
key=5;
break;
case0xbd:
key=6;
break;
case0x7d:
key=7;
break;
case0xeb:
key=8;
break;
case0xdb:
key=9;
break;
case0xbb:
key=10;
break;
case0x7b:
key=11;
break;
case0xe7:
key=12;
break;
case0xd7:
key=13;
break;
case0xb7:
key=14;
break;
case0x77:
key=15;
break;
default:
break;
}
}
}
}
voidmain()
{SCON=0x00;
EA=1;
ES=1;
key=0;
a=segdata[key];
SBUF=a;
P0=0x00;
while
(1)
{keysel();
P1=segdata[key];
SBUF=a;
P0=0x00;
}
}
voidoutput()interrupt4
{if(TI)
{P0=0x01;
a=segdata[key];
SBUF=a;
delay(10);
P0=0x00;
}
TI=0;
}
六、实验中遇到的问题及解决办法
指导教师批阅成绩
指导教师签字:
年月日
实验报告八
实验名称
液晶显示屏1602显示实验
实验时间
2014年月日
学生学号
学生姓名
同组人员
专业班级
信息1201B
实验类型
综合性
指导老师
禹定臣
实验地点
1号楼614
学时
2
一、实验要求
用Protues设计一LCM1602液晶显示接口电路。
要求利用P0口接LCM1602液晶的数据口,P2.0~P2.2做LCM1602液晶的控制信号输入端。
编写程序,实现字符串的显示。
二、实验目的
1.掌握LCM1602液晶模块显示西文的原理及使用方法。
2.掌握8位数据模式驱动LCM1602液晶的C语言编程方法。
3.掌握用LCM1602液晶模块显示字符的C语言编程方法。
三、实验说明
液晶显示屏(LCD,LiquidCrystalDisplay)主要用于显示文本及图形信息。
液晶显示屏具有轻薄、体积小、耗电量低、无辐射危险、平面直角显示以及影像稳定不闪烁等特点;因此,在许多电子应用系统中,常使用液晶显示屏作为人机界面。
本实验采用的1602液晶模块是2行16个