项目一、花样流水灯的制作1
利用STM32单片机的8个IO口实现花样流水灯。上电后,间隔点亮每四个LED灯,如图所示:灭开灭开——开灭开灭间隔时间为0.5s.
项目二、花样流水灯的制作2
利用STM32单片机的8个IO口实现花样流水灯。上电后,循环点亮每一个LED灯,间隔时间为0.5s。当k1按下时,控制流水灯在全亮和全熄灭之间循环,间隔时间为0.5s;当k2按下时,控制一个LED灯闪烁,间隔时间为0.5s;当任何按键松开时,恢复循环初始状态。
项目三、LED数码管定时器的制作
利用2位LED数码管制作一个1分钟定时器,最小计时单位为“1秒”,计时显示范围为:0~59。上电时数码管显示“00”,按键K1按下时,定时器开始计时并在数码管上显示;第一次按键K2时,定时器暂停计时,第二次按下K2时,清零。
#include "stm32f10x.h"
#include "led.h"
#include "key.h"
u8 num;
int main(void)
{
while(1)
{
init();
initconfig();
num=ReadKeyDown();
switch(num)
{
case 0:
f0(); break;
case 1:
f1(); break;
case 2:
f2(); break;
case 3:
f3(); break;
case 4:
f4(); break;
}
Delay(delay);
}
}
#include "stm32f10x.h"
#include "key.h"
void initconfig()
{
GPIO_InitTypeDef GPIO_InitStructure;
/* Configure KEY1 Button */
RCC_APB2PeriphClockCmd(RCC_KEY1, ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin = GPIO_KEY1;
GPIO_Init(GPIO_KEY1_PORT, &GPIO_InitStructure);
/* Configure KEY2 Button */
RCC_APB2PeriphClockCmd(RCC_KEY2, ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin = GPIO_KEY2;
GPIO_Init(GPIO_KEY2_PORT, &GPIO_InitStructure);
/* Configure KEY3 Button */
RCC_APB2PeriphClockCmd(RCC_KEY3, ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin = GPIO_KEY3;
GPIO_Init(GPIO_KEY3_PORT, &GPIO_InitStructure);
/* Configure KEY4 Button */
RCC_APB2PeriphClockCmd(RCC_KEY4, ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin = GPIO_KEY4;
GPIO_Init(GPIO_KEY4_PORT, &GPIO_InitStructure);
}
u8 ReadKeyDown(void)
{
/* 1 key is pressed */
if(!GPIO_ReadInputDataBit(GPIO_KEY1_PORT, GPIO_KEY1))
{
return KEY1;
}
/* 2 key is pressed */
if(!GPIO_ReadInputDataBit(GPIO_KEY2_PORT, GPIO_KEY2))
{
return KEY2;
}
/* 3 key is pressed */
if(!GPIO_ReadInputDataBit(GPIO_KEY3_PORT, GPIO_KEY3))
{
return KEY3;
}
/* 4 key is pressed */
if(!GPIO_ReadInputDataBit(GPIO_KEY4_PORT, GPIO_KEY4))
{
return KEY4;
}
/* No key is pressed */
else
{
return NOKEY;
}
}
#include "stm32f10x.h"
#include "led.h"
#include "key.h"
u8 n;
void init()
{
GPIO_InitTypeDef GPIO_InitStructure; /* 配置LED灯使用的GPIO管脚模式*/
RCC_APB2PeriphClockCmd(RCC_GPIO_LED, ENABLE); /*使能LED灯使用的GPIO时钟*/
GPIO_InitStructure.GPIO_Pin = LD1_PIN|LD2_PIN|LD3_PIN|LD4_PIN|LD5_PIN|LD6_PIN|LD7_PIN|LD8_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIO_LED, &GPIO_InitStructure); /*使用的LED灯相关的GPIO口初始化*/
GPIO_ResetBits(GPIO_LED,LD1_PIN|LD2_PIN|LD3_PIN|LD4_PIN|LD5_PIN|LD6_PIN|LD7_PIN|LD8_PIN);/*关闭所有的LED指示灯*/
}
void Delay(vu32 nCount)
{
for(; nCount != 0; nCount--);
}
void f1()
{
GPIO_ResetBits(GPIO_LED,LD1_PIN|LD2_PIN|LD3_PIN|LD4_PIN|LD5_PIN|LD6_PIN|LD7_PIN|LD8_PIN); Delay(delay);
GPIO_SetBits(GPIO_LED,LD4_PIN|LD5_PIN); Delay(delay);
GPIO_SetBits(GPIO_LED,LD3_PIN|LD6_PIN); Delay(delay);
GPIO_SetBits(GPIO_LED,LD2_PIN|LD7_PIN); Delay(delay);
GPIO_SetBits(GPIO_LED,LD1_PIN|LD8_PIN); Delay(delay);
n=ReadKeyDown();
if(n==0)f1();
}
void f2()
{
GPIO_ResetBits(GPIO_LED,LD1_PIN|LD2_PIN|LD3_PIN|LD4_PIN|LD5_PIN|LD6_PIN|LD7_PIN|LD8_PIN); Delay(delay);
GPIO_SetBits(GPIO_LED,LD1_PIN|LD3_PIN|LD5_PIN|LD7_PIN); Delay(delay);
GPIO_ResetBits(GPIO_LED,LD1_PIN|LD2_PIN|LD3_PIN|LD4_PIN|LD5_PIN|LD6_PIN|LD7_PIN|LD8_PIN); Delay(delay);
GPIO_SetBits(GPIO_LED,LD2_PIN|LD4_PIN|LD6_PIN|LD8_PIN); Delay(delay);
GPIO_ResetBits(GPIO_LED,LD1_PIN|LD2_PIN|LD3_PIN|LD4_PIN|LD5_PIN|LD6_PIN|LD7_PIN|LD8_PIN); Delay(delay);
n=ReadKeyDown();
if(n==0)f2();
}
void f3()
{
GPIO_SetBits(GPIO_LED,LD1_PIN|LD8_PIN); Delay(delay);
GPIO_ResetBits(GPIO_LED,LD1_PIN|LD2_PIN|LD3_PIN|LD4_PIN|LD5_PIN|LD6_PIN|LD7_PIN|LD8_PIN); Delay(delay);
GPIO_SetBits(GPIO_LED,LD2_PIN|LD7_PIN); Delay(delay);
GPIO_ResetBits(GPIO_LED,LD1_PIN|LD2_PIN|LD3_PIN|LD4_PIN|LD5_PIN|LD6_PIN|LD7_PIN|LD8_PIN); Delay(delay);
GPIO_SetBits(GPIO_LED,LD3_PIN|LD6_PIN); Delay(delay);
GPIO_ResetBits(GPIO_LED,LD1_PIN|LD2_PIN|LD3_PIN|LD4_PIN|LD5_PIN|LD6_PIN|LD7_PIN|LD8_PIN); Delay(delay);
GPIO_SetBits(GPIO_LED,LD4_PIN|LD5_PIN); Delay(delay);
GPIO_ResetBits(GPIO_LED,LD1_PIN|LD2_PIN|LD3_PIN|LD4_PIN|LD5_PIN|LD6_PIN|LD7_PIN|LD8_PIN); Delay(delay);
n=ReadKeyDown();
if(n==0)f3();
}
void f0()
{
GPIO_ResetBits(GPIO_LED,LD1_PIN|LD2_PIN|LD3_PIN|LD4_PIN|LD5_PIN|LD6_PIN|LD7_PIN|LD8_PIN); Delay(delay);
}
void f4()
{
GPIO_ResetBits(GPIO_LED,LD1_PIN|LD2_PIN|LD3_PIN|LD4_PIN|LD5_PIN|LD6_PIN|LD7_PIN|LD8_PIN); Delay(delay);
GPIO_SetBits(GPIO_LED,LD1_PIN|LD2_PIN); Delay(delay);
GPIO_SetBits(GPIO_LED,LD3_PIN|LD4_PIN); Delay(delay);
GPIO_SetBits(GPIO_LED,LD5_PIN|LD6_PIN); Delay(delay);
GPIO_SetBits(GPIO_LED,LD7_PIN|LD8_PIN); Delay(delay);
n=ReadKeyDown();
if(n==0)f4();
}