|
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
设计电路,在GPIOC口,分别接有一个开关K1和两个指示灯LED1和LED2。两个灯一亮一灭,每按一下开关,两个灯的亮灭状态翻。
1. main.c
#include "stm32f10x.h"
#include "led.h"
#include "key.h"
#include "sys.h"
int main(void)
{
u8 kcnt=0;
SystemInit();
LED_Init();
KEY_Init();
while (1)
{
if(S1_DOWN)
{
delay_nms(10);
if(S1_DOWN)
{
while(S1_DOWN);
kcnt++;
}
if(kcnt%2==0)
{
LED1_ON;
LED2_OFF;
}
if(kcnt%2==1)
{
LED1_OFF;
LED2_ON;
}
}
}
}
2. led.h
#ifndef __LED__H
#define __LED__H
#include "stm32f10x.h"
#include "sys.h"
#define LED1_ON GPIO_SetBits(GPIOC,GPIO_Pin_5)
#define LED1_OFF GPIO_ResetBits(GPIOC,GPIO_Pin_5)
#define LED2_ON GPIO_SetBits(GPIOC,GPIO_Pin_6)
#define LED2_OFF GPIO_ResetBits(GPIOC,GPIO_Pin_6)
void LED_Init(void);
void delay_nms(u16 time);
#endif
3. key.h
#ifndef __KEY_H_
#define __KEY_H_
#include "stm32f10x.h"
#include "sys.h"
#define S1_DOWN GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_10)==0
#define S1_UP GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_10)==1
void KEY_Init(void);
#endif
4. led.c
#include "stm32f10x.h"
#include "led.h"
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_SetBits(GPIOC,GPIO_Pin_5|GPIO_Pin_6);
}
void delay_nms(u16 time)
{
u16 i=0;
while(time--)
{
i=12000;
while(i--);
}
}
5.key.c
#include "stm32f10x.h"
#include "key.h"
#include "delay.h"
void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
//GPIO_SetBits(GPIOB,GPIO_Pin_15);
}
|
-
-
-
-
实验.7z
696.75 KB, 下载次数: 26, 下载积分: 黑币 -5
评分
-
查看全部评分
|