中国石油大学(北京)
实
验
报
告
实验课程:单片机原理及应用
实验名称:实验三——LED指示灯循环控制
总学时:48 教师:林立成绩:
实验日期:2012 年10 月23 日
一、实验目的
熟悉μVision3编译软件、掌握C51编程与调试方法。
二、实验内容
1、按照教材P227的图A.32,绘制实验三电路原理图;
2、根据功能要求,编写C51程序;
3、练习μVision3程序动态调试方法,并最终实现8个LED灯依次点亮的功能:P0.0→P0.1→P0.2→P0.3→┅→P0.7→P0.6→P0.5→┅→P0.0的顺序,无限循环,间隔约50ms;
4、观察仿真结果,完成实验报告。
三、实验要求
1、采用proteus + Keil联合仿真法运行C51程序,并练习采用单步、断点以及监视窗等手段进行程序调试;
2、提交的实验报告中应包括:电路分析及原理图、编程思路及C51源程序、调试过程简述,仿真运行效果以及实验小结。
3、提交实验报告的电子邮件主题及存盘文件名格式如,2005041220马晓明实验三。
1、电路分析及原理图
图1 为LED指示灯循环控制电路原理图
图1 LED指示灯循环控制电路原理图
图中LED指示灯外接于P0口。
由于P0口作为I/O
8只100的电阻。
此外,还包括时钟电路和
复位电路,图中的时钟电路和复位电路与实验1计数显示器相同。
2、编程思路及C51源程序
编程要求:程序启动后8只发光二极管做循环点亮控制,其中灯亮顺序为P0.0→P0.1→P0.2→P0.3→……P0.7→P0.6→P0.5→……→P0.0,无限循环,两次LED 灯亮的时间间隔约为0.5秒。
根据题目要求,程序中应该有一个延时子程序用来每次延时0.5秒,还要有两个循环结构分别控制由上到下和由下到上,还应该有一个控制LED发光的数据。
LED指示灯循环控制程序如下:
#include"reg51.h" //预处理命令,单片机头文件char led[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //LED灯花样数据
void delay(unsigned int time) //延时函数delay声明
{
unsigned int j=0; //定义无符号整形变量初值为0
for(;time>0;time--) //采用for结构的外层循for(j=0;j<125;j++); //采用for结构的内层循}
void main() //主函数
{
char i;
while(1) //采用while结构的无限循环体
{
for(i=0;i<=7;i++) //由上向下循环控制
{
P0=led[i];
delay(200); //调用函数delay,延时50ms }
for(i=7;i>=2;i--) //由下向上循环控制
{
P0=led[i-1];
delay(200); //调用函数delay,延时50ms }
}
}
3、调试过程简述
采用proteus + Keil联合仿真法运行C51程序基本方法:输入源程序→建立工程→对工程进行详细设置→将源程序变为目标代码→运行调试。
(1)建立工程文件
点击“Project->New Project… ”菜单,在编缉框中输入一个名字。
选择目标CPU(Intel系列的80C51BH)。
(2)源文件的建立
点击新建文件按钮打开一个新的文本编缉窗口,输入程序源代码,以*.c保
存该文件。
(3)添加源程序(右击“Source Group1” →点击“Add file to Group”Source Group1” →添加生成的.c文件)如图2。
图2添加源程序
(4)工程设置
右击Project 窗口的Target 1→选择“Project->Option for target ‘target 1’” →工程设置对话框, 设置对话框中的OutPut 页面(勾选“Creat Hex file”)如图3 , 设置对话框中的Debug 页面(选中Use和下拉框“PROTEUS VSM Simulator”)如图4。
图3设置对话框中的OutPut 页面
图4 设置对话框中的Debug 页面
(5)在Keil软件里控制Proteus仿真运行下载()→运行→停止。
也可以用调试工具栏分步调试。
4、仿真运行效果
LED指示灯循环控制仿真运行效果如图5、图6。
图5 LED指示灯循环控制仿真运行效果
图6 LED指示灯循环控制仿真运行效果
程序启动后8只发光二极管做循环点亮控制,其中灯亮顺序为P0.0→P0.1→P0.2→P0.3→……P0.7→P0.6→P0.5→……→P0.0,无限循环,两次LED灯亮的时间间隔约为0.5秒。
达到了实验的要求。
5、实验小结
通过本次实验,我熟悉uVision3编译软件,了解软件的结构组成与功能,学习C51语言的程序设计方法,学会在uVision3中进行C51程序录入、编译、和调试,理解Proteus与Keil联合的仿真原理,实现LED指示灯循环控制功能。
更好的将C语言和C51语言联系在了一起,学到的知识能准确的利用了出来,这次实验不仅是动手能力的锻炼,更是脑力的锻炼,经过这次实验,让我们对单
片机这门课有了更充分的认识。