找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

C语言这种宏定义怎么理解?

查看数: 2906 | 评论数: 14 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-9-15 11:05

正文摘要:

也摸索了快一年的单片机了,看书,开发板上各种练习,可一到实际应用就懵逼了,下面是一段以前工程师写的实际项目代码,完全看不懂呀,, 老手们指点一二,谢谢!

回复

ID:656213 发表于 2021-9-16 13:54
好的,谢谢你们的回答!
ID:81196 发表于 2021-9-16 08:44
首先你得知道,单片机里边用的执行,其实是一堆寄存器的执行。那么寄存器是怎么交互的呢?只能通过数据了,你这里的所有数据都是最终赋值给寄存器的,而且寄存器的每一位都有其对应的特殊意义。
ID:731755 发表于 2021-9-16 00:06
涨知识了。
ID:950946 发表于 2021-9-15 23:04
就是给右边那些数字啊,公式啊之类的一个名字,左边那些字母就是。下次想用那些东西直接写他们的名字就行,也就是你定义的那些
ID:885138 发表于 2021-9-15 20:09
是LED7(0)或LED7(1),只是看起来像个函数,实质还是一句表达式
ID:885138 发表于 2021-9-15 20:05
jiahz2019 发表于 2021-9-15 15:34
#define        LED7(m)        (Dram[0] = Dram[0]&(~(1

调用时为LED(0)或LED(1);对应m=0或m=1
编译时把后面定义式中的m代换为0或1
ID:814525 发表于 2021-9-15 15:49
主要是把这些单一离散的输入输出信号组合到一个寄存器中统一处理。比如5个按键经过按键处理程式得到的结果是11110或00001,表示KEY1被按下;11101或00010表示KEY2被按下。一个位代表一个按键,依次类推。
ID:656213 发表于 2021-9-15 15:34
#define        LED7(m)        (Dram[0] = Dram[0]&(~(1<<6))|(m<<6))   这句有人讲解一下吗?  里面的数据定义如下: uint8 Dram[2];     m 怎么理解,程序里面也没有关于它的定义
ID:656213 发表于 2021-9-15 15:30
tzs233 发表于 2021-9-15 15:23
程序都是从0开始编号计数的 ,然后我们实际生活中大多从1开始计数。  
比如 (1

好的,谢谢,有点理解了。
ID:509408 发表于 2021-9-15 15:23
程序都是从0开始编号计数的 ,然后我们实际生活中大多从1开始计数。  
比如 (1<<4) 变成10000,如果每一位(0或1)代表一个按键状态(闭合或断开),不就可以表示5个按键状态了吗?
这样很通俗易懂了吧
ID:656213 发表于 2021-9-15 15:12
ByanouQ 发表于 2021-9-15 14:33
#define    key5       (1

(1<<4) 就是1左移4位,》这句能理解,    意思是key5那个引脚设置为高电平》这句理解不了,咋就成了高电平, 难道是 1左移4位=10000,  “1” 刚好对应第5位 ?
ID:480510 发表于 2021-9-15 14:33
#define    key5       (1<<4) 就是1左移4位,意思是key5那个引脚设置为高电平
ID:656213 发表于 2021-9-15 14:17
devcang 发表于 2021-9-15 13:18
实际代码中,用前面的,直接用后边的替换上去。

你讲的替换我肯定是知道的,我不明白的是后面的那些表达式。
ID:277550 发表于 2021-9-15 13:18
实际代码中,用前面的,直接用后边的替换上去。

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表