本帖最后由 李嘉杰 于 2023-1-13 18:58 编辑
用51单片机实现循环流水灯
一.学习要点
1.查看寒假资源包里的开发板原理图和数据手册,了解开发板中定时器的工作模式,
根据数据手册的相关内容来学习。
2.根据数据手册来编写delay函数进行延时,写好相应的LED代码完成LED流水灯循环。 二.学习内容 1.STC12C5A60S2数据手册中定时器的相关内容:
这些内容将对我学习定时器有很大的帮助。
结合上次点亮LED的原理图就能大致了解流水灯的工作逻辑。
2.代码:
这次需要在写一个delay的延时函数,目的是让LED灯能按照一定的时间规律进行点亮。
#include <STC12C5A60S2.H>
void delay(unsigned int n)
{
int i;
for(i=0;i<n;i++)
{
TMOD &= 0xF0;
TMOD |= 0x01;
TH0 = 0xFC;
TL0 = 0x66;
TF0 = 0;
TR0 = 1;
EA=0;
ET0=0;
while(TF0 == 0);
TR0 = 0;
}
}
sbit LED1 = P0^0;
sbit LED2 = P0^1;
sbit LED3 = P0^2;
sbit LED4 = P0^3;
sbit LED5 = P0^4;
sbit LED6 = P0^5;
sbit LED7 = P0^6;
sbit LED8 = P0^7;
sbit ADDR0 = P2^0;
sbit ADDR1 = P2^1;
sbit ADDR2 = P2^2;
sbit ENLED = P1^1;
void main ()
{
ENLED = 0;
ADDR2 = 1;
ADDR1 = 1;
ADDR0 = 0;
LED1 = 1;
LED2 = 1;
LED3 = 1;
LED4 = 1;
LED5 = 1;
LED6 = 1;
LED7 = 1;
LED8 = 1;
delay(300);
LED1 = 0;
LED2 = 1;
LED3 = 1;
LED4 = 1;
LED5 = 1;
LED6 = 1;
LED7 = 1;
LED8 = 1;
delay(300);
LED1 = 0;
LED2 = 0;
LED3 = 1;
LED4 = 1;
LED5 = 1;
LED6 = 1;
LED7 = 1;
LED8 = 1;
delay(300);
LED1 = 0;
LED2 = 0;
LED3 = 0;
LED4 = 1;
LED5 = 1;
LED6 = 1;
LED7 = 1;
LED8 = 1;
delay(300);
LED1 = 0;
LED2 = 0;
LED3 = 0;
LED4 = 0;
LED5 = 1;
LED6 = 1;
LED7 = 1;
LED8 = 1;
delay(300);
LED1 = 0;
LED2 = 0;
LED3 = 0;
LED4 = 0;
LED5 = 0;
LED6 = 1;
LED7 = 1;
LED8 = 1;
delay(300);
LED1 = 0;
LED2 = 0;
LED3 = 0;
LED4 = 0;
LED5 = 0;
LED6 = 0;
LED7 = 1;
LED8 = 1;
delay(300);
LED1 = 0;
LED2 = 0;
LED3 = 0;
LED4 = 0;
LED5 = 0;
LED6 = 0;
LED7 = 0;
LED8 = 1;
delay(300);
LED1 = 0;
LED2 = 0;
LED3 = 0;
LED4 = 0;
LED5 = 0;
LED6 = 0;
LED7 = 0;
LED8 = 0;
delay(300);
}
代码完成没有问题后,就能烧录了。
三.实物操作
|