ARM裸机实现led循环闪烁
来源:互联网 发布:阿里云域名优惠 编辑:程序博客网 时间:2024/05/21 06:18
最近把我的ARM板当成单片机用,想通过这来给自己硬件方面充电点,虽然这方面不难,但是问题还是挺多的(可能是我的硬件知识天生的差劲吧)。下面介绍下我在编写我的第一个led点亮程序时遇到的问题。
首先,介绍下我的led资源,总共4个led,分别对应GPB5,GPB6,GPB7,GPB8。下面是我点亮四个灯相关程序:
void Led_Display(int LedStatus){ /* Active is low.(LED On) 87 6 5 GPB8 GPB7 GPB6 GPB5 nLED_4 nLED_3 nLED_2 nLED_1 rGPFDAT = (rGPFDAT & 0xf) | !((data & 0xf)<<4); */ if((LedStatus&0x01)==0x01)//PB5状态设置 rGPBDAT=rGPBDAT|0x020; // 0 0010 0000 LED0不亮elserGPBDAT=rGPBDAT&0x1c0; //rPDATC |1 1100 0000 点亮LED0if((LedStatus&0x02)==0x02)//Pb6状态设置rGPBDAT=rGPBDAT|0x040; //0 0100 0000 LED1不亮elserGPBDAT=rGPBDAT&0x1a0; //rPDATC & 1 1010 0000 LED1点亮if((LedStatus&0x04)==0x04)//Pb6状态设置rGPBDAT=rGPBDAT|0x080; //0 1000 0000 LED2不亮elserGPBDAT=rGPBDAT&0x160; //rPDATC & 1 0110 0000 LED2点亮if((LedStatus&0x08)==0x08)//PE5状态设置 rGPBDAT=rGPBDAT|0x100;//1 0000 0000 LED3不亮elserGPBDAT=rGPBDAT&0x0e0; ////rPDATC &0 1110 0000 LED3点亮 }
下面是显示程序:
void Led_Disp(void){Led_Display(0x08);//LED点亮/熄灭状态设置 LED2是灭的,其它的都是亮的dely(120);//延时若干个100usLed_Display(0x04);//LED点亮/熄灭状态设置 LED1是灭的,其它亮dely(120);//延时若干个100usLed_Display(0x02);//LED点亮/熄灭状态设置 LED0是灭的,其它亮dely(120);//延时若干个100usLed_Display(0x01);//LED点亮/熄灭状态设置 LED0是灭的,其它亮dely(120);//延时若干个100usLed_Display(0x02);//LED点亮/熄灭状态设置dely(120);//延时若干个100usLed_Display(0x04);//LED点亮/熄灭状态设置 LED0是灭的,其它亮dely(120);//延时若干个100usLed_Display(0x08);//LED点亮/熄灭状态设置dely(120);//延时若干个100us}这里很容易将" | " 跟" & "的关系搞乱,同时注意了,这是我出错前的代码:
void Led_Display(int LedStatus){ /* Active is low.(LED On) 87 6 5 GPB8 GPB7 GPB6 GPB5 nLED_4 nLED_3 nLED_2 nLED_1 rGPFDAT = (rGPFDAT & 0xf) | !((data & 0xf)<<4); */ if((LedStatus&0x01)==0x01)//PB5状态设置 rGPBDAT=rGPBDAT|0x020; // 0 0010 0000 LED0不亮elserGPBDAT=rGPBDAT&0x1c0; //rPDATC |1 1100 0000 点亮LED0if((LedStatus&0x02)==0x02)//Pb6状态设置rGPBDAT=rGPBDAT|0x040; //0 0100 0000 LED1不亮elserGPBDAT=rGPBDAT&0x1a0; //rPDATC & 1 1010 0000 LED1点亮if((LedStatus&0x03)==0x03)//Pb6状态设置rGPBDAT=rGPBDAT|0x080; //0 1000 0000 LED2不亮elserGPBDAT=rGPBDAT&0x160; //rPDATC & 1 0110 0000 LED2点亮if((LedStatus&0x04)==0x04)//PE5状态设置 rGPBDAT=rGPBDAT|0x100;//1 0000 0000 LED3不亮elserGPBDAT=rGPBDAT&0x0e0; ////rPDATC &0 1110 0000 LED3点亮 }
如果你这样写,很多人会发现,这应该没错误啊,可是当你下载到ARM板上去的时候,你就会发现,led在第三个led的时候,就出问题了。why?
首先肯定LedStatus&0x03)==0x03这肯定出问题了,但是什么问题呢?我就将第三个led熄灭情况调试了下,原来如此0000 0011&0000 0001=0000 0001,明白了吧.
- ARM裸机实现led循环闪烁
- ARM裸机点LED
- arm裸机程序--LED程序设计
- ARM-Tiny6410-裸机开发-Led && Button && Timer
- ARM LED裸机实验(gun汇编)
- ARM裸机程序--GPIO实验 LED(1)
- ARM裸机程序--GPIO实验 LED(2)
- ARM裸机程序之LED灯
- arm板裸机编程之led
- Tiny6410_SD卡启动_闪烁的led裸机程序
- 2440裸机程序——定时器控制LED灯闪烁
- FPGA 降频实现led的闪烁,LED不闪烁
- 编写led裸机程序并烧写到ARM开发板
- ARM裸机程序开发10(LED控制程序)
- ARM裸机程序开发之led流水灯程序
- ARM裸机开发-bootloader—点亮LED灯
- ARM裸机程序开发——按键控制LED灯
- 1.4.ARM裸机第四部分-GPIO和LED
- Ubuntu中安装zlib
- 从java读取Excel继续说大道至简 .
- Android高手的6个境界
- 复杂链表的复制
- 一步步构建大型网站架构
- ARM裸机实现led循环闪烁
- 把浏览器看成女人
- 网佳创投创始人唐滔:创业者融资犹如交女友,围而不追,重在吸引
- Android开发经验:成为高手必看的10个建议
- 命令行窗口运行nvcc 问题
- 农历
- oracle SQL语句中进行时间加减
- PHP strip_tags()去除HTML、XML以及 PHP 的标签
- http 错误代码表