当前位置:文档之家› 单片机实验(C语言)

单片机实验(C语言)

单片机实验(C语言)
单片机实验(C语言)

《单片机原理》实验指导书

前言

由于单片机具有高可靠性、超小型、低价格、容易产品化等特点,在仪器仪表智能化、实时工业控制、实时数据采集、智能终端、通信设备、导航系统、家用电器等控制应用领域,具有十分广泛的用途。由于目前在国内单片机应用中,MCS-51系列单片机仍然是一种主流单片机,所以本实验指导书为学习MCS-51单片机的学生和广大的工程技术人员,配合《单片机原理》课程的教学,结合一种单片机实验板编写了这本实验指导书。

《单片机原理》是一门实践性很强的课程,提高教学质量的一个重要环节是上机实习和训练,无论是学习汇编语言程序设计,还是学习接口电路和外设与计算机的连接,或者软硬兼施地研制单片机应用系统,不通过加强动手是不能获得预期效果的。本实验指导书提供多个实验的指导性材料,有些实验还有一些有一定难度的选做项目,可以根据课时的安排和教学要求进行取舍。为了达到某些实验的目的,书中提供的参考程序与实际应用中的程序会有些差别,所以不一定是最优的。

由于时间紧迫,需要赶课程进度与实验时间的同步,加上编者学识有限,如有不妥之处,欢迎读者批评指正。

实验须知

1. 实验前必须阅读教科书的有关部分和本实验指导书,了解实验目的、内容、步骤,做好实验前的准备工作,编写好实验中要求自编或修改的程序;完成实验前要求完成的准备工作后方可以上机实验,否则不得上机操作。

2. 各种电源的电压和极性不能接错,严禁带电接线和接插元器件。通电前须经过指导教师检查认可后方能通电。

3. 不准随意拨弄各种与实验无关的旋钮和开关,凡与本次实验无关的任何设备都禁止动用和摸弄,注意安全。

4. 严禁用手触摸实验系统印制电路板和元器件的引脚,防止静电击穿芯片。

5. 实验中若损坏仪器或元器件,应及时向指导教师报告。

6. 在实验室内保持安静和卫生,不得随意走动和喧哗,集中精力完成实验。

7. 实验完成后,关掉电源,及时整理实验台桌面,保持环境整洁。

8. 按规定认真完成实验报告,在规定的时间内缴上实验报告。

9. 凡实验或实验报告未能按规定完成的学员,不能参加本课程的考试或考查。

实验基本步骤

1、开电脑后,将ISP的一端与实验板相连,另一端接到电脑的USB上,按下实验板上的电源。

2、安装ISP驱动及keil软件。

3、打开keil软件,根据实验要求编写程序,生产hex文件。

4、打开ISP烧写器,将hex文件导入到实验板内。

5、观察现象。

单片机实验报告格式

实验报告标题

一、实验目的

二、实验内容

三、实验设计及调试:

(1)实验分析及内容。

(2)实验电路:画出与实验内容有关的简单实验电路。

(3)实验设计及调试步骤:根据内容写出实验程序。调试程序,观察结果。(4)实验调试过程中所遇到的问题、解决问题的思路和解决的方法。

四、实验后的经验教训总结。

五、对实验课的建议

目录

实验一实验板使用,KILE C51 ................................................................................................................................................................................................................................ 实验二单片机控制LED灯点亮................................................................................................................................................................................................................................ 实验三单片机控制数码管实验 .................................................................................................................................................................................................................................. 实验四中断系统应用实验.......................................................................................................................................................................................................................................... 实验五定时器/计数器使用......................................................................................................................................................................................................................................... 实验六键盘接口实验 .................................................................................................................................................................................................................................................

实验一实验板使用,Keil C51软件使用

一、实验目的

1. 熟悉单片机实验版、Keil C51软件使用

二、实验说明

本实验指定某块存储器的起始地址和长度,要求能将其内容置1。通过该实验学生可以了解单片机读写存储器的方法,同时也可以了解单片机编程、调试方法。

三、实验内容及步骤

1.启动PC机,安装好ISP驱动,用ISP数据通信线连接计算机与实验板(USB线)。

2.打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着建立源程序,编译无误后,全速运行程序。

3.可把源程序编译成可执行文件,用ISP烧录器烧录到89S52芯片中。

四、Keil C51软件使用步骤

1.使用Keil前必须先安装。安装过程简单,这里不在叙述。

2.安装好了Keil软件以后,我们打开它。打开以后界面如下:

3. 我们先新建一个工程文件,点击“Project->New Project…”菜单,如下图:

3.选择工程文件要存放的路径,输入工程文件名LED,最后单击保存。

4.在弹出的对话框中选择CPU 厂商及型号

5. 选择好Atmel 公司的A T89S52 后, 单击确定

1.在接着出现的对话框中选择“是”。

5.新建一个C51 文件, 单击左上角的New File 如下图所示:

6.保存新建的文件,单击SA VE如下图:

2.在出现的对话框中输入保存文件名MAIN.C(注意后缀名必须为.C),再单击“保存”,如下图;

7.保存好后把此文件加入到工程中方法如下: 用鼠标在Source Group1 上单击右键, 然后再单击Add Files to Group …Source Group 1' 如下图:

8.选择要加入的文件, 找到MAIN.C 后, 单击Add, 然后单击Close

9.在编辑框里输入如下代码:

10.到此我们完成了工程项目的建立以及文件加入工程, 现在我们开始编译工程如下图所示: 我们先单击编译, 如果在错误与警告处看到0 Error(s) 表示编译通过;

11.生成.hex 烧写文件,先单击Options for Target,如图;

12.在下图中,我们单击Output, 选中Create HEX F。再单击“确定”。

13.打开文件夹…实验1?,查看是否生成了HEX文件。如果没有生成,在执行一遍步骤10到步骤12,直到生成。

以上是Keil软件的基本应用,更多的高级应用请大家去查找资料.

五、思考题

如何将存储器块的内容移动到另一位置。

实验二单片机控制LED灯点亮

一、实验目的

1.进一步熟悉编程和程序调试

2.学习P1口的使用方法

3.学习延时子程序的编写和使用

二、实验说明

P1口是准双向口,它作为输出口时与一般的双向口使用方法相同。由准双向口结构可知当P1口用作输入口时,必须先对口的锁存器写“1”,若不先对它写“1”,读入的数据是不正确的。

三、实验步骤及参考例子

实验步骤说明:

本实验需要用到单片机最小应用系统和十六位逻辑电平显示模块。

用P1口做输出口,接十六位逻辑电平显示,程序功能使发光二极管点亮。

1.使用单片机最小应用系统。用扁平数据线连接单片机P1口与LED灯相连。

2.用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。

3.打开Keil uVision2仿真软件,首先建立本实验的项目文件,输入源程序(实验(一)),进行编译,直到编译无误。生成hex文件。

5.打开实验板总电源,将hex文件下载到实验板内,观察发光二极管显示情况。

参考例子:

1)点亮板子上的第一个灯D0

2)点亮板子上的D0、D2、D4、D6灯,与D1、D3、D5、D7灯交替闪烁

3)流水灯:从D0---D7依次点亮

注:在做完实验时记得养成一个好习惯:把相应单元的短路帽和电源开关还原到原来的位置!以下将不再重述。

四、参考程序

1)

#include

void main()

{

P1=0xfd;

}

2)

#include

#define uint unsigned int

#define uchar unsigned char

void delay();

void main()

{

while(1)

{

P1=0xaa;

delay();

P1=0x55;

delay();

}

}

void delay()

{

uint x,y;

for(x=100;x>0;x--)

for(y=600;y>0;y--)

;

}

3)

#include

#include

#define uint unsigned int

#define uchar unsigned char

uchar temp;

void delay(uint);

void main()

{

temp=0xfe;

while(1)

{

for(num=0;num<8;num++)

{

P1=temp;

delay(100);

temp=_crol_(temp,1);

P1=0xff;

delay(100);

}

}

}

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--)

;

}

五、电路图

XTAL1A

11.0592MHz

C3A 22pF

C2A

22pF

P1.0

1

P1.1

2

P1.2

3

P1.3

4

P1.4

5

P1.5

6

P1.6

7

P1.7

8

RST

9

P3.0/RXD

10

P3.1/TXD

11

P3.2/INT0

12

P3.3/INT1

13

P3.4/T0

14

P3.5/T1

15

P3.6/WR

16

P3.7/RD

17

XTAL2

18

XTAL1

19

VSS

20

P2.0

21

P2.1

22

P2.2

23

P2.3

24

P2.4

25

P2.5

26

P2.6

27

P2.7

28

PSEN

29

ALE/PROG

30

EA

31

P0.7

32

P0.6

33

P0.5

34

P0.4

35

P0.3

36

P0.2

37

P0.1

38

P0.0

39

VCC

40

89C51

U1F

C3F

10uF

VCC

VCC

P3.0

P3.1

P1.0

P1.1

P1.2

P1.3

P1.4

P1.5

P1.6

P1.7

P0.0

P0.1

P0.2

P0.3

P0.4

P0.5

P0.6

P0.7

EA

ALE

PSEN

P2.7

P2.6

P2.5

P2.4

P2.3

P2.2

P2.1

P2.0

P3.2

P3.3

P3.4

P3.5

P3.6

P3.7

510*8

VCC

P1.0

P1.1

P1.2

P1.3

P1.4

P1.5

P1.6

P1.7

RESET

R2F 100 R1F 1K L0 L1 L2 L3 L4 L5 L6 L7

六、实验内容

请在keil环境下编写一下程序:1)点亮最后一个LED

2)点亮1、2、5、6这四个LED 3)让第三个LED闪烁

4)设计出流水灯程序,从D7—D0

实验四单片机控制数码管实验

一、实验目的

1. 掌握数码管是如何显示出字符

2. 掌握数码管动态显示原理

二、实验原理

1.数码管两种接法

2.共阴极数码管编码

?0x3f , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d ,

?0 1 2 3 4 5

?0x7d , 0x07 , 0x7f , 0x6f , 0x77 , 0x7c ,

? 6 7 8 9 A B

?0x39 , 0x5e , 0x79 , 0x71 , 0x00

? C D E F 无显示

3.动态显示原理

动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。

三、参考例子

1)让第一个数码管显示一个8字

让第一个数码管显示8字,那么别的数码管的位选就要关闭,即只打开第一个数码管的位选。控制位选的P2口要输出的数据位0xfe(二进制为111 11110)。位选确定后,在确定段选,要显示的是8,那么只有dp段为0,其余段为1,所以P0口要输出0x7f(二进制0111 1111)

2)在四个数码管上显示1,2,3,4

位选:接P2口

左边四个数码管DS3 DS2 DS1 DS0

对应的P2口:0x7f 0xbf 0xdf 0xef

对应的P2口:0xf7 0xfb 0xfd 0xfe

段选:接P0口

3)在八个数码管上显示0、1,2……7.

4)在8个数码管上显示0---9这十个数字,且从右到左动态变化。具体的现象见单片机的学习板。

四、参考程序

1)

#include

void main(void)

{

while(1)

{

P2=0xfe;

P0=0x7f;

}

}

2)

#include

#define uint unsigned int

#define uchar unsigned char

void delay();

void main(void)

{

while(1)

{

P2=0xfe;

P0=0x66;

delay();

P2=0xfd;

P0=0x4f;

delay();

P2=0xfb;

P0=0x5b;

delay();

P2=0xf7;

delay();

}

}

void delay() //延时程序1

{

uint x,y;

for(x=2;x>0;x--)

for(y=112;y>0;y--)

;

}

3)

#include

#define uint unsigned int

#define uchar unsigned char

uchar num1;

uchar num2;

uchar code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f};

uchar code wei[]={

0x7f,0xbf,0xdf,0xef,

0xf7,0xfb,0xfd,0xfe};

void delay();

void main()

{

while(1)

{

for(num1=0;num1<8;num1++)

{

P2=wei[num1];

P0=table[num1];

delay();

}

}

void delay()

{

uint x,y;

for(x=2;x>0;x--)

for(y=110;y>0;y--);

}

4)

#include

#define uint unsigned int

#define uchar unsigned char

uchar num1;

uchar num2;

uchar num3;

uint count;

uchar code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f};

uchar code wei[]={

0x7f,0xbf,0xdf,0xef,

0xf7,0xfb,0xfd,0xfe};

void delay(uint);

void main()

{

while(1)

{

for(count=0;count<100;count++)

{

num3=num2;

{

P2=wei[num1];

if (num3<9) num3++;

else num3=0;

P0=table[num3];

delay(1);

}

}

if(num2<10)

num2=num2+1;

else

num2=0;

}

}

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--); }

五、原理图

相关主题
文本预览
相关文档 最新文档