基于fl2440开发板的闪烁灯编程(采用c语言)

来源:互联网 发布:尼古丁口香糖 知乎 编辑:程序博客网 时间:2024/06/14 14:07

源代码:


#include"header.h"
#include"led.h"

#define GPBCON  (*(volatile unsigned *)0x56000010)
#define GPBDAT  (*(volatile unsigned *)0x56000014)
#define GPBUP   (*(volatile unsigned *)0x56000018)


/*
*****************************************************
*函数名称: Delay()
*函数功能: 延时
*参    数: int  x
*返 回 值: void
*****************************************************
*/
void Delay(int x) 
{
  int k, j;
  while(x)
  {
   for (k=0;k<=0xff;k++)
    for(j=0;j<=0xff;j++);
    
   x--;
  }
}

void led_main1()
{


 GPBCON = 0x1dd7fc; // GPB5,GPB6,GPB8,GPB10设置为输出
 GPBDAT = ((1<<5)|(1<<6)|(1<<8)|(1<<10)); //使LED全灭
 GPBDAT&=0xffe;  //关闭蜂鸣器
 GPBUP = 0x00;
 
 while (1)   // 死循环
 {
  
  GPBDAT = ~(1<<5); //LED0亮
  Delay(500);
  GPBDAT = ~(1<<6); //LED1亮
  Delay(500);
  GPBDAT = ~(1<<8); //LED2亮
  Delay(500);
  GPBDAT = ~(1<<10); //LED3亮
  Delay(500);
 }
 
}

书写的时候格式规范一定要写好。

 对多位进行置位  GPBDAT = ((1<<5)|(1<<6)|(1<<8)|(1<<10)); //使LED全灭

c语言的取反的知识补充:

printf("%x,%d\n",~7,~7);//输出:fffffff8,-8

源码编译环境vs.net2005、32位机

7(10)//.NETCLR规定整型变量默认为int类型,也就是说此处的7在内存中占有4个字节。

00000000 00000000 00000000 00000111(2)

按位取反运算
11111111 11111111 11111111 11111000
printf("%x\n",~7)//十六进制输出:fffffff8
printf("%d\n",~7)//十进制输出 :-8
需要注意的是计算机存储的是补码,然后取反是对每一位都取反,那么上面的GPBDAT = ~(1<<5); //LED0亮,这样除了2^5这一位取反之后为0,其他的都是1,所以只会有一个灯亮。


 

-----------------------------------------------------------坚持不懈,追求卓越-----------------------------------------------------------------