&:按位元與
|:按位元或
~:按位元取反
^:按位元互斥或
舉例說明:
A=1 1 0 0 1 1 0 0
B=1 1 1 1 0 0 0 0
A&B=1 1 0 0 0 0 0 0
A|B=1 1 1 1 1 1 0 0
~A=0 0 1 1 0 0 1 1
A^B=0 0 1 1 1 1 0 0
迴圈左移_crol_和迴圈右移_cror_:
微控制器有一個庫檔案已經寫好了移位函數,儲存在#include<intrins.h>庫檔案裡。
變數=crol(變數名,移動位數)
P0= 0xfe; // 1111 1110
P0=crol(P0,1);
此時,P0=0xfd;//1111 1101
#include <reg51.h> //51微控制器標頭檔案
#include <intrins.h> //包含迴圈移位指令的標頭檔案
#define uchar unsigned char //宏定義 unsigned char 為 uchar
#define uint unsigned int //宏定義 unsigned int 為 uint
sbit k1 = P3 ^ 2;
sbit k2 = P3 ^ 3;
sbit k3 = P3 ^ 4;
sbit k4 = P3 ^ 5;
void delay_us(uint us) //延時子程式
{
uint a; //宣告變數a取值為0-65535
for(a=0;a<us;a++);
}
void start_1() //第一題
{
uchar a,b;
b=0xfe; //1111 1110
for(a=0;a<7;a++) //從右到左
{
P0 = b;
delay_us(50000);
b=_crol_(b,1);
}
for(a=0;a<7;a++) //從左到右
{
P0 = b;
delay_us(50000);
b=_cror_(b,1);
}
}
void start_2() //第二題
{
uchar a,b;
b=0xfe; //1111 1110
for(a=0;a<7;a++) //從右到左
{
P0 = 0xe7 & b; //1110 0111 & b
delay_us(50000);
b=_crol_(b,1);
}
for(a=0;a<7;a++) //從左到右
{
P0 = 0xe7 & b; //1110 0111 & b
delay_us(50000);
b=_cror_(b,1);
}
}
void start_3() //第三題
{
uchar a,b,c;
b=0x7f; //0111 1111
c=0xfe; //1111 1110
for(a=0;a<3;a++) //從兩邊到中間
{
P0 = b & c;
delay_us(50000);
b=_cror_(b,1);
c=_crol_(c,1);
}
for(a=0;a<3;a++) //從中間到兩邊
{
P0 = b & c;
delay_us(50000);
b=_crol_(b,1);
c=_cror_(c,1);
}
}
void start_4() //第四題
{
uchar a;
for(a=0;a<8;a++) //從左到右依次亮起
{
P0 = 0x7f >> a; //0111 1111 >> a
delay_us(50000);
}
for(a=0;a<8;a++) //從右到左依次滅掉
{
P0 = ~(0xff<<a); //1111 1111 << a 按位元取反
delay_us(50000);
}
}
void start_5() //第五題
{
uchar a,b,c,d;
c=0xff; //1111 1111
for(i=0;i<9;i++)
{
b=0xfe; //1111 1110
for(a=0;a<8;a++)
{
P0= b & c;
delay_us(50000);
b=_cror_(b,1);
}
c=c<<1;
}
}
void start_6() //第六題
{
uchar a,b,c,d,e;
b=0xfe; //1111 1110
for(d=0;d<9;d++)
{
if(e>0)
{
b=_cror_(b,1);
}
a=0xfe; //1111 1110
for(e=0;e<d+1;e++)
{
P0= c;
delay_us(50000);
a=_cror_(a,1);
c= a & b;
}
}
}
void start_7() //第七題
{
uint a=0;
uint b=500;
uchar c=0x00; //0000 0000
uchar d=0xff; //1111 1111
while(b)
{
P0= c;
delay_us(b--);
P0= d;
delay_us(a++);
}
while(a)
{
P0= c;
delay_us(b++);
P0= d;
delay_us(a--);
}
}
void main()
{
if(k1==0)
{
start_1();
start_2();
start_3();
start_4();
start_5();
start_6();
start_7();
}
}