非洲老人 发表于 2009-12-27 09:10:50

LED 实验 全亮全灭 有点疑问

有个疑问在 \TQ2440_Test\src\2440lib.c    BOARD LED里面
rGPBDAT = (rGPBDAT & ~(0xf<<5)) | ((~data & 0xf)<<5);   有什么用 ?
刚开始    LED2 和LED3 总是亮 后我把这句屏蔽了才可以控制LED全亮全灭

还有 寄存器赋值 为什么要写成rGPBCON = rGPBCON & ~0x3d57fc|0x3d57fc;
在实验中 我写成    //    rGPBDAT = 0xfffffe1e ;          //    全亮
       
                   rGPBDAT = 0xfffffffe ;      //    全灭   
没有什么影响啊 ?上面那样写有什么好处吗?


下面是我做的可以全亮全灭( GPB0是蜂鸣器 我把它赋0了)

denny_you 发表于 2009-12-28 00:30:28

其实呢,rGPBDAT = (rGPBDAT & ~(0xf<<5)) | ((~data & 0xf)<<5);   这句话你改成
rGPBDAT = (~data & 0xf)<<5; 同样可以实现。前面那一段自己去理解吧,注意input和output。

LED1~4连接着GPB5~8,所以data需要左移5位,而data要取反是因为低电平才点亮LED。
假如data = 0x01,那就是 LED1 亮
假如data = 0x0f,那就是 LED1~4 全 亮

还有你说到源程序那样写有什么好处,好处就是方便维护和修改程序。
页: [1]
查看完整版本: LED 实验 全亮全灭 有点疑问