项目日志:Day7 --- 2020.7.29

上午

一大早跑去买家厂里测试程序;
改各种功能,修bug
最后还是有个功能没做出来(事先也没说明)— 异常断电后按复位才能继续启动;
但板子上搭载的是机械复位,其功能也就相当于断电重启;
难搞;


按键功能的老化程序完成了(舍弃了有bugKEY5);
先贴一下芯片管脚图:

在这里插入图片描述
头文件Key.h

#ifndef __KEY_H
#define __KEY_H	 
#include "sys.h"

//定义KEY来读取各个按键值;

#define KEY1 PBin(7)
#define KEY2 PBin(6)
#define KEY3 PBin(5)
#define KEY4 PBin(4)
#define KEY5 PBin(3)
#define KEY6 PDin(2)
#define KEY7 PCin(12)
#define KEY8 PCin(11)
#define KEY9 PCin(10)

// #define KEY0  GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)//读取按键0
// #define KEY1  GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15)//读取按键1
// #define WK_UP   GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)//读取按键2 

// 定义按键按压后的返回值;

#define KEY1_PRES	1
#define KEY2_PRES	2
#define KEY3_PRES	3
#define KEY4_PRES	4
#define KEY5_PRES	5
#define KEY6_PRES	6
#define KEY7_PRES	7
#define KEY8_PRES	8
#define KEY9_PRES	9

// 定义数码管的5个输入管脚;

#define  WEI1   PCout(6) 
#define  WEI2   PCout(7)   //正常速度

#define  WEI3   PCout(8)
#define  WEI4   PCout(9)   //补偿速度

#define  WEI5   PAout(8)   //补偿时间
#define  WEI6   PAout(12)

// 定义数码管的7个低电平管脚;
// 顺时针命名;

#define  DATA1  PBout(8) 
#define  DATA2  PBout(9) 
#define  DATA3  PBout(10) 
#define  DATA4  PBout(11) 
#define  DATA5  PBout(12) 
#define  DATA6  PBout(13) 
#define  DATA7  PBout(14) 
#define  DATA8  PBout(15) 

#define  LED1   PAout(15)    //正常
#define  LED2   PAout(11)    //异常

// 用到的函数声明;

void KEY_Init(void);//IO初始化
u8 KEY_Scan(u8 mode);  	//按键扫描函数
void Light_up(int num);
void Light_Error();
#endif

相应函数功能Key.c

#include "key.h"
#include "delay.h"
 	    

//按键初始化函数 
void KEY_Init(void)
{
	
    GPIO_InitTypeDef GPIO_InitStructure;

 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOA, ENABLE );//使能PORTB,PORTC, PORTD, PORTDA时钟
	
	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_7 | GPIO_Pin_6 | GPIO_Pin_5 | GPIO_Pin_4 | GPIO_Pin_3;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
 	GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB

    GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_2;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 
 	GPIO_Init(GPIOD, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_12 | GPIO_Pin_11 | GPIO_Pin_10;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 
 	GPIO_Init(GPIOC, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOC,&GPIO_InitStructure);
    
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_12|GPIO_Pin_15|GPIO_Pin_11;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOA,&GPIO_InitStructure);
    
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOB,&GPIO_InitStructure);	
} 
//按键处理函数
//返回按键值
//mode:0,不支持连续按;1,支持连续按;
//返回值:
//0,没有任何按键按下
//KEYi_PRES,KEYi按下

u8 KEY_Scan(u8 mode)    
{	 
	static u8 key_up = 1;//按键按松开标志
	if(mode) {
        key_up = 1;  //支持连按
    }		  
	if(key_up && (KEY1 == 0||KEY2 == 0 || KEY3 == 0 || KEY4 == 0 || KEY5 == 1 || KEY6 == 0 || KEY7 == 0 || KEY8 == 0 || KEY9 == 0))
	{
		delay_ms(10);//去抖动 
		key_up = 0;
		if(KEY1 == 0)
            return KEY1_PRES;
		else if(KEY2 == 0)
            return KEY2_PRES;
		else if(KEY3 == 0) 
            return KEY3_PRES;
        else if(KEY4 == 0)
            return KEY4_PRES; 
        else if(KEY5 == 1)
            return KEY5_PRES; 
        else if(KEY6 == 0)
            return KEY6_PRES; 
        else if(KEY7 == 0)
            return KEY7_PRES; 
        else if(KEY8 == 0)
            return KEY8_PRES; 
        else if(KEY9 == 0)
            return KEY9_PRES;         
	}
    else if(KEY1 == 1 && KEY2 == 1 && KEY3 == 1 && KEY4 == 1 && KEY5 == 0 && KEY6 == 1 && KEY7 == 1 && KEY8 == 1 && KEY9 == 1)
        key_up = 1;
         	     
	return 0;// 无按键按下
}

void Light_up(int num)
{
    switch (num)
    {
        case 1: {
            DATA1 = 1;   //1
            DATA2 = 0;   //2
            DATA3 = 0;   //3
            DATA4 = 1;   //4
            DATA5 = 1;   //5
            DATA6 = 1;   //6
            DATA7 = 1;   //7
        }
        break;
        case 2: {
            DATA1 = 0;   //1
            DATA2 = 0;   //2
            DATA3 = 1;   //3
            DATA4 = 0;   //4
            DATA5 = 0;   //5
            DATA6 = 1;   //6
            DATA7 = 0;   //7
        }
        break;
        case 3: {
            DATA1 = 0;   //1
            DATA2 = 0;   //2
            DATA3 = 0;   //3
            DATA4 = 0;   //4
            DATA5 = 1;   //5
            DATA6 = 1;   //6
            DATA7 = 0;   //7
        }
        break;
        case 4: {
            DATA1 = 1;   //1
            DATA2 = 0;   //2
            DATA3 = 0;   //3
            DATA4 = 1;   //4
            DATA5 = 1;   //5
            DATA6 = 0;   //6
            DATA7 = 0;   //7
        }
        break;
        case 5: {
            DATA1 = 0;   //1
            DATA2 = 1;   //2
            DATA3 = 0;   //3
            DATA4 = 0;   //4
            DATA5 = 1;   //5
            DATA6 = 0;   //6
            DATA7 = 0;   //7
        }
        break;
        case 6: {
            DATA1 = 0;   //1
            DATA2 = 1;  //2
            DATA3 = 0;   //3
            DATA4 = 0;   //4
            DATA5 = 0;   //5
            DATA6 = 0;   //6
            DATA7 = 0;   //7
        }
        break;
        case 7: {
            DATA1 = 0;   //1
            DATA2 = 0;   //2
            DATA3 = 0;   //3
            DATA4 = 1;   //4
            DATA5 = 1;   //5
            DATA6 = 1;   //6
            DATA7 = 1;   //7
        }
        break;
        case 8: {
            DATA1 = 0;   //1
            DATA2 = 0;   //2
            DATA3 = 0;   //3
            DATA4 = 0;   //4
            DATA5 = 0;   //5
            DATA6 = 0;   //6
            DATA7 = 0;   //7
        }
        break;
        case 9: {
            DATA1 = 0;   //1
            DATA2 = 0;   //2
            DATA3 = 0;   //3
            DATA4 = 0;   //4
            DATA5 = 1;   //5
            DATA6 = 0;   //6
            DATA7 = 0;   //7
        }
        break;
        case 0: {
            DATA1 = 0;   //1
            DATA2 = 0;   //2
            DATA3 = 0;   //3
            DATA4 = 0;   //4
            DATA5 = 0;   //5
            DATA6 = 0;   //6
            DATA7 = 1;   //7
        }
        break;
    }
}

void Light_E()
{
    DATA1 = 0;   //1
    DATA2 = 1;   //2
    DATA3 = 1;   //3
    DATA4 = 0;   //4
    DATA5 = 0;   //5
    DATA6 = 0;   //6
    DATA7 = 0;   //7
    
    return;
}

void Light_R()
{
    DATA1 = 0;   //1
    DATA2 = 0;   //2
    DATA3 = 0;   //3
    DATA4 = 1;   //4
    DATA5 = 0;   //5
    DATA6 = 0;   //6
    DATA7 = 0;   //7

    return;
}

void Light_O() 
{
    DATA1 = 0;   //1
    DATA2 = 0;   //2
    DATA3 = 0;   //3
    DATA4 = 0;   //4
    DATA5 = 0;   //5
    DATA6 = 0;   //6
    DATA7 = 1;   //7
}

void Light_Error()
{
    PCout(6) = 1;
    Light_E();
    delay_us(50);
    PCout(6) = 0;
    PCout(7) = 1;
    Light_R();
    delay_us(50);
    PCout(7) = 0;
    PCout(8) = 1;
    Light_R(8);
    delay_us(50);
    PCout(8) = 0;
    PCout(9) = 1;
    Light_O();
    delay_us(50);
    PCout(9) = 0;
    WEI5 = 1;
    Light_R();
    delay_us(50);
    WEI5 = 0;
    return;
}

主函数main.c代码如下:

#include "delay.h"
#include "sys.h"
#include "Key.h"

u8 t;

int main(void)
{	
	delay_init();	    	 //延时函数初始化	  
	//LED_Init();		  	 	//初始化与LED连接的硬件接口
	KEY_Init();          	//初始化与按键连接的硬件接口

	while(1)
	{
		int i;
        while(1) {              // 循环读按键值;
            t = KEY_Scan(0);
            if(t != 0) {
                break;          // 读到键值则跳出;
            }
            else {
                Light_Error();
            }
        }
        for(i = 0; i < 10;) {
            PCout(6) = 1;
            Light_up(i);
            delay_us(50);
            PCout(6) = 0;
            PCout(7) = 1;
            Light_up(8);
            delay_us(50);
            PCout(7) = 0;
            PCout(8) = 1;
            Light_up(8);
            delay_us(50);
            PCout(8) = 0;
            PCout(9) = 1;
            Light_up(8);
            delay_us(50);
            PCout(9) = 0;
            PAout(8) = 1;
            Light_up(8);
            delay_us(50);
            PAout(8) = 0;
            PAout(12) = 1;
            Light_up(8);
            delay_us(150);
            PAout(12) = 0;
            t = KEY_Scan(0);
            if(t != 0) {
                i++;
            }
        } 
	}

    return 0;
}

OK,明天开始第二个老化程序;

"I can do all things"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值