八位流水灯程序
时间: 2023-11-05 12:04:15 浏览: 83
好的,以下是一个简单的八位流水灯程序的 C 代码:
```c
#include <reg52.h>
#define LED P0
void delay(unsigned int t)
{
while (t--) {
for (int i = 0; i < 120; i++) {
// 空循环,用于延时
}
}
}
void main()
{
while (1) {
LED = 0x01; // 从最低位开始点亮
for (int i = 0; i < 8; i++) {
delay(100); // 延时一段时间
LED <<= 1; // 移位操作,点亮下一位
}
}
}
```
这个程序使用了 8051 单片机的 P0 口控制了八个 LED 灯的亮灭,每隔一段时间,从最低位开始点亮,然后循环左移一位,实现了八个灯的流水效果。注意,这个程序需要在具有相应硬件的环境下才能运行。
相关问题
基于STM32F106的八位流水灯程序
以下是基于STM32F106的八位流水灯程序:
```
#include "stm32f10x.h"
int main(void)
{
// 打开GPIOC时钟
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
// 配置GPIOC 0-7引脚为输出模式
GPIOC->CRH &= ~GPIO_CRH_MODE;
GPIOC->CRH |= GPIO_CRH_MODE_0 | GPIO_CRH_MODE_1 | GPIO_CRH_MODE_2 | GPIO_CRH_MODE_3 | GPIO_CRH_MODE_4 | GPIO_CRH_MODE_5 | GPIO_CRH_MODE_6 | GPIO_CRH_MODE_7;
while(1)
{
// 点亮第一个LED
GPIOC->BSRR = GPIO_BSRR_BR0;
GPIOC->BSRR = GPIO_BSRR_BS7;
// 等待一段时间
for(int i = 0; i < 1000000; i++);
// 点亮第二个LED
GPIOC->BSRR = GPIO_BSRR_BR1;
GPIOC->BSRR = GPIO_BSRR_BS0;
// 等待一段时间
for(int i = 0; i < 1000000; i++);
// 点亮第三个LED
GPIOC->BSRR = GPIO_BSRR_BR2;
GPIOC->BSRR = GPIO_BSRR_BS1;
// 等待一段时间
for(int i = 0; i < 1000000; i++);
// 点亮第四个LED
GPIOC->BSRR = GPIO_BSRR_BR3;
GPIOC->BSRR = GPIO_BSRR_BS2;
// 等待一段时间
for(int i = 0; i < 1000000; i++);
// 点亮第五个LED
GPIOC->BSRR = GPIO_BSRR_BR4;
GPIOC->BSRR = GPIO_BSRR_BS3;
// 等待一段时间
for(int i = 0; i < 1000000; i++);
// 点亮第六个LED
GPIOC->BSRR = GPIO_BSRR_BR5;
GPIOC->BSRR = GPIO_BSRR_BS4;
// 等待一段时间
for(int i = 0; i < 1000000; i++);
// 点亮第七个LED
GPIOC->BSRR = GPIO_BSRR_BR6;
GPIOC->BSRR = GPIO_BSRR_BS5;
// 等待一段时间
for(int i = 0; i < 1000000; i++);
// 点亮第八个LED
GPIOC->BSRR = GPIO_BSRR_BR7;
GPIOC->BSRR = GPIO_BSRR_BS6;
// 等待一段时间
for(int i = 0; i < 1000000; i++);
}
}
```
该程序使用了STM32F106的GPIOC端口控制八个LED灯的亮灭。程序采用了流水灯的方式,每次点亮一个LED灯,然后等待一段时间后再点亮下一个LED灯,循环往复。
写一个51单片机p2口八位流水灯程序
下面是一个基于51单片机P2口的八位流水灯程序,每个LED灯会依次亮起,形成一个向右移动的流水灯效果:
```c
#include <reg51.h>
void delay(unsigned int count)
{
unsigned int i, j;
for(i = 0; i < count; i++)
for(j = 0; j < 200; j++);
}
void main()
{
unsigned char led = 0x01; // 起始LED灯位置
while(1)
{
P2 = led; // 控制P2口输出
delay(500); // 延时0.5秒
led <<= 1; // 左移一位
if(led == 0) // 如果所有LED灯都亮起来了,重新开始
led = 0x01;
}
}
```
需要注意的是,在P2口连接LED灯时,需要通过电阻限流,否则可能会烧坏单片机。另外,程序中的延时函数可能需要根据具体情况进行调整。
阅读全文