流水灯灯的制作流程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
流水灯的制作流程
201400800657 唐宁
1·根据系统的需求设计需求设计单片机电路,本实验的目的是制一个流水灯,编写的程序使用中断电路和直接控制电路,下图为流水灯的电路:
2. 对单片机闪光电路的程序设计,本次编程采用了定时器来控制闪光灯,设计的周期为50ms,采用51单片机学习板为例(P1控制闪光灯),使用keil-c对单片机进行编程。
keil-c的安装使用如下:(1)点击keil-c软件,按默认位置安装,这是为使得程序中的头文件
reg51.h能够在默认位置调用,安装完成后运行软件。
(2)新建一个工程,保存在计算机的某一个文件夹下;在新建一个空
白文档,将所写的程序写完后,保存为c文件,关闭程序。
(3)找到所建工程的文件夹,打开project文件,将c文件添加到所在的工程中,对工程右键选中生成hex文件,然后对c文件进行编译,不断调试,然后选择重编译,直至编译通过。
表明所写的程序没有语法上的错误。
接下来就可以对程序进行模拟,在这里我们可以先利用软件自带的调试程序来查看运行是否正确,最终是下载到单片机上进行测试。
程序见下图:
#include <reg51.h>
main()
{
TMOD=0x01; /*初始化定时器,按方式一工作*/
TH0=0x3c;
TL0=0xb0; /*定时为50ms*/
ET0=1; /*开定时器的中断允许*/
EA=1; /*开CPU中断允许*/
TR0=1; /*打开定时器中断开关*/
TF0=0; /*溢出置为零*/
P1=0xfe; /*第一个灯亮*/
while(1); /*死循环,等待中断发生*/
}
void read() interrupt 1 /*定时器中断函数*/ {
TH0=0x3c;
TL0=0xb0; /*重赋初值*/
static int number=0; /*定义计数变量*/ number++;
if (number<8)
{
P1=~P1;
P1=~(P1<<1);
} /*流水灯挨个连续发光*/ else if(number<15)
{
P1=~P1;
P1=P1>>1;
P1=~P1;
} /*流水灯往回挨个亮灯*/ else if(number==15)
P1=0x00; /*灯全亮*/
else if(number==16)
P1=0xff; /*灯全灭*/
else if(number==17)
P1=0x00; /*灯全亮*/
else if(number==18)
P1=0xff; /*灯全灭*/
else
{
P1=0xfe;
number=0; /*重复亮灯*/
}
使用keil-c对上述程序进行编译以后,发现弹出的窗口提示:0错误,0警告,表明所编写的程序在语法没有错误,接下来可以利用软件自带的工具进行调试,最终通过下载程序到单片机执行即可,运行以确定是否存在逻辑错误。
注意:
1.在编写程序时注意static int number=0;语句的书写,当我们不
加上static的修饰词后,那么此程序运行将出错,原因是每次执行终端的时候会是number的值始终为0。
2.注意赋值符号与判断的是否等于的区别,如果出错,那么程序
也不会达到应有的效果。
3.“P1=P1>>1;P1=~P1;”可以用“P1=~(P1>>1)”来代替。
4.将程序下载到89C52的单片机中,在此之前,需要在电脑上安装一
个USB转串口CH340驱动安装包的程序驱动,以确保计算机能够识别到这个串口。
(1)打开程序点击安装,安装后单机确定,这时串口转USB驱动安
装完毕。
(2)打开设备管理器,以确定电脑随机为单片机分配的端口,记住
端口。
尽量使这个端口靠前,以便烧录程序时能够找到。
(3)打开烧录程序,选择好所记住的端口,并且打开编译过后的hex
文件,点击下载程序。
(4)将接在电脑上的单片机电源键打开后即可瞬间将程序下载下
来。
下载完成后即可运行所现在的程序,根据观察到的现象对程序进行不断的修正。
如果没有达到我们为你想要看到的现象,那么就可能上所写程序存在逻辑方面的错误。
这样,流水灯灯的开发就到此结束了。