*實例1:使用P3口流水點亮8位LED
#include//包含單片機寄存器的頭文件 / 函數功能:延時一段時間
void delay(void)
{
unsigned char i,j;
for(i=0;i<250;i++)
for(j=0;j<250;j++)
;
}
/ 函數功能:主函數
void main(void)
{
while(1)
{
P3=0xfe; //第一個燈亮
delay(); //調用延時函數
P3=0xfd; //第二個燈亮
delay(); //調用延時函數
P3=0xfb; //第三個燈亮
delay(); //調用延時函數
P3=0xf7; //第四個燈亮
delay(); //調用延時函數
P3=0xef; //第五個燈亮
delay(); //調用延時函數
P3=0xdf; //第六個燈亮
delay(); //調用延時函數
P3=0xbf; //第七個燈亮
delay(); //調用延時函數
P3=0x7f; //第八個燈亮
delay(); //調用延時函數
} / /
}
*實例2:通過對P3口地址的操作流水點亮8位LED
#include//包含單片機寄存器的頭文件
sfr x=0xb0; //P3口在存儲器中的地址是b0H, 通過sfr可定義8051內核單片機
//的所有內部8位特殊功能寄存器,對地址x的操作也就是對P1口的操作
/
函數功能:延時一段時間
/
void delay(void)
{
unsigned char i,j;
for(i=0;i<250;i++)
for(j=0;j<250;j++)
; //利用循環等待若干機器周期,從而延時一段時間
}
/
函數功能:主函數
/
void main(void)
{
while(1)
{
x=0xfe; //第一個燈亮
delay(); //調用延時函數
x=0xfd; //第二個燈亮
delay(); //調用延時函數
x=0xfb; //第三個燈亮
delay(); //調用延時函數
x=0xf7; //第四個燈亮
delay(); //調用延時函數
x=0xef; //第五個燈亮
delay(); //調用延時函數
x=0xdf; //第六個燈亮
delay(); //調用延時函數
x=0xbf; //第七個燈亮
delay(); //調用延時函數
x=0x7f; //第八個燈亮
delay(); //調用延時函數
}
}
*實例3:用不同數據類型控制燈閃爍時間
#include//包含單片機寄存器的頭文件
/
函數功能:用整形數據延時一段時間
/
void int_delay(void) //延時一段較長的時間
{
unsigned int m; //定義無符號整形變量,雙字節數據,值域為0~65535 for(m=0;m<36000;m++)
; //空操作
}
/
函數功能:用字符型數據延時一段時間
/
void char_delay(void) //延時一段較短的時間
{
unsigned char i,j; //定義無符號字符型變量,單字節數據,值域0~255 for(i=0;i<200;i++)
for(j=0;j<180;j++)
; //空操作
}
/
函數功能:主函數
/
void main(void)
{
unsigned char i;
while(1)
{
for(i=0;i<3;i++)
{
P1=0xfe; //P1.0口的燈點亮
int_delay(); //延時一段較長的時間
P1=0xff; //熄滅
int_delay(); //延時一段較長的時間
}
for(i=0;i<3;i++)
{
P1=0xef; //P1.4口的燈點亮
char_delay(); //延時一段較長的時間
} P1=0xff; //熄滅 char_delay(); //延時一段較長的時間 } }
*實例4:用單片機控制第一個燈亮
#include//包含51單片機寄存器定義的頭文件
void main(void)
{
P1=0xfe; //P1=1111 1110B,即P1.0輸出低電平
}
*實例5:用單片機控制一個燈閃爍:認識單片機的工作頻率 #include//包含單片機寄存器的頭文件
*實例6:將 P1口狀態分別送入P0、P2、P3口:認識I/O口的引腳功能
#include//包含單片機寄存器的頭文件
/ 函數功能:主函數 (C語言規定必須有也只能有1個主函數) /
void main(void)
{
while(1) //無限循環
{
P1=0xff; // P1=1111 1111B,熄滅LED
P0=P1; // 將 P1口狀態送入P0口
P2=P1; // 將 P1口狀態送入P2口
P3=P1; // 將 P1口狀態送入P3口
}
}
*實例7:用P0口、P1 口分別顯示加法和減法運算結果 #include
void main(void)
{
unsigned char m,n;
m=43; //即十進制數2x16+11=43
n=60; //即十進制數3x16+12=60
P1=m+n; //P1=103=0110 0111B,結果P1.3、P1.4、P1.7 口的燈被點亮 P0=n-m; //P0=17=0001 0001B,結果P0.0、P0.4的燈被熄滅 }
*實例8:用P0、P1口顯示乘法運算結果
#include//包含單片機寄存器的頭文件
void main(void)
{
unsigned char m,n;
unsigned int s;
m=64;
n=71;
s=m n; //s=64 71=4544,需要16位二進制數表示,高8位送P1口,低8位送P0口
//由于4544=17 256+192=H3 16 16 16+H2 16 16+H1 16+H0
//兩邊同除以256,可得17+192/256=H3 16+H2+(H1 16+H0)/256
//因此,高8位16進制數H3 16+H2必然等于17,即4544除以256的商
//低8位16進制數H1 16+H0必然等于192,即4544除以256的余數
P1=s/256; //高8位送P1口 ,P1=17=11H=0001 0001B, P1.0和P1.4口滅,其余亮
P0=s%256; //低8位送P0口 , P3=192=c0H=1100 0000B,P3.1,P3.6,P3.7口滅,其余亮
}
*實例9:用P1、P0口顯示除法運算結果
#include//包含單片機寄存器的頭文件
void main(void)
{
P1=36/5; //求整數
P0=((36%5) 10)/5; //求小數
while(1)
; //無限循環防止程序“跑飛”
}
*實例10:用自增運算控制P0口8位LED流水花樣
#include//包含單片機寄存器的頭文件
/
函數功能:延時一段時間
/
void delay(void)
{
unsigned int i;
for(i=0;i<20000;i++)
;
}
/ 函數功能?:主函數
/ void main(void)
{
unsigned char i;
for(i=0;i<255;i++) //注意i的值不能超過255
{
P0=i; //將i的值送P0口
delay(); //調用延時函數
}
}
*實例11:用P0口顯示邏輯"與"運算結果 #include//包含單片機寄存器的頭文件void main(void)
{
P0=(4>0)&&(9>0xab);//將邏輯運算結果送P0口
while(1)
; //設置無限循環,防止程序“跑飛”
}
*實例12:用P0口顯示條件運算結果
#include//包含單片機寄存器的頭文件 void main(void)
{
P0=(8>4)?8:4;//將條件運算結果送P0口,P0=8=0000 1000B while(1)
; //設置無限循環,防止程序“跑飛”
}
*實例13:用P0口顯示按位"異或"運算結果 #include//包含單片機寄存器的頭文件void main(void)
{
P0=0xa2^0x3c;//將條件運算結果送P0口,P0=8=0000 1000B while(1)
; //設置無限循環,防止程序“跑飛”
}
*實例14:用P0顯示左移運算結果
#include//包含單片機寄存器的頭文件 void main(void)
{
P0=0x3b<<2;//將左移運算結果送P0口,P0=1110 1100B=0xec while(1)
; //無限循環,防止程序“跑飛”
}
*實例15:"萬能邏輯電路"實驗
#include//包含單片機寄存器的頭文件
sbit F=P1^4; //將F位定義為 P1.4
sbit X=P1^5; //將X位定義為 P1.5
sbit Y=P1^6; //將Y位定義為 P1.6
sbit Z=P1^7; //將Z位定義為 P1.7
void main(void)
{
while(1)
{
F=((~X)&Y)|Z; //將邏輯運算結果賦給F
;
}
}
*實例16:用右移運算流水點亮P1口8位LED #include//包含單片機寄存器的頭文件
/
函數功能:延時一段時間
/
void delay(void)
{
unsigned int n;
for(n=0;n<30000;n++)
;
}
/
函數功能:主函數
/
void main(void)
{
unsigned char i;
while(1)
{
P1=0xff;
delay();
for(i=0;i<8;i++)//設置循環次數為8
{
P1=P1>>1; //每次循環P1的各二進位右移1位,高位補0 delay(); //調用延時函數
}
}
}
*實例17:用if語句控制P0口8位LED的流水方向 #include//包含單片機寄存器的頭文件
sbit S1=P1^4; //將S1位定義為P1.4
sbit S2=P1^5; //將S2位定義為P1.5
/
函數功能:主函數
/
void main(void)
{
while(1)
}
{ if(S1==0) //如果按鍵S1按下 P0=0x0f; //P0口高四位LED點亮 if(S2==0) //如果按鍵S2按下 P0=0xf0; //P0口低四位LED點亮 }
*實例18:用swtich語句的控制P0口8位LED的點亮狀態 #include//包含單片機寄存器的頭文件
sbit S1=P1^4; //將S1位定義為P1.4
/
函數功能:延時一段時間
/
void delay(void)
{
unsigned int n;
for(n=0;n<10000;n++)
;
}
/
函數功能:主函數
/
void main(void)
{
unsigned char i;
i=0; //將i初始化為0
while(1)
{
if(S1==0) //如果S1鍵按下
{
delay(); //延時一段時間
if(S1==0) //如果再次檢測到S1鍵按下
i++; //i自增1
if(i==9) //如果i=9,重新將其置為1
i=1;
}
switch(i) //使用多分支選擇語句
{
}
} case 1: P0=0xfe; //第一個LED亮 break; case 2: P0=0xfd; //第二個LED亮 break; case 3:P0=0xfb; //第三個LED亮 break; case 4:P0=0xf7; //第四個LED亮 break; case 5:P0=0xef; //第五個LED亮 break; case 6:P0=0xdf; //第六個LED亮 break; case 7:P0=0xbf; //第七個LED亮 break; case 8:P0=0x7f; //第八個LED亮 break; default: //缺省值,關閉所有LED P0=0xff; }
*實例19:用for語句控制蜂鳴器鳴笛次數
#include//包含單片機寄存器的頭文件 sbit sound=P3^7; //將sound位定義為P3.7 / 函數功能:延時形成1600Hz音頻
/ void delay1600(void)
{
unsigned char n;
for(n=0;n<100;n++)
;
}
/ 函數功能:延時形成800Hz音頻
/ void delay800(void)
{
unsigned char n;
for(n=0;n<200;n++)
;
}
/ 函數功能:主函數
/ void main(void)
{
unsigned int i;
while(1)
{
for(i=0;i<830;i++)
{
sound=0; //P3.7輸出低電平 delay1600();
sound=1; //P3.7輸出高電平 delay1600();
}
for(i=0;i<200;i++)
{
sound=0; //P3.7輸出低電平 delay800();
sound=1; //P3.7輸出高電平 delay800();
}
}
}
*實例20:用while語句控制LED
#include//包含單片機寄存器的頭文件 / 函數功能:延時約60ms (3 100 200=60000μs) / void delay60ms(void)
{
unsigned char m,n;
for(m=0;m<100;m++)
for(n=0;n<200;n++)
;
}
/
函數功能:主函數
/
void main(void)
{
unsigned char i;
while(1) //無限循環
{
i=0; //將i初始化為0
while(i<0xff) //當i小于0xff(255)時執行循環體 {
P0=i; //將i送P0口顯示
delay60ms(); //延時
i++; //i自增1
}
}
}
*實例21:用do-while語句控制P0口8位LED流水點亮 #include//包含單片機寄存器的頭文件
/
函數功能:延時約60ms (3 100 200=60000μs)
/
void delay60ms(void)
{
unsigned char m,n;
for(m=0;m<100;m++)
for(n=0;n<200;n++)
;
}
/
函數功能:主函數
/
void main(void)
{
do
{
P0=0xfe; //第一個LED亮
delay60ms();
}
P0=0xfd; //第二個LED亮 delay60ms(); P0=0xfb; //第三個LED亮 delay60ms(); P0=0xf7; //第四個LED亮 delay60ms(); P0=0xef; //第五個LED亮 delay60ms(); P0=0xdf; //第六個LED亮 delay60ms(); delay60ms(); P0=0xbf; //第七個LED亮 delay60ms(); P0=0x7f; //第八個LED亮 delay60ms(); }while(1); //無限循環,使8位LED循環流水點亮
*實例22:用字符型數組控制P0口8位LED流水點亮 #include//包含單片機寄存器的頭文件
/
函數功能:延時約60ms (3 100 200=60000μs)
/
void delay60ms(void)
{
unsigned char m,n;
for(m=0;m<100;m++)
for(n=0;n<200;n++)
;
}
/
函數功能:主函數
/
void main(void)
{
unsigned char i;
unsigned char code Tab[ ]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //定義無符號字符型數組
while(1)
{
for(i=0;i<8;i++)
{
P0=Tab[i];//依次引用數組元素,并將其送P0口顯示
delay60ms();//調用延時函數
}
}
}
*實例23:用P0口顯示字符串常量
#include//包含單片機寄存器的頭文件
/
函數功能:延時約150ms (3 200 250=150 000μs=150ms
/
void delay150ms(void)
{
unsigned char m,n;
for(m=0;m<200;m++)
for(n=0;n<250;n++)
;
}
/
函數功能:主函數
/
void main(void)
{
unsigned char str[]={"Now,Temperature is :"}; //將字符串賦給字符型全部元素賦值
unsigned char i;
while(1)
{
i=0; //將i初始化為0,從第一個元素開始顯示
while(str[i]!='?') //只要沒有顯示到結束標志'?'
{
P0=str[i]; //將第i個字符送到P0口顯示
delay150ms(); //調用150ms延時函數
i++; //指向下一個待顯字符
}
}
}
*實例24:用P0 口顯示指針運算結果
#include
void main(void)
{
unsigned char p1, p2; //定義無符號字符型指針變量p1,p2 unsigned char i,j; //定義無符號字符型數據
i=25; //給i賦初值25
j=15;
p1=&i; //使指針變量指向i ,對指針初始化
p2=&j; //使指針變量指向j ,對指針初始化
P0= p1+ p2; // p1+ p2相當于i+j,所以P0=25+15=40=0x28
//則P0=0010 1000B,結果P0.3、P0.5引腳LED熄滅,其余點亮 while(1)
; //無限循環,防止程序“跑飛”
}
*實例25:用指針數組控制P0口8位LED流水點亮 #include
/
函數功能:延時約150ms (3 200 250=150 000μs=150ms
/
void delay150ms(void)
{
unsigned char m,n;
for(m=0;m<200;m++)
for(n=0;n<250;n++)
;
}
/
函數功能:主函數
/
void main(void)
{
unsigned char code Tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char p[ ]={&Tab[0],&Tab[1],&Tab[2],&Tab[3],&Tab[4],&Tab[5], &Tab[6],&Tab[7]};
unsigned char i; //定義無符號字符型數據
while(1)
{
for(i=0;i<8;i++)
{
P0= p[i];
delay150ms();
}
}
}
*實例26:用數組的指針控制P0 口8 位LED流水點亮 #include
/
函數功能:延時約150ms (3 200 250=150 000μs=150ms
/
void delay150ms(void)
{
unsigned char m,n;
for(m=0;m<200;m++)
for(n=0;n<250;n++)
;
}
/
函數功能:主函數
/
void main(void)
{
unsigned char i;
unsigned char Tab[ ]={0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF, 0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE, 0xFE,0xFC,0xFB,0xF0,0xE0,0xC0,0x80,0x00, 0xE7,0xDB,0xBD,0x7E,0x3C,0x18,0x00,0x81, 0xC3,0xE7,0x7E,0xBD,0xDB,0xE7,0xBD,0xDB}; //流水燈控制碼
unsigned char p; //定義無符號字符型指針
p=Tab; //將數組首地址存入指針p
while(1)
{
for(i=0;i<32;i++) //共32個流水燈控制碼
{
P0= (p+i); // (p+i)的值等于a[i]
}
delay150ms(); //調用150ms延時函數 } }
*實例27:用P0 、P1口顯示整型函數返回值 #include
/ 函數功能:計算兩個無符號整數的和
/ unsigned int sum(int a,int b)
{
unsigned int s;
s=a+b;
return (s);
}
/ 函數功能:主函數
/ void main(void)
{
unsigned z;
z=sum(2008,2009);
P1=z/256; //取得z的高8位
P0=z%256; //取得z的低8位
while(1)
;
}
*實例28:用有參函數控制P0口8位LED流水速度 #include
/ 函數功能:延時一段時間
/ void delay(unsigned char x)
{
unsigned char m,n;
for(m=0;m
for(n=0;n<200;n++)
;
}
/
函數功能:主函數
/
void main(void)
{
unsigned char i;
unsigned char code Tab[ ]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F}; //流水燈控制碼
while(1)
{
//快速流水點亮LED
for(i=0;i<8;i++) //共8個流水燈控制碼
{
P0=Tab[i];
delay(100); //延時約60ms, (3 100 200=60 000μs) }
//慢速流水點亮LED
for(i=0;i<8;i++) //共8個流水燈控制碼
{
P0=Tab[i];
delay(250); //延時約150ms, (3 250 200=150 000μs) }
}
}
來源:51單片機學習網
審核編輯:湯梓紅
-
led
+關注
關注
242文章
23277瀏覽量
660846 -
單片機
+關注
關注
6037文章
44558瀏覽量
635226 -
寄存器
+關注
關注
31文章
5343瀏覽量
120348 -
編程
+關注
關注
88文章
3615瀏覽量
93731
原文標題:單片機編程實例大全(1-28)
文章出處:【微信號:mcugeek,微信公眾號:MCU開發加油站】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論