完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
1、位域操作单片机IO口,结构清晰,且减少代码运算量(虽然不多哈)。
2、如果8个IO口不是P0/P1/P2/P3等,而是不同的GPIO口组合的8个,那建议使用位域操作。 范例:优先考虑,赋值一次后分别对8个IO单独赋值。 #define LED_ROW1 P2_1 #define LED_ROW1 P2_0 #define LED_ROW3 P0_1 #define LED_ROW4 P0_5 #define LED_ROW5 P2_5 #define LED_ROW6 P3_1 #define LED_ROW7 P3_2 #define LED_ROW8 P1_1 typedef union { unsigned char byte; struct { unsigned char bit_8:1;//高8位 unsigned char bit_7:1; unsigned char bit_6:1; unsigned char bit_5:1; unsigned char bit_4:1; unsigned char bit_3:1; unsigned char bit_2:1; unsigned char bit_1:1;//低0位 }bits; }LED_union_typedef; LED_union_typedef LED_ROW={0XFF}; void LED_SW(unsigned char value) { LED_ROW.byte=value;//赋值 LED_ROW1=LED_ROW.bits.bit_8; LED_ROW2=LED_ROW.bits.bit_7; LED_ROW3=LED_ROW.bits.bit_6; LED_ROW4=LED_ROW.bits.bit_5; LED_ROW5=LED_ROW.bits.bit_4; LED_ROW6=LED_ROW.bits.bit_3; LED_ROW7=LED_ROW.bits.bit_2; LED_ROW8=LED_ROW.bits.bit_1; } 范例:不建议,每次运行一下把结果赋给IO #define LED_ROW1 P2_1 #define LED_ROW1 P2_0 #define LED_ROW3 P0_1 #define LED_ROW4 P0_5 #define LED_ROW5 P2_5 #define LED_ROW6 P3_1 #define LED_ROW7 P3_2 #define LED_ROW8 P1_1 void LED_SW(unsigned char value) { LED_ROW1=value&0x01; LED_ROW2=value&0x02; LED_ROW3=value&0x04; LED_ROW4=value&0x08; LED_ROW5=value&0x10; LED_ROW6=value&0x20; LED_ROW7=value&0x40; LED_ROW8=value&0x80; } |
|
|
|
只有小组成员才能发言,加入小组>>
imx6ull 和 lan8742 工作起来不正常, ping 老是丢包
890 浏览 0 评论
3336 浏览 9 评论
3013 浏览 16 评论
3506 浏览 1 评论
9098 浏览 16 评论
1217浏览 3评论
631浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
620浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2361浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1926浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-11 23:02 , Processed in 1.232369 second(s), Total 79, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号