学习笔记(五)

学习笔记(五),第1张

一、位 *** 作

二、typedef类型别名

三、ifdef条件编译

四、位 *** 作运算符

五、extern变量声明

六、static关键字

七、按键实验

 

一、位 *** 作 

1、映射关系:

位带区:支持位带 *** 作的地址区

位带别名:对别名地址的访问最终作用到位带的访问上

 

2、位 *** 作原理

将每一个比特膨胀为一个32位的字,当访问这些字的时候就达到了访问比特的目的

(类似C语言指针)

二、typedef类型别名

定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象

 

三、ifdef条件编译

当满足某条件时对一组语句进行编译,当不满足条件时编译另一组语句。例如:

#ifdef 标识符

程序段1

#else

程序段2

#endif

四、位 *** 作运算符

 

按位与

eg:10101010&

     101 11111=10101010

按位或

eg:10101010&

     101 11111=10111111

按位异或

eg:10101010^10101111=00000101(对应位相同为0不同为1)

五、extern变量声明

C语言中extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件里,提示编译器遇到此变量和函数时在其他模块中寻找定义

(extern可以申明变量多次,但是定义只有一次)

六、static关键字

static声明的局部变量存储在静态存储区,在函数调用结束后不会被释放,具有记忆功能(static声明的语句只用调用一次即可)

七、按键实验

 

(1)KEY0–>PE4 上拉输入

        KEY1–>PE3  上拉输入

        KEY2–>PE2  上拉输入

        WK_UP–>PA0 下拉输入

        KEY_UP按键按下,IO口检测到高电平

        KEY0/1/2按下,IO口检测到低电平

(2)按键输入实验书写

☞使能按键对应IO口时钟。调用函数:RCC_AHB1PeriphClockCmd();

☞初始化IO模式:上拉/下拉输入。调用函数:GPIO_Init();

☞扫描IO口电平(库函数/寄存器/位 *** 作)

(3)按键扫描思路

 

支持连续按和不支持连续按

不支持连续按:前一次按键状态为松开

代码:

u8 KEY_Scan(void)

{

static u8 key_up=1;

if(key_up&&KEY按下)

{

delay_ms(10);//延时,防抖

key_up=0;

if(KEY确实按下)

{

return KEY_VALUE;

}else if(KEY没有按下){key_up=1;

}}}

支持连续按,代码:

u8 KEY_Scan(void)

{

if(KEY按下)

{

delay_ms(10);

if(KEY确实按下)

{

return KEY_VALUE;

}

return 无效;

}}

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1323972.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-12
下一篇 2022-06-12

发表评论

登录后才能评论

评论列表(0条)

保存