源代码:
#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,所以只会有一个灯亮。
-----------------------------------------------------------坚持不懈,追求卓越-----------------------------------------------------------------