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