51单片机实验报告上传.docx
《51单片机实验报告上传.docx》由会员分享,可在线阅读,更多相关《51单片机实验报告上传.docx(19页珍藏版)》请在冰点文库上搜索。
![51单片机实验报告上传.docx](https://file1.bingdoc.com/fileroot1/2023-6/10/42152b8d-5011-4aa8-a373-960b5f5ee806/42152b8d-5011-4aa8-a373-960b5f5ee8061.gif)
51单片机实验报告上传
本科生实验报告
实验课程单片微机原理与应用
学院名称ZZZZZ学院
专业名称电气工程及其自动化
学生姓名ZZZZ
学生学号ZZZZZ
指导教师ZZZ
实验地点6c902
实验成绩
二〇一六年三月二〇一六年五月
实验一单片机集成开发环境应用
一实验目的
熟悉单片机集成开发软件(Keil);
掌握单片机实验板的使用;
掌握单片机P1口使用;
二实验内容
1、集成开发环境Keil介绍及开发流程
KEILuVISION4是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,是众多单片机开发软件之一,它支持众多不同公司的MCS51架构的芯片,它集编辑,编译,仿真等于一体,同时还支持,PLM(产品全生命周期管理),汇编和C语言的程序设计,它的界面和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。
以上简单介绍了KEIL51软件,要使用KEIL51软件,必需先要安装它。
KEIL51是一个商业的软件,对于我们这些普通爱好者可以到KEIL中国代理周立功公司的网站上下载一份能编译2K的DEMO版软件,基本可以满足一般的个人学习和小型应用的开发。
安装好后,让我们一起来建立一个小程序项目吧。
即使你手中还没有一块实验板,甚至没有一块单片机,不过没有关系我们可以通过KEIL软件仿真看到程序运行的结果。
首先当然是运行KEIL51软件。
运行几秒后,出现如图1-1的屏幕。
图1-1
2、建立第一个项目
点击工程菜单,选择弹出的下拉式菜单中的NewuVisionProject,如图1-2。
接着弹出一个标准Windows文件对话窗口,如图1-3。
在“文件名”中输入您的第一个C程序项目名称,“保存”文件。
这是KEILuVision4项目文件,以后我们可以直接点击此文件以打开先前做的项目。
图1-2NewProject菜单
图1-3文件窗口
3、选择所要的单片机
选择所要的单片机,这里我们选择常用的Ateml公司的AT89C51。
此时屏幕如图1-4所示。
完成上面步骤后,就可以进行程序的编写了。
4、在项目中创建新的程序文件
首先我们要在项目中创建新的程序文件或加入已经存在的程序文件。
如果您没有现成的程序,那么就要新建一个程序文件。
点击图1-5中1的新建文件的快捷按钮,在2中出现一个新的文字编辑窗口,这个操作也可以通过菜单File-New或快捷键CTRL+N来实现。
在这个窗口我们可以用c语言或者汇编语言编写程序。
5、编写程序,调试程序
可以用c语言或者汇编语言编写程序,编写好之后点击保存,并且文件后缀名是.c或者.ASM,并且在项目中添加写好的程序,如图所示,
保存好c文件后,双击源组1,找到c程序,点击添加即可。
此时再点击1键,选择Output,在CreatHEXFile前面打勾,让程序
编译生成用于芯片烧写的HEX文件。
设置好后,依次点击编译按钮,此时我们可以在最下面看到有无错误,有无警告,是否生成HEX文件。
6、下载到单片机的内部运行
选择好下载软件,用STC-ISP软件
,界面如图所示:
其中单片机型号选择STC89C52RC系列,并且点击打开程序文件,找到我们保存的HEX文件,打开之后点击下载即可。
三实验步骤
依照实验内容开始进行实验,熟悉Keil软件的使用,自行建立工程,并新建一个文件(汇编文件为.ASM扩展名,C文件为.C扩展名),编写自己的程序,再把此文件添加到工程当中,最后进行编译,如果没有错误,则可以仿真测试或者下载到单片机进行实验。
四实验程序
#include
sbitLED2=P2^2;
voidmain()
{
while
(1)
{
P2=0x03;
}
}
实验二单片机I/O口实验
一实验目的
1、熟悉单片机I/O口的特点
2、掌握单片机I/O口的编程
二实验内容
1、P1口流水灯灯程序编写(调试时连接JP3的8个跳线)
2、蜂鸣器发声程序
三实验步骤
调试时连接JP3的8个跳线。
1、蜂鸣器发声:
org0000h
ajmpmain
org0030h
main:
MOVR2,#08H
DLV1:
MOVR3,#0FAH
DLV2:
CPLP1.5
LCALLDELAY1
DJNZR3,DLV2
DJNZR2,DLV1
MOVR2,#10H
DLV3:
MOVR3,#0FAH
DLV4:
CPLP1.5
LCALLDELAY2
DJNZR3,DLV4
DJNZR2,DLV3
ajmpmain
delay1:
movr7,#00h
LLA:
DJNZR7,LLA
ret
delay2:
movr7,#128
LLB:
DJNZR7,LLB
ret
end
2、流水灯:
#include
#include
voidDelay10ms(unsignedint);
voidmain()
{
unsignedcharn;
P2=0x01;
while
(1)
{
for(n=0;n<7;n++)
{P2=_crol_(P2,1);
Delay10ms(50);
}
for(n=0;n<7;n++)
{P2=_cror_(P2,1);
Delay10ms(50);
}
}
}
voidDelay10ms(unsignedinta)
{unsignedcharb,c;
for(;a>0;a--)
for(b=38;b>0;b--)
for(c=130;c>0;c--);
}
实验三LED显示设计
一、LED显示电路
二、LED译码地址
MCS-51单片机显示部分,外接4片74LS273芯片作为4位LED显示器的静态显示接口,并行输出端分别接LED显示器的各段对应的引脚上。
在单片机应用系统中,显示器显示用静态显示显示。
三、LED显示原理
LED可分为共阳极或共阴极,各段码位和显示段码的对应关系如下图所示:
a~dp依次对应D0~D7。
共阳极或共阴极的十六进制数及空白字符与P的显示段码如下图所示,分别对地址:
8000H,9000H,A000H,B000H赋值可让LED显示出字符。
四、显示子程序
用一个数组DIG_CODE[19]数组来装显示段码,并且对地址赋值即可。
unsignedcharcodeDIG_CODE[19]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x89,0xc7,0x8c,};
XBYTE[0xb000]=A[n];
XBYTE[0xa000]=A[n];
XBYTE[0x9000]=A[n];
XBYTE[0x8000]=A[n];
五、显示子程序应用
1.显示HELL:
XBYTE[0XB000]=0X89
XBYTE[0XA000]=0X86;
XBYTE[0X9000]=0XC7;
XBYTE[0X8000]=0XC7;
2.显示P001:
XBYTE[0XB000]=0X8C;
XBYTE[0XA000]=0XC0;
XBYTE[0X9000]=0XC0;
XBYTE[0X8000]=0XF9;
3.显示P232:
XBYTE[0XB000]=0XC8;
XBYTE[0XA000]=0XA4;
XBYTE[0X9000]=0XB0;
XBYTE[0X8000]=0XC8;
4.显示----:
XBYTE[0XB000]=0XBF;
XBYTE[0XB000]=0XBF
XBYTE[0XB000]=0XBF
XBYTE[0XB000]=0XBF
实验四键盘输入实验
一、键盘电路
二、键盘译码地址
MCS-51单片机键盘部分,外接1片74LS273芯片作为扫描的输出接口,地址为:
0C000H,输入接口在74HC244对应的引脚上,地址为:
0C000H。
三、键盘原理
当给74LS273芯片赋值为0x07时,为检测键盘第一列,若为K5按下,则74HC244的1A2口的值为0,1A1,1A3,1A4口值为1。
故推出接受到的值为0x0d;反之,若74HC244接受的值为0x0d,则是K5键被按下。
当给74LS273芯片赋值为0x0b时,为检测键盘第二列,原理同第一列。
当给74LS273芯片赋值为0x0d时,为检测键盘第三列,原理同第一列。
当给74LS273芯片赋值为0x0e时,为检测键盘第四列,原理同第一列。
四、键盘子程序
voidKeyDown(void)
{
charm=0,n=0;
XBYTE[0xC000]=0x00;
m=XBYTE[0xC000];
if(m!
=0x0f)
{
Delay10ms();
XBYTE[0xC000]=0X07;
m=XBYTE[0xC000];
m=m&0x0f;
if(m!
=0x0f)
{
if(m==0X0e)KeyValue=1;
if(m==0X0d)KeyValue=5;
if(m==0X0b)KeyValue=9;
if(m==0X07)KeyValue=12;
}
XBYTE[0xC000]=0X0b;
m=XBYTE[0xC000];
m=m&0x0f;
if(m!
=0x0f)
{
if(m==0X0e)KeyValue=2;
if(m==0X0d)KeyValue=6;
if(m==0X0b)KeyValue=0;
if(m==0X07)KeyValue=13;
}
XBYTE[0xC000]=0X0d;
m=XBYTE[0xC000];
m=m&0x0f;
if(m!
=0x0f)
{
if(m==0X0e)KeyValue=3;
if(m==0X0d)KeyValue=7;
if(m==0X0b)KeyValue=10;
if(m==0X07)KeyValue=14;
}
XBYTE[0xC000]=0X0e;
m=XBYTE[0xC000];
m=m&0x0f;
if(m!
=0x0f)
{
if(m==0X0e)KeyValue=4;
if(m==0X0d)KeyValue=8;
if(m==0X0b)KeyValue=11;
if(m==0X07)KeyValue=15;
}
while((n<50)&&(XBYTE[0xC000]!
=0xf0))
{
Delay10ms();
n++;
}}
五、键盘子程序的应用
开机显示HELL,按A显示P001,按数字键则左移,按字母键则返回HELL:
while
(1)
{
KeyDown();
if(KeyValue==10)//按a的时候
{intw=0,x=0,y=0,z=0;
XBYTE[0xB000]=DIG_CODE[18];
XBYTE[0xa000]=DIG_CODE[0];
XBYTE[0x9000]=DIG_CODE[0];
XBYTE[0x8000]=DIG_CODE[1];
Delay10ms(5);
while(f>0)
{KeyDown();
if(KeyValue>=11)
f=-1;
if(KeyValue<=9)
{
w=x;x=y;y=z;z=KeyValue;
XBYTE[0xB000]=DIG_CODE[w];
XBYTE[0xa000]=DIG_CODE[x];
XBYTE[0x9000]=DIG_CODE[y];
XBYTE[0x8000]=DIG_CODE[z];
}
KeyValue=10;
f++;
Delay10ms(20);
}
KeyDown();
if(KeyValue>9)
{
XBYTE[0xB000]=DIG_CODE[16];
XBYTE[0xa000]=DIG_CODE[14];
XBYTE[0x9000]=DIG_CODE[17];
XBYTE[0x8000]=DIG_CODE[17];
}
}
学生实验心得
通过这次单片机实验,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。
创新可以是在原有的基础上进行改进,使之功能不断完善,成为真己的东西。
通过这次实验,我发现了自己的不足之处,比如动手能力还需加强,处理各种问题的能力还需加强,我将不断发展壮大自己,争取在以后的学习生活中有更好的表现。
非常感谢Z老师在本次实验中的精心指导!
学生(签名):
年月日
指导
教师
评语
成绩评定:
指导教师(签名):
年月日