流水灯实验单片机c语言
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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语言不是很熟练,导致在编写程序时有很多不懂的地方,特别是由于已经有了一种编法后思维有些放不开,后来还是老师和同学的提醒下,才开始有思路。二.编写程序时,在对延时子程序的编写时,有些困难,特别是不知道该怎么设定初值,才能让流水灯运行更顺畅。
三.初步编好程序后,进行编译时,总是有错误的地方,还找不到,以后遇到这种情况时要冷静对待。
四.测试延时函数所运行的时间时,若要在子函数里测试,则需要用单步执行的方式测试时间。在子函数里设置断点无法得出时间。五.单片机执行一个程序,需要把改程序设置成一个死循环,让单片机不断执行该程序。
六.晶振的设置,一开始不知道晶振需要设置。