实验说明
流水灯是最简单的单片机实验,其原理是通过控制单片机的输出口依次点亮LED灯,形成一个类似于“流水”的效果。本次单片机实验中,我们使用Keil C软件和STC89C52单片机来实现流水灯的效果。
代码实现
首先,我们需要定义单片机的引脚和变量。在本次实验中,我们使用了P1口作为输出口,其中P1.0~P1.7分别与8个LED灯相连。由于需要依次点亮LED灯,我们还需要定义控制灯的计数器变量。代码如下:
```C
#include //头文件
sbit LED1 = P1^0; //定义LED灯引脚
sbit LED2 = P1^1;
sbit LED3 = P1^2;
sbit LED4 = P1^3;
sbit LED5 = P1^4;
sbit LED6 = P1^5;
sbit LED7 = P1^6;
sbit LED8 = P1^7;
unsigned char cnt = 0; //计数器
```
然后,我们需要编写主函数和流水灯控制函数。主函数中,我们需要调用定时器中断函数,以便依次点亮每个LED灯。流水灯控制函数中,我们需要不停地循环,每隔一段时间点亮下一个LED灯。代码如下:
```C
void main()
{
TMOD = 0x01; //定时器T0工作在模式1
TH0 = 0x3C; //装初值
TL0 = 0xAF;
TR0 = 1; //启动定时器
ET0 = 1; //打开定时器中断
EA = 1; //打开总中断
while (1); //循环
}
void led_control() interrupt 1 //定时器中断函数
{
TH0 = 0x3C; //装初值
TL0 = 0xAF;
switch (cnt) //流水灯控制
{
case 0: LED1 = 1; LED2 = 0; break;
case 1: LED2 = 1; LED1 = LED3 = 0; break;
case 2: LED3 = 1; LED2 = LED4 = 0; break;
case 3: LED4 = 1; LED3 = LED5 = 0; break;
case 4: LED5 = 1; LED4 = LED6 = 0; break;
case 5: LED6 = 1; LED5 = LED7 = 0; break;
case 6: LED7 = 1; LED6 = LED8 = 0; break;
case 7: LED8 = 1; LED7 = 0; break;
default: break;
}
cnt++; //计数器加1
cnt %= 8; //计数器模8
}
```
实验结论
本次单片机实验成功实现了流水灯的效果,通过控制单片机输出引脚的状态,依次点亮每个LED灯,并形成“流水”的效果。通过实验,我们也学习了Keil C软件和STC89C52单片机的使用,加深了我们对单片机原理的理解。
本文来自投稿,不代表亲测学习网立场,如若转载,请注明出处:https://www.qince.net/mcuwthh.html
郑重声明:
本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。 若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
我们不承担任何技术及版权问题,且不对任何资源负法律责任。
如遇到资源无法下载,请点击这里失效报错。失效报错提交后记得查看你的留言信息,24小时之内反馈信息。
如有侵犯您的版权,请给我们私信,我们会尽快处理,并诚恳的向你道歉!