单片机跑马灯(流水灯)控制实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机跑马灯(流水灯)控制实验报告
实验目的:
本实验旨在通过使用单片机对LED灯进行控制,实现跑马灯(流水灯)的效果,同时熟悉单片机编程和IO口的使用。
实验器材:
1)STC89C52单片机
2)最基本的LED灯
3)面包板
4)若干跳线
实验过程:
1.硬件连接:将单片机的P2口与面包板上的相应位置连接,再将LED灯接入面包板中。
2.编写程序:按照题目要求编写所需程序。
3.单片机烧录:将程序烧录进单片机中,即可实现跑马灯效果。
程序详解:
1. 由于LED灯是呈现亮灭效果,我们要编写程序来控制LED的亮灭状态。
2. 在程序中,我们通过P2口控制LED灯的亮灭状态。
例如,若要让LED1亮,我们就将P2口的第一个引脚设置为低电平(0),此时LED1就会发光。
同样地,若要LED2,LED3等依次点亮,则需要将P2口的第二个、第三个引脚设置为低电平,依此类推即可。
3. 接下来,我们要实现每个LED灯的亮灭时间间隔,并实现跑马灯的效果。
4. 在本实验中,我们采用了计时器中断的方式来实现灯光的控制,即在定时器中断函数中对P2口进行控制,这样可以方便地控制灯亮灭时间和亮度。
通过改变定时器中断的时间,可以改变LED灯的亮灭时间;通过改变P2口的控制顺序,可以实现跑马灯效果。
5. 整个程序比较简单,具体的代码实现可以参考以下程序:
#include <REG52.H>
#include <intrins.h>
#define uint unsigned int #define uchar unsigned char void Delay1ms(uchar _ms); void InitTimer0();
sbit led1=P2^0;
sbit led2=P2^1;
sbit led3=P2^3;
sbit led4=P2^4;
sbit led5=P2^5;
sbit led6=P2^6;
sbit led7=P2^7;
void InitTimer0()
{
TMOD=0x01;
TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1;
ET0=1;
TR0=1;
}
void Timer0() interrupt 1 {
static uint i;
TH0=(65536-50000)/256; TL0=(65536-50000)%256;
i++;
if(i%2==0){led1=~led1;}
if(i%4==0){led2=~led2;}
if(i%6==0){led3=~led3;}
if(i%8==0){led4=~led4;}
if(i%10==0){led5=~led5;}
if(i%12==0){led6=~led6;}
if(i%14==0){led7=~led7;}
}
void Delay1ms(uchar _ms)
{
uchar i;
while(_ms--)
{
i=130;
while(i--);
}
}
实验总结:
通过本次实验,我们掌握了单片机控制跑马灯(流水灯)的方法,对单片机编程和IO 口的使用有了更深入的了解。
在实验过程中,我们发现计时器中断的使用可以极大地简化程序,提高代码的可读性和可维护性,这是值得我们学习和掌握的技能。
同时,我们也注意到在硬件连接过程中,对一些关键的细节,例如接线的连接,电位的一致性等,都需要特别小心。