<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

單片機編程實例總結

MCU開發加油站 ? 來源:51單片機學習網 ? 2024-01-16 09:17 ? 次閱讀

*實例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
    led
    +關注

    關注

    237

    文章

    22550

    瀏覽量

    646856
  • 單片機
    +關注

    關注

    6008

    文章

    44087

    瀏覽量

    623080
  • 寄存器
    +關注

    關注

    30

    文章

    5164

    瀏覽量

    118135
  • 編程
    +關注

    關注

    88

    文章

    3450

    瀏覽量

    92706

原文標題:單片機編程實例大全(1-28)

文章出處:【微信號:mcugeek,微信公眾號:MCU開發加油站】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    單片機C語言編程實例

    本帖最后由 igbt 于 2011-4-29 19:12 編輯 單片機C語言編程實例[hide][/hide]
    發表于 04-29 19:09

    單片機編程實例大全

    單片機編程實例大全
    發表于 08-17 17:09

    4 單片機編程實例大全 188頁

    4 單片機編程實例大全
    發表于 12-05 20:38

    單片機通信與控制應用編程實例

    單片機通信與控制應用編程實例》學習課本
    發表于 06-01 13:28

    超全單片機編程實例

    超全單片機編程實例
    發表于 07-05 22:07

    求freescale單片機編程實例資料

    應公司要求,必須學會單片機,公司用的是freescale的單片機(MC9S12),手上已有介紹MC9S12的原理書,前些天看這本原理書,頭都看大了還是看不懂,現在想邊做編程實例,邊看原
    發表于 08-11 21:32

    單片機C語言編程實例分享

    分享單片機C語言編程實例1.2.3
    發表于 12-26 15:11

    單片機C語言編程實例

    `本書結合目前應用非常廣泛的C語言以及Keil C51編譯器,詳細介紹單片機C語言編程的方法。本書通過大量應用實例單片機資源及其外圍芯片進行詳細介紹。`
    發表于 06-22 10:29

    單片機C語言編程實例

    單片機C語言編程實例 學習單片機開發非常不錯的資料。
    發表于 01-11 14:50 ?40次下載

    單片機編程實例大全

    受錄了多種實例單片機編程,非常實用,與大家分享。
    發表于 03-23 17:06 ?65次下載

    avr單片機C語言編程與應用實例

    avr系列單片機C語言編程與應用實例 書籍
    發表于 08-31 16:11 ?0次下載

    51單片機中斷編程實例詳解

    51單片機中斷編程實例詳解.pdf
    發表于 12-16 15:42 ?17次下載

    單片機實例總結合集

    單片機實例總結合集包括了:1. 閃爍燈, 00 -99 計數器,00 -59 秒計時器,按鍵識別方法等等
    發表于 08-13 17:43 ?23次下載
    <b class='flag-5'>單片機</b>的<b class='flag-5'>實例</b><b class='flag-5'>總結</b>合集

    單片機編程實例大全

    單片機編程實例大全
    的頭像 發表于 09-06 11:09 ?2158次閱讀

    單片機編程實例介紹

    是指使用特定的編程語言編寫控制單片機工作的程序。 在本文中,將為您提供一些常見的單片機編程實例,包括基礎應用、傳感器應用、通信應用等方面的案
    的頭像 發表于 01-16 09:37 ?2121次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>