MCS51单片机实验指导书
(2)
2006.11.8 修改了音乐演奏程序中的有关休止符的BUG
淮阴师范学院计算机科学系
2006.9
实验板结构如下图所示:
注意:实验板与PC机连接时一定要先连接串行通信电缆,然后再将其电源线插入USB接口;拆除时先断开其电源,再断开串行通信电缆。否则极易损坏PC机的串口。最好先关闭微机电源,再连接或拆除实验板。
1、实验前预习实验内容,理解实验原理。
2、按规定时间进入实验室,登记领取实验板和连接线,按操作程序将实验板连接到PC机上,开始实验。
2、实验完毕请指导老师确认后,按操作程序拆除实验板,将连接线收拾好,与实验板一起归还指导老师,方可离开实验室。
3、按时撰写并上交实验报告。实验报告格式为:(1)实验目的,(2)实验内容,(3)源代码及流程图,(4)结果记录及分析,(5)思考题,(6)体会及设想。
51单片机集成开发环境MedWin V2.39简介
1、安装
从网站www.manley免费下载MedWin V2.39集成开发环境安装程序压缩包,将其释放后,按照默认路径安装到C:\Manley\PmedWin文件夹。
2、设置
(1)每次启动MedWin会出现对话框,询问使用仿真器还是模拟仿真,应点击[模拟仿真]按钮。
(2)设置仿真器  点击[设置]—[设置仿真器]命令,选择时钟频率为12兆赫兹。
(3)设置工作目录  MedWin 集成开发环境默认的工作目录为C:\MedWin\PMedWin,建议根据需要建立自己的工作目录。注意:不得使用长文件名或长目录名!
(4)设置编译器  C语言编译器C51(文件夹)拷贝到C:\MedWin文件夹下,点击[设置]—[设置编译工具]命令,打开“设置编译工具”对话框,使用汇编语言时选择第一行,使用C语言时选择第二行,如下图所示。
3、使用
(1)新建项目  点击[项目管理]—[新建项目] 命令,输入项目名称,点击[确定]按钮,出现“添加项目文件”对话框,输入源代码文件名,如T1.C(或T1.ASM),单击[打开]按钮,出现代码窗口,即可开始编程。
(2)打开项目  点击[项目管理]—[打开项目] 命令,点击项目文件名(项目文件后缀为.mpf),点击[打开]按钮,即可打开上次保存的项目。
(3)编译  点击[项目管理]—[编译/汇编]命令,启动编译器对源文件进行语法检查并编译,在消息窗口中显示编译结果。
(3)模拟仿真  当源程序编译无误后,可进行模拟仿真调试。点击[项目管理]—[产生代码并装入]命令,编译器对源程序进行重新编译并装入。这时,可使用[调试]菜单中的相关命令进行调试,如设置断点、单步及全速执行等。
(4)生成目标代码  点击[项目管理]—[输出Binary文件]命令,生成BIN文件,用下载工具将其下载到实验板的单片机中执行。
STC单片机下载软件STC-ISP的使用
该软件界面如下图所示:
按照界面上的提示,第一步,设置单片机型号为STC89C51RC,第二步,设置串口号,通常为COM1,第三步,点击[Open File]按钮,打开编译生成的BIN文件,第四步,检查实验板的串行通信线及电源线与PC机连接是否良好,并且实验板的电源开关处于关闭状态,第五
步,点击[下载]按钮后,再打开实验板电源开关,此时,软件将自动完成程序下载,下载完毕,实验板上的单片机立即开始运行。
目前,MCS51内核单片机中STC89C5X(宏晶)AT89S5X(ATMEL)两种芯片具有在线下载功能。

实验一  LED流水灯
一、实验目的
1. 学习单片机并口的使用方法。
2. 学习延时子程序的编写和使用。
3. 学习集成开发环境MedWin的安装与使用。
4. 学习STC单片机在线下载软件STC-ISP的使用。
二、实验内容
所谓流水灯就是4个发光二极管(LED)轮流点亮,周而复始。实验板上以P3口作输出口,接有四只发光二极管,当单片机的引脚输出为低电平时发光二极管点亮,为高电平时息灭。编写程序,使4个发光二极管循环点亮,时间间隔约0.5秒。
三、实验电路连线
实验板上与本实验有关的硬件如下图所示。4LED上串联4个限流电阻,以防止其电流过大而烧坏。单片机的主时钟为11.0592MHz
四、实验说明
1、 P3口是准双向口,它作为输出口时与一般的双向口使用方法相同。由准双向口结构可知当P1口用作输入口时必须先对它置“1”。若不先对它置“1”,读入的数据是不正确的。输出
时需要接上拉电阻,P3口内部有弱上拉,若将外围电路设计为低有效,高无效,则无需再外接上拉电阻。
2、 为使每次点亮一个LED,应使P3.4P3.7 4个端口中有一个为低,其余均为高,延时一段时间后再点亮另一个LED
3、编写for循环构成的软件延时子程序,在MedWin下模拟执行,根据MedWin显示的执行时间,调整循环变量的终值,使延时时间约0.5秒,在晶振频率为11.0592MHz情况下,循环终值约27000。程序如下:
void delay(void)
{    unsigned int i,j,k,l;
    for(i=0;i<=27000;i++)
    {j++; k++;l++;};
}
流水灯的主程序为:
#include <REG51.H>
void main (void)
{    unsigned char i,c[4] = {0xef,0xdf,0xbf,0x7f};// 从左往右流水
    i = 0;
    while(1)
    {    P3 = c[i & 3];
i++;
          delay();
      }
}
五、思考
1、 如何使点亮的LED从右往左移动?
2、 如何使点亮的LED从两边往中间移动?
实验二  用一位数码管循环显示09
一、实验目的
1. 学习单片机并口的使用方法。
2. 学习延时子程序的编写和使用。
3. 学习LED数码管的驱动编码。
二、实验内容
实验板上有4LED数码管,编写程序,使最右边的一个LED数码管循环显示09十个数字。时间间隔约0.5秒,其余LED数码管关闭。
三、实验电路连线
实验板上与本实验有关的硬件如上页图所示。4个共阳的LED数码管上同名的引脚连接在一起,通过限流电阻接到单片机的P0(段控制)。单片机P2口的4个引脚分别控制4LED数码管的公共端(位控制)。单片机的主时钟为11.0592MHz
四、实验说明
1P0口和P2都是准双向口,输出时需要接上拉电阻。P0内部没有上拉电阻,P2口内部有弱上拉,本实验外围电路设计均为低有效,故无需外接上拉电阻。
2、下表为驱动LED数码管的段代码表,“0”代表对应的笔段亮,“1”代表不亮。若需要在最右边显示数字“5”,只要将从表中查得的段代码2CH写入P0口,再将P2.4置低即可。
数字
g
c
h
d
e
b
f
a
十六
进制
P0.7
P0.6
P0.5
P0.4
P0.3
P0.2
P0.1
P0.0
0
1
0
1
0
0
0
0
0
A0
1
1
0
1
1
1
0
1
1
BB
2
0
1
1
0
0
0
1
0
62
3
0
0
1
0
1
0
1
0
2A
4
0
0
1
1
1
0
0
1
39
汇编语言指导书
5
0
0
1
0
1
1
0
0
2C
6
0
0
1
0
0
1
0
0
24
7
1
0
1
1
1
0
1
0
BA
8
0
0
1
0
0
0
0
0
20
9
0
0
1
0
1
0
0
0
28
A
0
0
1
1
0
0
0
0
30
b
0
0
1
0
0
1
0
1
25
C
1
1
1
0
0
1
0
0
E4
d
0
0
1
0
0
0
1
1
23
E
0
1
1
0
0
1
0
0
64
F
0
1
1
1
0
1
0
0
74
-
0
1
1
1
1
1
1
1
7F
3、实现最右边的一个LED数码管循环显示09十个数字的C语言程序如下:
#include <REG51.H>
#define U8 unsigned char
code U8 tab[]={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28};
void delay(void)
{    unsigned int i,j,k,l;
    for(i=0;i<=27000;i++)
    {j++; k++;l++;};
}
void main(void)
{    U8 i;
    P2_4=0;
    while(1)
    {    P0 = tab[i];
        delay();
        i++;
        if(i==10) i = 0;
    }
}
五、思考题
1. 分别写出 六个字母(用于显示十六进制数)的段代码。
2. 能否交替点亮4LED数码管?
实验三  LED数码管的动态驱动
一、实验目的
1、 学习LED数码管的动态驱动编程。
2、 学习使用定时/计数器。
二、实验内容

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。