#include<reg51.h> #include<stdio.h> #inclde<intrins. h> void delay(unsigned char time)//必須聲明函數,否則會出現下面的錯誤: void main() { P0 = 0xfe;//P必須大寫 while(1) { delay(200); P0 = _cror_(P0,1); } } void delay() { unsigned char I,j; for(i=0;i<=time;i++) { for(j=0;j<=200;j++) { _nop_();//空指令,根據單片機的機器周期計算 } } }
另一實現的方法:
sbit 位的應用
數據類型筆記:
數據類型
|
位數
|
字節數
|
數值范圍
|
說明
|
bit
|
1
|
|
0 or 1
|
位型
|
Signed char
|
8
|
1
|
-128——+127
|
有符號字節型
|
Unsigned char
|
8
|
1
|
0~255
|
字符或者八位無符號整數
|
enum
|
16
|
2
|
-32768~+32767
|
枚舉型
|
Signed short
|
16
|
2
|
-32768~+32767
|
有符號短整型
|
Unsigned short
|
16
|
2
|
0~6535
|
無符號短整型
|
Signed int
|
16
|
2
|
-32768~32767
|
|
Unsigned int
|
|
|
|
|
Signed long
|
|
|
|
|
Unsigned long
|
|
|
|
|
float
|
|
|
|
|
Sbit
|
1
|
|
0 1
|
位型
|
Sfr
|
8
|
1
|
0~255
|
8位特殊功能寄存器
|
Sfr16
|
|
|
|
|
|
|
|
|
|
程序代碼:
#include<reg51.h> #include<stdio.h> #include<intrins.h> sbit P0_0 = P0^0;//I/O口的定義方法,兩者的區別,不這樣定義的話就會說沒有定義 sbit P0_1 = P0^1; sbit P0_2 = P0^2; sbit P0_3 = P0^3; sbit P0_4 = P0^4; sbit P0_5 = p0^5; sbit P0_6 = P0^6; sbit P0_7 = P0^7; void delay(unsigned char time);//函數聲明,重要 void main() { while(1) { P0_0 = 0; delay(200); P0_1 = 0; delay(200); P0_3 = 0; delay(200); P0_4 = 0; delay(200); P0_5 = 0; delay(200); P0_6 = 0; delay(200); P0_7 = 0; delay(200); } void delay(unsigned char time) { unsigned char i,j; for(i=0;i<=time;i++) { for(j=0;j<=200;j++) { _nop_() } } } 控制亮滅程序: #include<reg51.h>//端口定義已包含在此頭文件中,故P0可以直接賦值 #include<stdio.h> #include<intrins.h> void delay(unsigned char time); void delay(unsigned char time) { unsigned i,j; for(i=0;i<=time;i++) { for(j=0;j<=200;j++) { _nop_(); } } } void main() { while(1) { P0 = 0x00; delay(200); P0 = 0xff; delay(200); } }