本科单片机原理实验报告.docx
- 文档编号:29398502
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:22
- 大小:22.83KB
本科单片机原理实验报告.docx
《本科单片机原理实验报告.docx》由会员分享,可在线阅读,更多相关《本科单片机原理实验报告.docx(22页珍藏版)》请在冰豆网上搜索。
本科单片机原理实验报告
.
实验报告
课程名称单片机原理及应用
开课学期2015年秋
班级
姓名
学号
实验目录
1、Keil开发环境介绍
2、单片机控制单灯亮灭
3、单片机控制流水灯
4、单片机定时器实验
5、单片机中断实验一
6、单片机中断实验二
7、单片机键盘实验一
8、单片机键盘实验二
9、单片机串口通信实验
10、
桂林航天工业学院学生实验报告
实验名称
单片机实验原理及应用
学生姓名
学号
专业班级
实验心得:
通过本阶段的实验,让我体会到了单片机的强大,增强了我学习单片机的乐趣。
这些实验由简到难,从刚开始对keil软件的了解,自己建立一个工程,并写下对单灯亮灭的程序,下载到单片机上实现了功能,此时内心是非常激动的,因为迈出了学习单片机的第一步。
最后通过不断的实验的学习,对单片机的IO口控制、中断、定时器与计数器的应用,键盘扫描、LED循环闪烁、数码管的静态和动态显示以及I2C串口通行有了进一步的了解和体会。
自己也深切体会到,今后要不断的学习,才能正真的掌握单片机。
实验一、keil开发环境介绍
一、实验目的
(1)熟悉keil软件的基本操作
(2)建立第一个单片机工程
二、实验器材
(1)C51开发板一块
(2)电脑一台
三、实验原理
单片机Keil集成开发环境简述 Kiel软件是目前比较流行的、用于开发51 系列单片机的软件。
该软件提供了包括c编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境uVisionIDE, 将这些部分组合在一起。
通过KIEL软件,可以对C语言或宏汇编语言源程序
进行汇编,生成.HEX文件,对程序进行调试。
四、实验操作方法和步骤
1、熟悉keil软件的基本菜单,了解一些常用按键的功能
2、建立工程:
双击桌面图标keil→单击project→选择newuVisionproject→选择AT89C52型号单片机→确定
3、单击file→new→保存(文件后缀是.c的文本)→开始编程
五、实验总结
熟悉了keil软件的菜单界面以及基本操作,成功建立了第一个C51单片机工程,编写了第一个单片机c程序。
实验二、单片机控制单灯亮灭
一、实验目的
(1)熟悉keil软件的基本操作
(2)通过编写简单程序实现单灯的亮灭
(3)了解单片机高低电平的控制方式
(4)熟悉程序烧录软件的使用
二、实验器材
(1)C51开发板一块
(2)电脑一台
三、实验原理
LED发光二极管具有单向导通性,通过赋高电平亮,低电平灭,而实验开发板中由于LED正向接高电平,所以试验中LED低电平亮,即0亮1灭,然后通过延时,0与1交替出现,从而实现LED灯的闪烁。
4、实验操作方法和步骤
1、建立工程:
双击桌面图标keil→单击project→选择newuVisionproject→选择AT89C52型号单片机→确定
2、单击file→new→保存(文件后缀是.c的文本)→开始编程
3,单击
编译、运行程序→生成Hex文件→下载
4、打开烧录软件→选择对应的单片机型号→选择Hex文件→单击下载→打开开发板→烧录完成→LED闪烁
5、实验总结
通过这次实验再次熟悉了keil软件的基本操作以及能够运用烧录软件下载编译好的软件,编写了第一个C51单片机程序,实现了单灯的亮灭,更加深刻的理解了单片机的工作方式,以及I/O口的程序控制方式。
七、程序清单:
#include
voidDelay10ms(unsignedintc);//延时10ms
SbitLED1=P0^0;
voidmain()
{while
(1)
{
LED1=0;//置P0^0口为低电平
Delay10ms(50);
LED1=1;//置P0^0口为高电平
Delay10ms(50);//调用延时程序
}
}
voidDelay10ms(unsignedintc)//误差10us
{
unsignedchara,b;
for(;c>0;c--)
{
for(b=38;b>0;b--)
{
for(a=130;a>0;a--);
}}
实验三、单片机控制流水灯
一、实验目的
(1)再次熟悉单片机高低电平的控制方式
(2)熟悉I/O口总线的控制方式
(3)了解移位操作的的程序实现
二、实验器材
(1)C51开发板一块
(2)电脑一台
三、实验原理
C51单片机有四组I/O口,每组I/O口有八位,通过0与1的不同状态总共有256种不同的状态,例如11111110表示第一位对应的LED亮,然后通过移位操作(或者直接包含intrins.h头文件实现移位功能)让0不断以为,从而对应不同的LED亮,总体实现流水灯的效果。
四、实验操作方法和步骤
1、建立工程:
双击桌面图标keil→单击project→选择newuVisionproject→选择AT89C52型号单片机→确定
2、单击file→new→保存(文件后缀是.c的文本)→开始编程
3,单击
编译、运行程序→生成Hex文件→下载调试
4、打开烧录软件→选择对应的单片机型号→选择Hex文件→单击下载→打开开发板→烧录完成→LED移位闪烁
五、实验总结
通过本次试验,我熟悉了LED的闪烁控制,可以运用移位操作“>>”与“<<”但是此移位方式是移位后补0,具体操作时需要进行处理;还可以直接将intrins.h头文件包含进去实现移位操作,相对而言更简单一些。
6、程序清单:
#include
#include
voidDelay10ms(unsignedintc);//延时10ms
main()
{
unsignedcharLED;
LED=0xfe;//0xfe=11111110
while
(1)
{
P0=LED;
Delay10ms(50);
LED=LED<<1;//循环右移1位,点亮下一个LED
if(P0==0x00)//当它全灭的时候,重新赋值
LED=0xfe;//0xfe=11111110
}
}
voidDelay10ms(unsignedintc)//误差0us
{
unsignedchara,b;
for(;c>0;c--)
{
for(b=38;b>0;b--)
{
for(a=130;a>0;a--);
}
}
}
4、单片机定时器实验
一、实验目的
(1)了解单片机的多个计数器的工作方式
(2)熟悉计数器初始化的计算方法
(3)了解单位脉冲的实现方式
二、实验器材
(1)C51开发板一块
(2)电脑一台
三、实验原理
80c51单片机内有两个可编程的定时/计数器T0、T1。
它们是一个16位计数器,随着计数器的输入脉冲进行自加1,也就是每来一个脉冲,计数器就自动加1,,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使相应的中断标志位置1,向CPU发出中断请求(定时/计数器中断允许时)。
如果计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。
四、实验操作方法和步骤
1、建立工程:
双击桌面图标keil→单击project→选择newuVisionproject→选择AT89C52型号单片机→确定
2、单击file→new→保存(文件后缀是.c的文本)→开始编程
3,单击
编译、运行程序→生成Hex文件→下载调试
打开烧录软件→选择对应的单片机型号→选择Hex文件→单击下载→打开开发板→烧录完成→LED移位闪烁
定时器操作步骤:
1、选择工作方式(设置M1,M0)
2、选择控制方式(设置GATE)
3、选择定时器还是计数器模式(设置C/T)
4、给定时/计数器赋初值(设置THx和TLx)
开启定时器中断(设置ET0或ET1)
开启总中断(设置EA)
打开计数器(设置TR1或TR0)
五、实验总结
通过本次试验,了解单位脉冲的实现方式,熟悉计数器初始化的计算方法,了解单片机的多个计数器的工作方式,体会到了学习单片机的乐趣。
六、程序清单:
#include
#include
Unsignedintword=0xxfe;
Unsignedintt=0;
Voidmain()
{
TMOD=1;
TH0=0x3c;
TL0=0xb0;
TR0=1;
ET0=1;
P1=word;
While
(1)
{
If(t==20)
{t=0;
word=_crol_(word,1)
P1=word;
}
}
}
VoidTimer0()interrupt1
{
TH0=0x3c;
TL0=0xb0;
t++;
}
五、单片机中断实验一
一、实验目的
(1)了解单片机中断的工作方式
(2)熟悉中断初始化的计算方法
(3)熟悉数码管的静态显示
二、实验器材
(1)C51开发板一块
(2)电脑一台
三、实验原理
(P3.2)可由IT0(TCON.0)选择其为低电平有效还是下降沿有效。
当CPU检测到P3.2引脚上出现有效的中断信号时,中断标志IE0(TCON.1)置1,向CPU申请中断,然后通过段选使数码管显示不同的值
四、实验操作方法和步骤
1、建立工程:
双击桌面图标keil→单击project→选择newuVisionproject→选择AT89C52型号单片机→确定
2、单击file→new→保存(文件后缀是.c的文本)→开始编程
3,单击
编译、运行程序→生成Hex文件→下载调试
4、打开烧录软件→选择对应的单片机型号→选择Hex文件→单击下载→打开开发板→烧录完成→一位数码管静态显示
五、实验总结
通过本次试验,详细的了解了中断的处理方式以及数码管的静态显示
6、程序清单:
#include
#include
unsignedintSMG;
UnsignedcharcodeDisp_Tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0xbf,0xc7,0x8c,0xc1,0xff,0xf7};
voidmain(void)
{
IT0=1;
EA=1;
EX0=1;
while
(1)
{
P0=Disp_Tab[SMG%10];
}
}
voidcounter(void)interrupt0
{
EX0=0;
SMG++;
EX0=1;
}
六、单片机中断实验二
一、实验目的
(1)了解单片机中断的工作方式
(2)熟悉中断初始化的计算方法
(3)熟悉数码管的动态显示
二、实验器材
(1)C51开发板一块
(2)电脑一台
三、实验原理
(P3.2)可由IT0(TCON.0)选择其为低电平有效还是下降沿有效。
当CPU检测到P3.2引脚上出现有效的中断信号时,中断标志IE0(TCON.1)置1,向CPU申请中断,然后通过段选与位选使数码管显示不同的值
四、实验操作方法和步骤
1、建立工程:
双击桌面图标keil→单击project→选择newuVisionproject→选择AT89C52型号单片机→确定
2、单击file→new→保存(文件后缀是.c的文本)→开始编程
3,单击
编译、运行程序→生成Hex文件→下载调试
4、打开烧录软件→选择对应的单片机型号→选择Hex文件→单击下载→打开开发板→烧录完成→四位数码管动态显示
五、实验总结
通过本次试验,对中断的控制方式又加深了理解,同时学会了数码管的动态显示方法。
六、程序清单:
#include
#include
sbitLS138A=P2^2;
sbitLS138B=P2^3;
sbitLS138C=P2^4;
unsignedintLedNumVal=0,LedOut[8];
unsignedcharcodeDisp_Tab[]={~0xC0,~0xF9,~0xA4,~0xB0,~0x99,~0x92,~0x82,~0xF8,~0x80,~0x90,~0x88,~0x83,~0xC6,~0xA1,~0x86,~0xbf,~0xc7,~0x8c,~0xc1,~0xff,~0xf7};
voiddelay(unsignedinti)
{
charj;
for(i;i>0;i--)
for(j=200;j>0;j--);
}
display()
{unsignedchari;
LedOut[0]=Disp_Tab[LedNumVal%10000/1000];
LedOut[1]=Disp_Tab[LedNumVal%1000/100]&0x7f;
LedOut[2]=Disp_Tab[LedNumVal%100/10];
LedOut[3]=Disp_Tab[LedNumVal%10];
for(i=0;i<8;i++)
{P0=LedOut[i];
switch(i){
case0:
LS138A=0;LS138B=0;LS138C=0;break;
case1:
LS138A=1;LS138B=0;LS138C=0;break;
case2:
LS138A=0;LS138B=1;LS138C=0;break;
case3:
LS138A=1;LS138B=1;LS138C=0;break;
case4:
LS138A=0;LS138B=0;LS138C=1;break;
case5:
LS138A=1;LS138B=0;LS138C=1;break;
case6:
LS138A=0;LS138B=1;LS138C=1;break;
case7:
LS138A=1;LS138B=1;LS138C=1;break;
}
delay(150);
}
}
voidmain(void)
{
P0=0xff;
P1=0xff;
P2=0xff;
IT0=1;
EA=1;
EX0=1;
while
(1)
{
display();
}
}
voidcounter(void)interrupt0
{
EX0=0;
LedNumVal++;
EX0=1;}
七、单片机键盘实验一
一、实验目的
(1)了解并熟悉独立键盘的工作方式
二、实验器材
(1)C51开发板一块
(2)电脑一台
三、实验原理
轻触开关是一种电子开关,使用时,轻轻按开关按钮就可使开关接通,当松开手时,开关断开,通过按键使电平发生变化进而发信息给单片机控制数码管的数值显示。
四、实验操作方法和步骤
1、建立工程:
双击桌面图标keil→单击project→选择newuVisionproject→选择AT89C52型号单片机→确定
2、单击file→new→保存(文件后缀是.c的文本)→开始编程
3,单击
编译、运行程序→生成Hex文件→下载调试
打开烧录软件→选择对应的单片机型号→选择Hex文件→单击下载→打开开发板→烧录完成→通过按键控制数码管的显示
五、实验总结
通过本次试验,熟悉了独立键盘的工作方式,同时了解到键盘需要通过延时来去抖进而确保信息的正确传递;再次熟悉了数码管消隐的重要性。
7、程序清单:
#include
#include
#defineGPIO_KEYP1
#defineGPIO_LEDP0
voidDelay10ms(unsignedintc);
unsignedcharKey_Scan();
voidmain(void)
{
unsignedcharledValue,keyNum;
ledValue=0x00;
while
(1)
{
keyNum=Key_Scan();
if(keyNum!
=0){
ledValue=keyNum;
}
GPIO_LED=ledValue;
}
}
unsignedcharKey_Scan()
{
unsignedcharkeyValue=0,i;
if(GPIO_KEY!
=0xFF)
{
Delay10ms
(1);
if(GPIO_KEY!
=0xFF)
{
keyValue=GPIO_KEY;
i=0;
while((i<50)&&(GPIO_KEY!
=0xFF)){
Delay10ms
(1);
i++;
}
}
}
returnkeyValue;
}
voidDelay10ms(unsignedintc)//?
ó2?
0us
{
unsignedchara,b;
for(;c>0;c--)
{
for(b=38;b>0;b--)
{
for(a=130;a>0;a--);
}
}
}
八、单片机键盘实验二
一、实验目的
(1)熟悉矩阵键盘的扫描方式
(2)对比行列扫描与反转扫描的不同
(3)了解电平触发与边沿触发
二、实验器材
(1)C51开发板一块
(2)电脑一台
三、实验原理
行列扫描:
我们可以通过高四位全部输出低电平,低四位输出高电平。
当接收到的数据,低四位不全为高电平时,说明有按键按下,然后通过接收的数据值,判断是哪一列有按键按下,然后再反过来,高四位输出高电平,低四位输出低电平,然后根据接收到的高四位的值判断是那一行有按键按下,这样就能够确定是哪一个按键按下了。
四、实验操作方法和步骤
1、建立工程:
双击桌面图标keil→单击project→选择newuVisionproject→选择AT89C52型号单片机→确定
2、单击file→new→保存(文件后缀是.c的文本)→开始编程
3,单击
编译、运行程序→生成Hex文件→下载调试
打开烧录软件→选择对应的单片机型号→选择Hex文件→单击下载→打开开发板→烧录完成→通过按不同键显示不同的键值
5、实验总结
通过本次试验,详细的熟悉矩阵键盘的扫描方法,了解到行列扫描与反转扫描的不同之处,以及外部中断电平触发与边沿触发的实现方式。
6、程序清单:
#include
#defineGPIO_DIGP0
#defineGPIO_KEYP1
unsignedcharcodeDIG_CODE[17]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
voidDelay10ms(unsignedintc);
voidKeyDown();
voidmain(void)
{
while
(1)
{
KeyDown();
GPIO_DIG=~DIG_CODE[KeyValue];
}
}
voidKeyDown(void)
{
chara=0;
GPIO_KEY=0x0f;
if(GPIO_KEY!
=0x0f)//?
áè?
°′?
üê?
·?
°′?
?
{
Delay10ms
(1);
if(GPIO_KEY!
=0x0f)
{
GPIO_KEY=0X0F;
switch(GPIO_KEY)
{
case(0X07):
KeyValue=0;break;
case(0X0b):
KeyValue=4;break;
case(0X0d):
KeyValue=8;break;
case(0X0e):
KeyValue=12;break;
}
GPIO_KEY=0XF0;
switch(GPIO_KEY)
{
case(0X70):
KeyValue=KeyValue+3;break;
case(0Xb0):
KeyValue=KeyValue+2;break;
case(0Xd0):
KeyValue=KeyValue+1;break;
case(0Xe0):
KeyValue=KeyValue;break;
}
while((a<50)&&(GPIO_KEY!
=0xf0))
{
Delay10ms
(1);
a++;
}}}}
voidDelay10ms(unsignedintc)//?
ó2?
0us
{
unsignedchara,b;
for(;c>0;c--)
{
for(b=38;b>0;b--)
{
for(a=130;a>0;a--);
}
}}
九、单片机串口通信实验
一、实验目的
(1)了解单片机I2C通信协议
(2)波特率的设定
(3)数据发送与接受
二、实验器材
(1)C51开发板一块
(2)电脑一台
三、实验原理
起始和终止信号:
SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。
数据传送格式
(1)字节传送与应答
每一个字节必须保证是8位长度。
数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。
如果一段时间内没有收到从机的应答信号,则自动认为从机已正确接收到数据。
四、实验操作方法和步骤
1、建立工程:
双击桌面图标keil→单击project→选择newuVisionproject→选择AT89C52型号单片机→确定
2、单击file→new→保存(文件后缀是.c的文本)→开始编程
3,单击
编译、运行程序→生成Hex文件→下载调试
打开烧录软件→选择对应的单片机型号→选择Hex文件→单击下载→打开开发板→烧录完成→发送接收数据
串口的操作步骤:
1、先设置波特率:
2、设置定时器T1为工作方式2(设置TMOD寄存器)
3、给计数器赋初值(工作方式2会自动重装)
4、设置串口工作方式:
5、设置SCON(如果允许)
6、如果使用中断方式
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 本科 单片机 原理 实验 报告