完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
GPFDAT &= ~(7<<4); 这一步我没看明白?
1110000 的非不是0001111吗? 000不就把4 5 6 的LED全部点亮了吗? 但我自己改了程序,把非去掉发现灯都不亮了,很疑惑求解答。 tmp = ~val; tmp &= 7; GPFDAT |= (tmp<<4); VAL取反是1, tmp<<4 不是该等于 00001000吗?呢不是该有两个灯亮吗?因为0是让灯亮。 |
|
相关推荐
9个回答
|
|
请把完整的代码贴一下,你那个val不知道是多少哦
|
|
|
|
void delay(volatile int d)
{ while (d--); } int main(void) { volatile unsigned int *pGPFCON = (volatile unsigned int *)0x56000050; volatile unsigned int *pGPFDAT = (volatile unsigned int *)0x56000054; int val = 0; /* val: 0b000, 0b111 */ int tmp; /* 设置GPFCON让GPF4/5/6配置为输出引脚 */ *pGPFCON &= ~((3<<8) | (3<<10) | (3<<12)); *pGPFCON |= ((1<<8) | (1<<10) | (1<<12)); /* 循环点亮 */ while (1) { tmp = ~val; tmp &= 7; *pGPFDAT &= ~(7<<4); *pGPFDAT |= (tmp<<4); delay(100000); val++; if (val == 8) val =0; } return 0; } 这是原来的代码, |
|
|
|
tmp = ~val; | 1
tmp &= 7; | 1 & 0111 == 0001 *pGPFDAT |= (tmp<<4); | *pGPFDAT |= 0001 0000 仅仅是把第五位置1了,0才会亮 |
|
|
|
但初始的时候就一个灯亮,现在两个0,初始应该两个灯亮不是吗?
|
|
|
|
哪里两个0?
|
|
|
|
*pGPFDAT |= 0001 0000 不是第四位是1,剩下五六两位不是0 吗? 0不是该亮吗?
|
|
|
|
*pGPFDAT |= 0001 0000 不是第四位是1,剩下五六两位不是0 吗? 0不是该亮吗?
|
|
|
|
我知道哪里问题了val的取反不是1,而是11111111111,因为是安位取反。
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
197个成员聚集在这个小组
加入小组为什么点亮LED的例子放在NORFlash上跑会出现奇怪的现象?
2166 浏览 6 评论
1975 浏览 5 评论
韦东山老师推出的《玩转ARM裸机实战》课程将帮你以上问题一扫而光!
4529 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-3 01:08 , Processed in 0.912212 second(s), Total 98, Slave 77 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号