流水灯实验单片机c语言

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

流水灯实验

一.任务

用C语言编写流水灯程序,要求灯按要求顺序亮,并给延时程序,让灯亮给定时间,其中用断点调试的方法,写一个

1ms的延时子程序,通过调用延时子程序,给定实参来达到具

体要求多少毫秒的延时。

二.软件流程

打开keil软件

在project里新建工程,

保存工程

在file里新建文件,保存

为.c文件,将文件增加到

工程里

编写源程序,编译

编译译无误后,点击target options,在点

击output后,生成.hex文件

将程序下载到开发板上,观察实验效果

编写的流水灯C语言程序为:

#include "AT89X51.H"

#include "intrins.h"

#define uchar unsigned char

#define uint unsigned int

uchar light_idx;

sbit enable=P1^3;

void delay_ms(uint Z);

void delay_ms(uint Z)

{

uchar x,y;

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

{ for(y=2600;y>0;y--)

{ _nop_();

}

}

}

void main(void)

{ uint i;

SP = 0x70;

enable = 0;

while(1)

{ for(i=0;i<8;i++)

{ light_idx=~(1<

P0=light_idx;

delay_ms(100);

}

}

}

设置延时程序时,设置断点如下所示:while(1)

{ for(i=0;i<8;i++)

{ light_idx=~(1<

P0=light_idx;

delay_ms(100);

}

}

}

进入调试,运行到第一个断点时间为:

到第二个断点的时间为:

经测试delay(500)运行的时间大约为0.5秒。

三.困难

一.在编写程序时,由于对C语言不是很熟练,导致在编写程序时有很多不懂的地方,特别是由于已经有了一种编法后思维有些放不开,后来还是老师和同学的提醒下,才开始有思路。二.编写程序时,在对延时子程序的编写时,有些困难,特别是不知道该怎么设定初值,才能让流水灯运行更顺畅。

三.初步编好程序后,进行编译时,总是有错误的地方,还找不到,以后遇到这种情况时要冷静对待。

四.测试延时函数所运行的时间时,若要在子函数里测试,则需要用单步执行的方式测试时间。在子函数里设置断点无法得出时间。五.单片机执行一个程序,需要把改程序设置成一个死循环,让单片机不断执行该程序。

六.晶振的设置,一开始不知道晶振需要设置。

相关文档
最新文档