在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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
    +關注

    關注

    242

    文章

    23277

    瀏覽量

    660846
  • 單片機
    +關注

    關注

    6037

    文章

    44558

    瀏覽量

    635226
  • 寄存器
    +關注

    關注

    31

    文章

    5343

    瀏覽量

    120348
  • 編程
    +關注

    關注

    88

    文章

    3615

    瀏覽量

    93731

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

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

收藏 人收藏

    評論

    相關推薦

    AVR系統單片機C語言編程與應用實例

    AVR系統單片機C語言編程與應用實例針對Atmel公司的AVR系列單片機和ImageCraft公司的ICC AVR開發環境,詳細地介紹了AT90LS8535的C語言程序設計。全書共有1
    發表于 10-27 22:51 ?102次下載
    AVR系統<b class='flag-5'>單片機</b>C語言<b class='flag-5'>編程</b>與應用<b class='flag-5'>實例</b>

    AVR單片機C語言編程及應用實例

    AVR單片機C語言編程及應用實例:本書針對Atmel公司的AVR系列單片機和ImageCraft公司的ICC AVR開發環境,詳細地介紹了AT90LS8535的C語言程序設計。全書共有
    發表于 04-27 20:45 ?0次下載
    AVR<b class='flag-5'>單片機</b>C語言<b class='flag-5'>編程</b>及應用<b class='flag-5'>實例</b>

    51單片機動態LED顯示電路編程實例

    51單片機動態LED顯示電路編程實例:上一節我們講述了單只LED與單片機的接口電路及編程實例,目
    發表于 08-12 16:39 ?151次下載

    上海某公司PIC16F877單片機編程實例教程下載

    上海某公司PIC16F877單片機編程實例教程下載
    發表于 06-17 11:37 ?46次下載

    單片機C語言編程實例

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

    單片機編程實例大全

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

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

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

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

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

    單片機C語言編程實例PDF電子書免費下載

    單片機C語言編程實例》結合目前應用非常廣泛的C語言以及Keil C51編譯器,詳細介紹單片機C語言編程的方法。《
    發表于 08-28 17:46 ?226次下載

    單片機通信與控制應用編程實例實例源程序免費下載

    本文檔的主要內容詳細介紹的是單片機通信與控制應用編程實例實例源程序免費下載包括了:單片機開發板B的功能測試,使用查詢方式C51程序設計_
    發表于 09-11 08:00 ?47次下載
    <b class='flag-5'>單片機</b>通信與控制應用<b class='flag-5'>編程</b><b class='flag-5'>實例</b>的<b class='flag-5'>實例</b>源程序免費下載

    單片機實例總結合集

    單片機實例總結合集包括了: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>合集

    單片機編程100實例大全

    本文檔的主要內容詳細介紹的是單片機編程實例100例大全。
    發表于 01-19 17:41 ?1475次下載
    <b class='flag-5'>單片機</b>的<b class='flag-5'>編程</b>100<b class='flag-5'>實例</b>大全

    單片機C語言和匯編語言混合編程實例詳解

    單片機C語言和匯編語言混合編程實例詳解
    發表于 08-16 09:50 ?225次下載

    單片機編程實例大全

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

    單片機編程實例介紹

    是指使用特定的編程語言編寫控制單片機工作的程序。 在本文中,將為您提供一些常見的單片機編程實例,包括基礎應用、傳感器應用、通信應用等方面的案
    的頭像 發表于 01-16 09:37 ?2627次閱讀
    主站蜘蛛池模板: 在线观看a网站| 四虎网站| 男人和女人做a免费视频| 亚洲伊人久久大香线蕉影院| 日韩免费观看一级毛片看看| 播放欧亚一级特黄录像| www.99色| 天天操天天摸天天干| ggg成人| 天堂中文在线免费观看| 欧美色欧美色| 艹逼视频软件| 日本护士69xx00| 色婷婷在线视频观看| 精品久久久久久婷婷| 久久亚洲精选| 8050午夜一级| 日韩三级精品| 午夜免费福利网站| 热re99久久国产精品| 巨大欧美黑人xxxxbbbb| 一级片在线播放| 一道精品一区二区三区| 欧美伊人| 久久久久久久成人午夜精品福利| 中文字幕日韩三级| 国产黄色三级三级三级| 午夜在线视频网站| 日本三级黄| 免费在线观看一级片| 亚洲人成电影院在线观看| 久久久伊香蕉网站| 天天操天天干天天插| 最好免费高清视频观看韩国| 国产一区二区丁香婷婷| 97涩涩涩| 日本免费色| 国产午夜在线观看视频播放| 天堂资源www天堂在线| 午夜国产片| 5252a我爱haose01亚洲|