久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4312|回復: 3
打印 上一主題 下一主題
收起左側

51單片機系列連載2—美麗的發光二極管

[復制鏈接]
跳轉到指定樓層
樓主
ID:51090 發表于 2014-10-15 22:56 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
今天簡單地介紹一下發光二極管,發光二極管看似簡單,但是在市場中也有很多應用。比如說,在大家經常使用的充電器就有發光二極管的應用,如下圖所示:

                  




      這就是簡易充電器電路,其中LED也就是發光二極管既起到半波整流的作用又兼做指示燈。同樣的原理,發光二極管還可以給燈具開關做指示燈、給工業設備配電箱做指示燈以及用共陰極雙色LED對電源插座指示等等。



接下來,簡單地說一下c語言程序。



大體而言,可以采用位操作與總線操作兩種方式寫程序,比如讓第一個發光二極管亮:

(1)、位操作                               (2)總線操作

     #include<at89x52.h>                          #include<at89x52.h>   

     sbit D1=P1^0;                              void main()

       void main()                             {P1=0xfd;

     {  D1=0;                                  }

     }            



    在此基礎上,添加一些循環、延時就可以讓其閃爍,如讓第一個二極管閃爍的三種方法:



        法一:#include<at89x52.h>         

               sbit P1_1=P1^0;

                void main()

                {unsigned int i;

                 while(1)

                {P1_1=0;

               for(i=1;i<10000;i++);

               P1_1=1;

              for(i=1;i<10000;i++);

               }}

         

        法二:#include<at89x52.h>

              sbit P1_1=P1^0;

              void yanshi();

              void main()

              {while(1)

              {P1_1=0;

               yanshi();

               P1_1=1;

               yanshi();}}

               void yanshi()

               {unsigned int i;

                for(i=0;i<10000;i++);}



        法三:#include<at89x52.h>

               void main()

              {while(1)

               {

              int i;i=50000;

                P1=0xfe;

                while(i--);

                P1=0xff;

                i=50000;

              while(i--);

                 }

                    }

   當然,還有更好玩的,比如非常好看的流水燈,其實原理跟上面一樣:



            法一:直接法

                  #include<at89x52.h>

                  sbit P1_1=P1^0;

                  void yanshi();

                    void main()

                    {while(1)

                    {P1=0xfe;

                     yanshi();

                     P1=0xfd;

                     yanshi();

                     P1=0xfb;

                     yanshi();

                     P1=0xf7;

                     yanshi();

                     P1=0xef;

                     yanshi();

                     P1=0xdf;

                     yanshi();

                     P1=0xbf;

                     yanshi();

                      P1=0x7f;

                     yanshi();

                       }}

                 void yanshi()

                {unsigned int i;

                for(i=0;i<10000;i++);}



          法二:使用數組

                 #include<at89x52.h>

                 unsigned char table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

                 void yanshi();

                 void main()

                {unsigned int i;

                 while(1)

                {

                 for(i=0;i<8;i++)

                 {P1=table[ i];   (注意,在這里的大括號是一定要加的,否則你就out了)

                  yanshi();

                   }}}

                 void yanshi()

                {unsigned int i;

                for(i=0;i<10000;i++);}



           法三:左移右移

              #include<at89x52.h>

              unsigned char table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

              unsigned int i;

              void yanshi();

              void main()

              {P1=0xfe;

              while(1)

              {P1=P1<<1;

              P1=P1|0x01;(因為是左移而不是循環左移,所以要末位置一,這樣的結果也會導致最后只挨個量一次)

               yanshi();}

                }



             void yanshi()

            {unsigned int i;

            for(i=0;i<10000;i++);}



    其實想想并不是很難,就是賦值控制亮滅,主要是記住延時那個函數,最后調用就可以了,在這個基礎上再拓展一下,雙燈左移右移閃爍,也就是雙燈左移7次,右移7次,然后全閃7次,程序如下:



             #include<at89x52.h>

             void Delay(unsigned int i);

              void main()

             {unsigned char i;

              unsigned char temp;

              while(1)

              {temp=0xfc;

                P1=temp;

               for(i=0;i<7;i++)

               Delay(50000);

              {temp<<=1;

              temp=temp|0x01;

               P1=temp;}之所以加入temp做中間變量,防止直接操作端口造成的短暫閃爍

              Temp=0x3f;

              P1=temp;

              For(i=0;i<7;i++)

              {Delay(50000);

                Temp>>=1;

                Temp|=0x80;

                 P1=temp;}

               For(i=0;i<3;i++)

               P1=0xff;

               Delay(50000);

               P1=0x00;

               Delay(50000);}

               }  }

              

            void Delay(unsigned int i)

            {

           while(--i);

                }



    這么一分析,發光二極管真的很簡單,賦值端口,控制亮滅,延時,調用函數,基本上就可以了,最重要的是c語言簡單知識的一些規范,這都是入門的,不難理解,細心一些就好了,個人覺得比較好的還是自己寫程序去調試,調試次數多了,自然而然就熟悉了,孰能生巧,對很多事情都是亙古不變的真理,學習更是如此。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:67312 發表于 2014-10-16 11:22 | 只看該作者
謝謝,謝謝樓主的無私奉獻
回復

使用道具 舉報

板凳
ID:69860 發表于 2014-12-6 16:30 | 只看該作者

謝謝樓主
回復

使用道具 舉報

地板
ID:70045 發表于 2014-12-6 16:53 | 只看該作者
學習了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 色狠狠一区 | 99福利视频导航 | 欧美一级做性受免费大片免费 | 日本电影一区二区 | 中文字幕高清 | 成人免费在线 | 欧美精品在线一区二区三区 | japanhd美女动| 91在线观看 | 操操操操操 | 中文字幕色站 | www.一级片 | 国产日韩视频在线 | 成人黄色电影免费 | 成人免费区一区二区三区 | 成人免费在线 | 免费在线看黄视频 | 久久久久国产 | 久久av一区 | 亚洲综合色自拍一区 | 国产午夜精品一区二区三区嫩草 | 日韩 欧美 二区 | 欧美一区二区三区在线播放 | jizz在线看片 | 国产 欧美 日韩 一区 | 日韩一区精品 | 国产福利视频网站 | 国产精品自拍视频网站 | 在线观看av不卡 | 欧美又大粗又爽又黄大片视频 | 亚洲一区二区久久 | 色花av| 宅女噜噜66国产精品观看免费 | 免费在线播放黄色 | 欧美一区二区三区国产精品 | 密室大逃脱第六季大神版在线观看 | 黄页网址在线观看 | 国产精品一区二区三区在线 | 久久www免费人成看片高清 | 欧美成人精品 | 精品永久 |