關閉→
當前位置:知科普>IT科技>at89c51單片機流水燈c語言程序及詳解是什麼

at89c51單片機流水燈c語言程序及詳解是什麼

知科普 人氣:2.13W

AT89C51單片機是學習單片機必學的一個單片機,也是單片機入門的教材,下面給大家展示一下流水燈的編寫方法,這種方法比較適合初學者。

材料/工具

電腦 keill,proteus

方法

首先先在proteus畫出仿真圖,方便仿真程序。

at89c51單片機流水燈c語言程序及詳解是什麼

通過編譯軟件來編寫程序,先來寫入頭函數。

at89c51單片機流水燈c語言程序及詳解是什麼 第2張

根據自己在proteus畫的圖,定義一下管腳根據你的原理圖進行編寫

sbit p0=P1^0;

sbit p1=P1^1;

sbit p2=P1^2;

sbit p3=P1^3;

sbit p4=P1^4;

sbit p5=P1^5;

sbit p6=P1^6;

sbit p7=P1^7;

at89c51單片機流水燈c語言程序及詳解是什麼 第3張

然後寫一個延時函數,來調節流水燈的時間間隔延時時間自己定義

void mdelay(unsigned int t)

{

unsigned char n;

for(;t>0;t--)

for(n=0;n<125;n++)

{;}

}

at89c51單片機流水燈c語言程序及詳解是什麼 第4張

下面就是主函數,包括流水燈的反覆循環和j流水燈的方向。

at89c51單片機流水燈c語言程序及詳解是什麼 第5張

at89c51單片機流水燈c語言程序及詳解是什麼 第6張

at89c51單片機流水燈c語言程序及詳解是什麼 第7張

檢查沒有錯誤,編譯一下。就可以進行仿真了。

擴展閲讀,以下內容您可能還感興趣。

求個51單片機at89c51心形流水燈,程序

這是一個比較全的程序,花樣較多,供參考。

#include<reg51.h>

#include <intrins.h>

#define uint unsigned int

#define uchar unsigned char

void delay(uint k)   

{    

       uinti,j;

       for(i=k;i--;i>0)

              for(j=100;j--;j>0);

}

void main()

{    

       uchartemp0,temp1;

       ucharyi;

       ucharyi0,yi1;                  

       uinti,j,k,a,b;

       j=k=a=b=3;   

                                                               //全部亮

       P0=P1=P2=P3=0x00;

       delay(700);

       P0=P1=P2=P3=0xff;    

                                                               //每個io口獨自亮

       for(i=2;i--;i>0)

       {

              P1=P0=0x00;

              delay(500);

              P1=P0=0xff;

              P3=P2=0x00;

              delay(500);

              P3=P2=0xff;

       }

                                                               //閃爍3次

       for(i=2;i--;i>0)

       {

              P0=P1=P2=P3=0x00;

              delay(100);

              P0=P1=P2=P3=0xff;

              delay(100);

       }

                                                               //P1、P2亮,P3、P0暗

       for(i=3;i--;i>0)

       {

              P1=0x00,P2=0x00; P3=0xff,P0=0xff;

              delay(500);

              P1=0xff,P2=0xff,P3=0x00,P0=0x00;

              delay(500);

       }

 

                                                               //四個點的流水

 

       while(j>0)

       {

              temp0=0xfe,temp1=0x7f;

              P1=P3=temp0,P2=P0=temp1;

              delay(100);

              for(i=7;i--;i>0)

              {

                     temp0=_crol_(temp0,1),temp1=_cror_(temp1,1);

                     P1=P3=temp0,P2=P0=temp1;

                     delay(100);

              }

               j--;

        }

                                                                //全部亮,閃三次

       for(i=3;i--;i>0)

       {

              P0=P1=P2=P3=0x00;

              delay(300);

              P0=P1=P2=P3=0xff;

              delay(300);

       }                     

 

                                                               //四個IO口同樣跟蹤流水

       while(k>0)

       {

              temp0=0xfe,temp1=0x7f;

              P1=P3=temp0,P2=P0=temp1;

              delay(60);

              for(i=7;i--;i>0)

              {

                     temp0=temp0<<1,temp1=temp1>>1;

                     P1=P3=temp0,P2=P0=temp1;

                     delay(60);

              }

              k--;

        }

        P0=P1=P3=P2=0xff;

        while(k<3)

        {

               temp0=0x7f,temp1=0xfe;

               P1=P3=temp0,P2=P0=temp1;

               delay(60);

               for(i=7;i--;i>0)

                {

                    temp0=temp0>>1,temp1=temp1<<1;

                     P1=P3=temp0,P2=P0=temp1;

                     delay(60);

                }

               k++;

        }

        P3=P2=0xff;

                                                       //兩邊單個從上向下流水

       yi=0xfe;

       P1=P0=yi;

       delay(50);

       for(i=7;i--;i>0)

       {

              yi=_crol_(yi,1);

              P1=P0=yi;

              delay(50);

       }

       P1=P0=0xff;

       yi=0xfe;

       P3=P2=yi;

       delay(50);

       for(i=7;i--;i>0)

       {

              yi=_crol_(yi,1);

              P3=P2=yi;

              delay(50);

       }

       P3=P2=0Xff;

                                                         //兩邊單個返回流水

       for(i=7;i--;i>0)                     

       {

              yi=_cror_(yi,1);

              P3=P2=yi;

              delay(50);

       }

       P3=P2=0xff;

       for(i=7;i--;i>0)

       {

              yi=_cror_(yi,1);

              P0=P1=yi;

              delay(50);

       }                                                     

                                                     //全部亮,閃三次

       P0=P1=P3=P2=0xff;

       for(i=3;i--;i>0)

       {

              P0=P1=P2=P3=0x00;

              delay(100);

              P0=P1=P2=P3=0xff;

              delay(100);

       }

                                                   //流水燈

 

       yi0=0xfe,yi1=0x7f;

       P3=P2=yi1,P1=P0=yi0;

       delay(100);

       for(i=7;i--;i>0)

       {

               yi0=yi0<<1, yi1=yi1>>1;

               P1=P0=yi0,P3=P2=yi1;

               delay(100);

       }

       P1=P2=P3=P0=0xff;

       delay(200);

       yi0=0x7f,yi1=0xfe;

       P1=P0=yi0,P3=P2=yi1;

       for(i=7;i--;i>0)

       {

              yi0=yi0>>1,yi1=yi1<<1;

              P1=P0=yi0,P3=P2=yi1;

              delay(100);    

       }

                                                      //大循環跟蹤流水

       P1=P2=P3=P0=0xff;

       for(i=8;i--;i>0)

       {

               P1=P1<<1;

               delay(50);

       }

       for(i=8;i--;i>0)

       {

               P3=P3<<1;

               delay(50);

       }

 

       for(i=8;i--;i>0)

       {

               P2=P2>>1;

               delay(50);

       }

       for(i=8;i--;i>0)

       {

               P0=P0>>1;

               delay(50);

       }                                       

                                                            //逆向大循環跟蹤流水

 

       P1=P2=P3=P0=0xff;

       for(i=8;i--;i>0)

       {

               P0=P0<<1;

               delay(50);

       }

       for(i=8;i--;i>0)

       {

               P2=P2<<1;

               delay(50);

       }

       for(i=8;i--;i>0)

       {

               P3=P3>>1;

               delay(50);

       }

       for(i=8;i--;i>0)

       {

               P1=P1>>1;

               delay(50);

       }

//全部亮,閃三次

       P0=P1=P3=P2=0xff;

       for(i=4;i--;i>0)

       {

              P0=P1=P2=P3=0x00;

              delay(100);

              P0=P1=P2=P3=0xff;

              delay(100);

       }

                                                                    //全部亮,只有一個暗的在流水

      

       temp0=0x01,temp1=0x00;

       P1=P0=temp0,P3=P2=temp1;

       delay(100);

       for(i=7;i--;i>0)

       {

              temp0=_crol_(temp0,1);

              P1=P0=temp0;

              delay(100);

       }

       P1=P0=0x00;

       temp1=0x01;

       P3=P2=temp1;

       delay(100);

       for(i=7;i--;i>0)

       {

              temp1=_crol_(temp1,1);

              P3=P2=temp1;

              delay(100);

       }

                                                                     //全部亮,逆向一個暗在流水

       temp0=0x00,temp1=0x80;

       P1=P0=temp0,P3=P2=temp1;

       delay(100);

       for(i=7;i--;i>0)

       {    

              temp1=_cror_(temp1,1);

              P3=P2=temp1;

              delay(100);

       }

       P3=P2=0x00;

       temp0=0x80;

       P1=P0=temp0;

       delay(100);

       for(i=7;i--;i>0)

       {

              temp0=_cror_(temp0,1);

              P1=P0=temp0;

              delay(100);

       }

                                                                  //花樣

       temp0=0xaa,temp1=0x55;

       P1=P3=temp0,P2=P0=temp1;

       delay(500);

       for(;a--;a>0)

              {

                     for(i=7;i--;i>0)

                     {

                            temp0=_crol_(temp0,1),temp1=_cror_(temp1,1);

                            P1=P3=temp0,P2=P0=temp1;

                            delay(500);    

                     }

 

               }

       for(;b--;b>0)

              {

                     temp0=0xee,temp1=0x77;

                     P1=P3=temp0,P2=P0=temp1;

                     delay(300);

                     for(i=7;i--;i>0)

                     {

                            temp0=_crol_(temp0,1),temp1=_cror_(temp1,1);

                            P1=P3=temp0,P2=P0=temp1;

                            delay(300);    

                     }

              }   

                                                                            //環形逐個亮

                                                                                   

       P1=P2=P3=P0=0xff;

       for(i=8;i--;i>0)

       {

               P0=P0<<1;

               delay(50);

       }

       for(i=8;i--;i>0)

       {

               P2=P2<<1;

               delay(50);

       }

       for(i=8;i--;i>0)

       {

               P3=P3>>1;

               delay(50);

       }

       for(i=8;i--;i>0)

       {

               P1=P1>>1;

               delay(50);

       }

                                                                                          //逐個熄滅e799bee5baa6e78988e69d8331333339663961

       for(i=7;i--;i>0)

       {

              P0=~P0<<1;

              P0=~P0;

              delay(50);

       }

       P0=0xff;

 

       for(i=7;i--;i>0)

       {

              P2=~P2<<1;

              P2=~P2;

              delay(50);

       }

       P2=0xff;

       for(i=7;i--;i>0)

       {

              P3=~P3>>1;

              P3=~P3;

              delay(50);

       }

       P3=0xff;

       for(i=7;i--;i>0)

       {

              P1=~P1>>1;

              P1=~P1;

              delay(50);

       }

       P1=0xff;   

}

單片機流水燈程序

最低0.27元/天開通百度文庫會員,可在文庫查看完整內容>

原發布者:蔣455033051

流水燈程序閒來沒事,就總結一下流水燈的工作,用兩種語言實驗C語言和彙編e799bee5baa6e79fa5e98193e4b893e5b19e31333433623739語言。學習單片機的第一個程序就是流水燈實驗!學習語言的輸出的第一個程序就是helloword!這都是一個過程!我們知道單片機執行的機器語言!彙編就是其執行的根本的語言,任何程序的編譯最終還是要生成HEX語言,彙編語言~~!來回顯示,並且顯示時還會發出蜂嚀聲!P1口接八個發光二極管,P2.3接一個蜂嚀器!一.彙編語言movr7,#8main:movr0,#8;一個循環需要移動8位movp1,#01111111b;初始為P0.7燈點亮loop:clrp2.3acallds1ms;延時,以便人眼可以觀察到setbp2.3acallds1msmova,p1;讀P0口當前顯示的數據送到Arra;將A中的數據循環右移1位movp1,a;再將A中右移過的數據送到P0djnzr0,loopdjnzr7,main;移動不夠8位,跳到LOOP處循環,ljmprel;流動1遍跳轉到MAIN處循環流。;---顯示延時----------ds1ms:movr1,#1ds1lo:movr2,#200ds2lo:movr3,#200djnzr3,$djnzr2,ds2lodjnzr1,ds1loret;延時返回rel:end2.C語言#includeunsignedchari;unsignedchartemp;unsignedchara,b;voiddelay(void)//延時子程序{unsignedcharm,n,s;for(m=20;m>0;m--)for(n=20;n

急求懂51單片機編程的C語言大神幫忙編一個AT89S52單片機有創意的8位流水燈程序

#include <reg51.h>

#define GPIO P1

#define uint8 unsigned char

#define uint16 unsigned int

void delay_ms(uint16 x)

{

uint8 i=110;

while(x--)

while(i--);

}

void main()

{

uint8 i;

while(1)

{ i=8;

GPIO=0x01;

do

{

delay_ms(1000);

GPIO=GPIO<<1;

i--;

}while(i);

}

}

一位百流水燈左移。前提度是你問的等給一答的時候才亮。否者回把答GPIO改為oxfe。追問設計的太簡單了 設計要求是:依照所給單片機版,儘可能實現多種花樣不同的流水燈、狀態指示燈(例:按鍵一次,led1閃,按第二次,led2閃,led1點亮。以此類推),你能設計出來麼?能的話給個QQ號唄追答這樣啊,你的硬件不也沒有鍵盤嗎,再説按鍵你是要矩陣鍵盤還是獨立鍵盤。我的qq2561999818,不過不常在。

51單片機:at89c51接74hc164寫流水燈

#include "reg52.h"

#include "intrins.h"

int INTcount,flag;

sbit P1^1=CLK;

sbit P1^2=DAT;

void main()

{

EA=1;

ET0=1;

TR0=1;

DAT=1;

while(1)

{

CLK=0;

if(flag/7==0)DAT=1;

else DAT=0;

}

}

void timer() interrupt 1

{

TH0=(65536-50000)/256;

TH0=(65536-50000)%256;

INTcount;

if(INTcount==20){CLK=1;INTcount=0;};

flag++;

}

74HC164就是個移zd位寄存器,假設你使用的版單片機是12M晶振,使用定時器1,並且LED是高電平點亮。那麼程序如上,很簡單,就是設置兩個標誌位再使用定時器中斷,權你每隔一秒發送一個數據給74HC164就可以了。

TAG標籤:#語言 #流水 #at89c51 #單片機 #