备战2024蓝桥杯-学习笔记

1.模块编程

(1)按键——b站西风(加上定时器初始化)

                按键主要问题是按键如何消抖:因而就需要延时,看江科大所示需要引入Delay函数,但后面要计时的话用定时器模块来解决,因而我并不想引入Delay函数,我就看西风定义几个按键消抖,延时的参数来解决如:

Key库函数的建立:

​
#include 

void Key_r(unsigned int num)//读取按键键码值
{
	P1_7 = 0;P1_6 = 1;P1_5 = 1;P1_4 = 1;
	if(P1_3 == 0) temp = 1;
	if(P1_2 == 0) temp = 2;
	if(P1_1 == 0) temp = 3;
	if(P1_0 == 0) temp = 4;
	P1_7 = 1;P1_6 = 0;P1_5 = 1;P1_4 = 1;
	if(P1_3 == 0) temp = 5;
	if(P1_2 == 0) temp = 6;
	if(P1_1 == 0) temp = 7;
	if(P1_0 == 0) temp = 8;
	P1_7 = 1;P1_6 = 1;P1_5 = 0;P1_4 = 1;
	if(P1_3 == 0) temp = 9;
	if(P1_2 == 0) temp = 10;
	if(P1_1 == 0) temp = 11;
	if(P1_0 == 0) temp = 12;
	P1_7 = 1;P1_6 = 1;P1_5 = 1;P1_4 = 0;
	if(P1_3 == 0) temp = 13;
	if(P1_2 == 0) temp = 14;
	if(P1_1 == 0) temp = 15;
	if(P1_0 == 0) temp = 16;
	
	return temp;
}

​

Key初始化函数建立:

#include 
#include "Key_r.h"
unsigned char Key_slow;//按键延时
unsigned char Key_val,Key_old,Key_down;//按键消抖变量定义

//按键初始化
void Key_i()
{
    if(Key_slow)retuen;
    Key_slow=1;
    Key_val=Key_r();//按键延时用定时器
    Key_old=Key_val;//按键下降沿啥的
    Key_down=Key_val&(Key_val^Key_old);
    switch(Key_down)
    {
        case 1:
            break;
        case 2:
            break;
        case 3:
            break;
        case 4:
            break;




    }

}


//定时器初始化
void Timer0_i()
{
    TMOD &= 0xF0;		//设置定时器模式
	TMOD |= 0x01;		//设置定时器模式
	TL0 = 0x18;		//设置定时初始值
	TH0 = 0xFC;		//设置定时初始值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
	ET0 = 1;    //定时器0中断打开
	EA = 1;     //总中断打开



}








//定时器服务
void Timer0_server()
{
    TL0 = 0x18;		//设置定时初始值
	TH0 = 0xFC;		//设置定时初始值
    if(Key_slow==10)Key_slow=0;
    
}







//主函数
void main()
{
    Timer0_i();
    while(1)
    {    
        Key_i();
    }    

}






(2)数码管显示——51江科大(基于译码器)

        基于51数码管基础通过段选确定那个亮再位选亮数字代码如下:

#include 

unsigned char Seg_slow;//数码管的延时
unsigned char Seg_data[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x6d,0x77,0x40};//所要显示的数字

void Seg_i(unsigned char Seg_l,Seg_c)//第一个是哪一个亮第二个是显示什么
{
    switch(Seg_l)
    {
		case 1:P2_4=1;P2_3=1;P2_2=1;break;
		case 2:P2_4=1;P2_3=1;P2_2=0;break;
		case 3:P2_4=1;P2_3=0;P2_2=1;break;
		case 4:P2_4=1;P2_3=0;P2_2=0;break;
		case 5:P2_4=0;P2_3=1;P2_2=1;break;
		case 6:P2_4=0;P2_3=1;P2_2=0;break;
		case 7:P2_4=0;P2_3=0;P2_2=1;break;
		case 8:P2_4=0;P2_3=0;P2_2=0;break;

    }
    P0=Seg_data[Seg_c];
}


注:

1.个人觉得人数码管这个方法不通用需要译码器

2.这里思路最重要而代码是基于芯片端口来改动

备战2024蓝桥杯-学习笔记_第1张图片

你可能感兴趣的:(学习,笔记)