stm32流水灯程序代码跟工程图(stm32f407流水灯程序)
想用STM32开发板做个流水灯,从左到右共8个灯,要求是在第二个灯未亮前第一个灯不能灭,依次类推
题目不清楚,假设8个灯,整体循环一次的时间是80s,后一个灯亮了3s后前一个灯才允许熄灭。那么可以用定时器,定时器中采用一个变量aaa进行计数累加,比如设定一个1s的定时器,每次进入定时器变量aaa加1,aaa加到80就清零重新累加。
定时器中点亮程序:if(aaa10){把1号灯点亮};else if(aaa20){把2号灯点亮};else if(aaa30){把3号灯点亮};else if(aaa40){把4号灯点亮};else if(aaa50){把5号灯点亮};else if(aaa60){把6号灯点亮};else if(aaa70){把7号灯点亮};else if(aaa80){把8号灯点亮};
定时器中熄灭程序:if(aaa73){把7号灯熄灭};else if(aaa63){把6号灯熄灭};else if(aaa53){把5号灯熄灭};else if(aaa43){把4号灯熄灭};else if(aaa33){把3号灯熄灭};else if(aaa23){把2号灯熄灭};else if(aaa13){把1号灯熄灭};else if(aaa3){把8号灯熄灭};
这样就可以实现。方法有很多,这只是举个简单例子。
单片机流水灯C语言程序(8个灯,依次点亮每个灯,延时500MS)
单片机流水灯C语言程序的源代码如下:
#include //51系列单片机定义文件
#define uchar unsigned char //定义无符号字符
#define uint unsigned int //定义无符号整数
void delay(uint); //声明延时函数
void main(void)
{
uint i;
uchar temp;
while(1)
{
temp=0x01;
for(i=0;i8;i++) //8个流水灯逐个闪动
{
P1=~temp;
delay(100); //调用延时函数
temp=1;
}
temp=0x80;
for(i=0;i8;i++) //8个流水灯反向逐个闪动
{
P1=~temp;
delay(100); //调用延时函数
temp=1;
}
temp=0xFE;
for(i=0;i8;i++) //8个流水灯依次全部点亮
{
P1=temp;
delay(100); //调用延时函数
temp=1;
}
temp=0x7F;
for(i=0;i8;i++) //8个流水灯依次反向全部点亮
{
P1=temp;
delay(100); //调用延时函数
temp=1;
}
void delay(uint t) //定义延时函数
{
register uint bt;
for(;t;t--)
for(bt=0;bt255;bt++);
}
扩展资料
51单片机流水灯的源代码如下
#includereg51.h
#includeintrins.h
void?delay(int?a)
{
int?i;
while(a--)for(i=0;i110;i++);
}
main()
{
int?i;
while(1)
{
P0=0xfe;
for(i=0;i8;i++)
{
P0=_crol_(P0,1);
delay(500);
}
}
}
stm32流水灯流程图
用STM32点灯?好吧!
你的问题没理解,流水灯流程图,这需要流程图吗?直接:芯片 --》初始化-》赋值,完了。
还有,模块流程图指什么,得说清楚点吧?
stm32 流水灯代码问题
初始化就不说了,main函数中的While是一个死循环,LED0,1,2,3低电平有效,
LED0=0;
LED1=1;
LED2=1;
LED3=1;
这几行表示点亮LED0.而熄灭LED1,2,3,
所以进入while循环后,首先点亮LED0,然后系统等待0.5s,然后再依次点亮LED1,LED2,LED3,间隔都是0.5s,依次点亮以后进入下一次while循环。
求一个基于UCOSII流水灯的程序代码,结合STM32完成,麻烦请在KEIL UVISION4上建立起工程
只有一个任务为什么还要使用操作系统呢!我没有流水灯的程序。我给你提供一个LED闪烁的程序。
程序里面建立三个任务,开始任务,LED0任务和LED1任务。LED0每秒钟亮80毫秒,LED1亮300毫秒,灭300毫秒,以此循环。
#include stm32f10x.h
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "includes.h"
#define START_TASK_PRIO 10
#define START_STK_SIZE 64
OS_STK START_TASK_STK[START_STK_SIZE];
void start_task(void *pdata);
//LED0è???
#define LED0_TASK_PRIO 7
#define LED0_STK_SIZE 64
OS_STK LED0_TASK_STK[LED0_STK_SIZE];
void led0_task(void *pdata);
#define LED1_TASK_PRIO 6
#define LED1_STK_SIZE 64
OS_STK LED1_TASK_STK[LED1_STK_SIZE];
void led1_task(void *pdata);
int main(void)
{
Stm32_Clock_Init(9);
delay_init(72);
LED_Init();
LED_Init();
OSInit();
OSTaskCreate(start_task,(void *)0,(OS_STK *)START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );
OSStart();
}
void start_task(void *pdata)
{
OS_CPU_SR cpu_sr=0;
pdata = pdata;
OS_ENTER_CRITICAL();
OSTaskCreate(led0_task,(void *)0,(OS_STK*)LED0_TASK_STK[LED0_STK_SIZE-1],LED0_TASK_PRIO);
OSTaskCreate(led1_task,(void *)0,(OS_STK*)LED1_TASK_STK[LED1_STK_SIZE-1],LED1_TASK_PRIO);
OSTaskSuspend(START_TASK_PRIO);
OS_EXIT_CRITICAL();
}
void led0_task(void *pdata)
{
while(1)
{
LED0=0;
delay_ms(80);
LED0=1;
delay_ms(920);
};
}
void led1_task(void *pdata)
{
while(1)
{
LED1=0;
delay_ms(300);
LED1=1;
delay_ms(300);
};
}
具体详解请参考开源电子网。