#include <stm32f10x_lib.h>
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "key.h"
int main(void)
{
u8 t;
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
LED_Init(); //初始化与LED连接的硬件接口
KEY_Init(); //初始化与按键连接的硬件接口
while(1)
{
t=KEY_Scan();//得到键值
if(t)
{
switch(t)
{
case 1:
LED0=!LED0;
LED2=!LED2;
break;
case 2:
LED1=!LED1;
LED3=!LED3;
break;
case 3:
LED0=!LED0;
LED1=!LED1;
LED2=!LED2;
LED3=!LED3;
break;
}
}else delay_ms(10);
}
}
按键子程序
#include <stm32f10x_lib.h>
#include "key.h"
#include "delay.h"
//////////////////////////////////////////////////////////////////////////////////
//********************************************************************************
//V1.1修改说明
//修改按键扫描函数,使整个代码可以支持SWD下载。
//////////////////////////////////////////////////////////////////////////////////
//按键初始化函数
//特别注意:在该函数之后,JTAG将无法使用(SWD也无法使用)
//如果想JTAG仿真,可以屏蔽该函数。
//PA0.PC13.PF11 设置成输入
void KEY_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);//使能APB2外设GPIOF时钟
//RCC->APB2ENR|=1<<2; //使能PORTA时钟
//RCC->APB2ENR|=1<<4; //使能PORTC时钟
GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入
GPIOA->CRL|=0X00000008;
GPIOC->CRH&=0XFF0FFFFF;//PC13设置成输入
GPIOC->CRH|=0X00800000;
GPIOF->CRH&=0XFFFF0FFF;//PF11设置成输入
GPIOF->CRH|=0X00008000;
GPIOC->ODR|=1<<13; //PC13上拉,PA0默认下拉
GPIOF->ODR|=1<<11; //PF11上拉
}
//按键处理函数
//返回按键值
//0,没有任何按键按下
//1,KEY0按下
//2,KEY1按下
//3,KEY2按下 WK_UP
//注意此函数有响应优先级,KEY0>KEY1>KEY2!!
u8 KEY_Scan(void)
{
static u8 key_up=1;//按键按松开标志
JTAG_Set(JTAG_SWD_DISABLE);
if(key_up&&(KEY0==0||KEY1==0||KEY2==1))
{
delay_ms(10);//去抖动
key_up=0;
if(KEY0==0)
{
JTAG_Set(SWD_ENABLE);
return 1;
}
else if(KEY1==0)
{
JTAG_Set(SWD_ENABLE);
return 2;
}
else if(KEY2==1)
{
JTAG_Set(SWD_ENABLE);
return 3;
}
}else if(KEY0==1&&KEY1==1&&KEY2==0)key_up=1;
JTAG_Set(SWD_ENABLE);
return 0;// 无按键按下
}
LED子程序
#include <stm32f10x_lib.h>
#include "led.h"
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//初始化PE2,3,4,5为输出口.并使能这4个口的时钟
//LED IO初始化
void LED_Init(void)
{
RCC->APB2ENR|=1<<6; //使能PORTE时钟
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
GPIOE->CRL&=0XFF0000FF;
GPIOE->CRL|=0X00333300;//PE2,3,4,5 通用推挽输出
GPIOE->ODR|=1<<8; //PE2,3,4,5 输出高
}
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |