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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3931|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)學(xué)習(xí)總結(jié)之流水燈(新手必進(jìn))

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:333662 發(fā)表于 2018-7-31 20:24 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
說(shuō)明:本人現(xiàn)在已經(jīng)學(xué)完51單片機(jī)了,定期會(huì)發(fā)一些學(xué)習(xí)總結(jié),本次是關(guān)于流水燈的,希望大家多多支持 程序代碼都調(diào)試過(guò),都帶有注釋。
51學(xué)習(xí)總結(jié)
2018年3月28日16:41:47
-------------------------------------------------------------------------------------------
一.流水燈總結(jié)
a.點(diǎn)亮LED有兩種方式:1.sbit定義IO口;2.0x16進(jìn)制總線式
b.LED電壓 (voltage) 常識(shí):
   單個(gè)小功率LED燈,顏色不同,其要求的電壓也不同。紅/黃:一般為1.8~2.1伏,白/綠/藍(lán):一般為3.0~3.6伏。
1W大功率燈要求的電壓與以上相同。
c.LED電流 (current) 常識(shí):
   I.小功率的LED燈(包括插件式或者貼片式),每個(gè)芯片上允許通過(guò)的電流一般不要高于20毫安;
每個(gè)雙芯片燈上允許通過(guò)的電流一般不高于40毫安;同理每個(gè)三芯片燈不要高于60毫安。
   II.大功率LED常采用的是1W,其允許通過(guò)的最大電流為150毫安
d.流水燈基本程序
  1. *******************************************************************************************
  2. #include<reg52.h>   //頭文件
  3. #define uint unsigned int  //宏定義 可以看成用uint代替unsigned int
  4. #define uchar unsigned char//同上
  5. void delay(uint x)    //毫秒級(jí)延時(shí)函數(shù),延時(shí)時(shí)間為形參 x ms
  6. {
  7. uint i,j;
  8. for(i=x;i>0;i--)
  9.   for(j=110;j>0;j--);
  10. }
  11. void main() //主函數(shù)
  12. {
  13. P1=0Xfe;  //給LED賦初值,先點(diǎn)亮第一個(gè)LED,這里的P1是指和LED相連的I/O口
  14. while(1)  //死循環(huán)語(yǔ)句
  15. {
  16.   delay(500);  //延時(shí)500ms;就是調(diào)用延時(shí)函數(shù)延時(shí)
  17.   P1=(P1<<1)|(P1>>7);//左移一位與右移七位  |表示與運(yùn)算
  18. }
  19. }        //這個(gè)是流水燈的基本程序
  20. *******************************************************************************************
復(fù)制代碼
  1. #include <reg52.h> //51頭文件
  2. #include <intrins.h>//包含循環(huán)右移函數(shù)_cror,右移函數(shù)_crol_頭文件
  3. #define uint  unsigned int  //宏定義
  4. void delay(uint z)//毫秒級(jí)延時(shí)函數(shù)
  5. {
  6. uint x,y;
  7. for(x = z; x > 0; x--)
  8. for(y = 120; y > 0 ; y--);
  9. }
  10. void main()//主函數(shù)
  11. {
  12.   
  13. P2 = 0x7f;  //賦值給P2,點(diǎn)亮LED8
  14. while(1)//死循環(huán)
  15. {
  16.            P2= _cror_(P2,1);//循環(huán)右移,LED從左至右點(diǎn)亮
  17.     delay(1000);
  18. }
  19. }
復(fù)制代碼

*******************************************************************************************
  1. #include <reg52.h>
  2. unsigned char LED_STATE;  //LED狀態(tài)值
  3. void LED_show();
  4. void LED_show()
  5. {
  6.     if (LED_STATE>=7)     //如果點(diǎn)亮的是LED7
  7.       LED_STATE=0;  //回到LED0
  8.    else
  9.      LED_STATE++;  //否則點(diǎn)亮下一個(gè)LED
  10. P2=~(1<<LED_STATE);//LED狀態(tài)值變換為給P2口賦的值
  11. }
  12. void main()
  13. {
  14.         unsigned int i;   //延時(shí)變量
  15. LED_STATE=0;      //賦初值
  16. while(1)
  17. { LED_show();  //LED狀態(tài)切換
  18.      for(i=0;i<10000;i++);  //延時(shí)
  19. }
  20. }  
復(fù)制代碼

*******************************************************************************************

e.花樣流水燈
*******************************************************************************************
  1. #include<reg52.h>           //頭文件
  2.   #include<intrins.h>  //包含循環(huán)右移函數(shù)_cror,右移函數(shù)_crol_頭文件
  3.   #define uint unsigned int //宏定義
  4.   void delay(uint n)    //延時(shí)函數(shù)
  5.     {
  6.       while(n--);
  7.     }
  8.   void main()   //主函數(shù)
  9.    {
  10.     a: P2=0xfe;  //點(diǎn)亮第一個(gè)LED
  11.      delay(15000);//延時(shí)
  12.      while(1)    //死循環(huán)
  13.       {
  14.        P2=P2<<1; //依次點(diǎn)亮所有LED
  15.        delay(15000); //延時(shí)
  16.        if(P2==0x00)  //判斷LED全亮
  17.          { P2=0x01;  //熄滅一個(gè)
  18.            delay(15000);//延時(shí)
  19.            goto b;}  //跳去b結(jié)構(gòu)
  20.       }
  21.       
  22.     b: while(1) //死循環(huán)
  23.       {
  24.        P2=_crol_(P2,1)+1;  //依次熄滅LED,直至熄滅所有LED
  25.        delay(15000);    //延時(shí)
  26.        if(P2==0xff)     //判斷是否熄滅所有LED
  27.          {delay(15000); //延時(shí)
  28.              goto a;}   //跳去a模塊,反復(fù)循環(huán)點(diǎn)亮、熄滅
  29.       }
  30.    }
復(fù)制代碼

---------------------------------------------
備注:goto語(yǔ)句也稱為無(wú)條件轉(zhuǎn)移語(yǔ)句,其一般格式如下:
goto 語(yǔ)句標(biāo)號(hào); 其中語(yǔ)句標(biāo)號(hào)是按標(biāo)識(shí)符規(guī)定書寫的符號(hào), 放在某一語(yǔ)句行的前面,標(biāo)號(hào)后加冒號(hào)(:)。
語(yǔ)句標(biāo)號(hào)起標(biāo)識(shí)語(yǔ)句的作用,與goto 語(yǔ)句配合使用。
C語(yǔ)言不限制程序中使用標(biāo)號(hào)的次數(shù),但各標(biāo)號(hào)不得重名。
goto語(yǔ)句的語(yǔ)義是改變程序流向, 轉(zhuǎn)去執(zhí)行語(yǔ)句標(biāo)號(hào)所標(biāo)識(shí)的語(yǔ)句。
goto語(yǔ)句通常與條件語(yǔ)句配合使用。可用來(lái)實(shí)現(xiàn)條件轉(zhuǎn)移, 構(gòu)成循環(huán),跳出循環(huán)體等功能。
在結(jié)構(gòu)化程序設(shè)計(jì)中一般不主張使用goto語(yǔ)句, 以免造成程序流程的混亂,使理解和調(diào)試程序都產(chǎn)生困難。
*******************************************************************************************
  1. #include <reg52.h>
  2. unsigned char code seg[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0x00,0,0x55,0x55,0xaa,0xaa};
  3.         //定義一個(gè)數(shù)組 儲(chǔ)存LED狀態(tài)量
  4. void delay(unsigned int cnt)  //延時(shí)
  5.     {
  6.      while(--cnt);
  7.     }
  8. void  main()  //主函數(shù)
  9. {
  10.      unsigned char i;  //循環(huán)變量
  11.      while(1)
  12.           {
  13.        P2=0xFE;                   //第一個(gè)LED亮
  14.           for(i=0;i<8;i++)
  15.           {
  16.           delay(10000);
  17.           P2 <<=1;      /*P2<<=1;是C的一種簡(jiǎn)寫,當(dāng)一個(gè)變量要得到和另外一個(gè)數(shù)和它本身發(fā)送計(jì)算時(shí)就用這種形式。
  18.                    比如:x=x+1可以寫為 x+=1;x=x*1;可以寫為x*=1;同樣P2<<=1;即為P2 = P2<<1;
  19.                    就是取出P2并行8個(gè)端口的數(shù)據(jù)之后向左移動(dòng)一位,高位被移除,地位被0取代,再放入P2口的8個(gè)端口輸出。*/
  20.            }     //每循環(huán)一次,點(diǎn)亮一個(gè)LED,之前點(diǎn)亮的LED不熄滅,LED從左向右逐個(gè)點(diǎn)亮
  21.           P2=0x7F;                //第八個(gè)LED亮,LED7
  22.           for(i=0;i<8;i++)
  23.           {
  24.           delay(10000);
  25.           P2 >>=1;     //同上,是C的一種簡(jiǎn)寫,為P2 = P2>>1;
  26.        }         //每循環(huán)一次,點(diǎn)亮一個(gè)LED,之前點(diǎn)亮的LED不熄滅,LED從右向左逐個(gè)點(diǎn)亮
  27.        P2=0xFE;                  //第一個(gè)LED亮
  28.           for(i=0;i<8;i++)
  29.           {
  30.           delay(10000);
  31.           P2 <<=1;     //同上,是C的一種簡(jiǎn)寫,為P2 = P2<<1;         
  32.           P2 |=0x01;   //熄滅第一個(gè)LED,其余全亮,通過(guò)上一條語(yǔ)句,以此從左向右熄滅
  33.           }
  34.        P2=0x7F;                  //第八個(gè)LED亮,LED7
  35.           for(i=0;i<8;i++)
  36.           {
  37.           delay(10000);
  38.           P2 >>=1;     //同上,是C的一種簡(jiǎn)寫,為P2 = P2>>1;
  39.           P2 |=0x80;   //熄滅第八個(gè)LED,其余全亮,通過(guò)上一條語(yǔ)句,以此從右向左熄滅
  40.            }
  41.             
  42.          for(i=0;i<16;i++)//循環(huán)16次
  43.           {
  44.              delay(20000);//延時(shí)
  45.              P2=seg[i];   //讀取數(shù)組中的數(shù)值
  46.            }
  47.     }
  48.     }
復(fù)制代碼

*******************************************************************************************

f.指針型流水燈
*******************************************************************************************
  1. #include <reg52.h>   //頭文件
  2. #define uchar unsigned char //宏定義
  3. #define uint unsigned int   //宏定義
  4. uchar code table[]={0x01,0x02,0x04,0x08,
  5.                      0x10,0x20,0x40,0x80,
  6.                      0xfe,0xfd,0xfb,0xf7,
  7.                      0xef,0xdf,0xbf,0x7f};//儲(chǔ)存數(shù)據(jù)
  8.                  
  9. uchar *p;  //定義一個(gè)數(shù)組
  10. uchar j;   //判斷變量
  11. uint i;    //延時(shí)變量
  12. void main(void)
  13. {
  14.      p = table;// 將數(shù)組的首個(gè)元素賦值給指針變量p
  15.   j = 0;//初始化
  16.   while(1) //死循環(huán)
  17.   {
  18.       if(j==15) //如果j等于15
  19.       j=0;//則j=0
  20.    else   //否則j加1
  21.       j++;
  22.    P2 = *(p+j);//+j表示依次對(duì)數(shù)組內(nèi)元素取值
  23.    for(i=0;i<10000;i++);  //延時(shí)
  24.   }
  25. }
復(fù)制代碼

*******************************************************************************************

g.霖峰--流水燈
*******************************************************************************************
  1. #include <reg52.h>   //頭文件
  2. #define uchar unsigned char
  3. void delay(uint x)    //毫秒級(jí)延時(shí)函數(shù),延時(shí)時(shí)間為形參 x ms
  4. {
  5. uint i,j;
  6. for(i=x;i>0;i--)
  7.   for(j=110;j>0;j--);
  8. }
  9. void main()//主函數(shù)
  10. {
  11.       uchar k,i;
  12.       while(1)
  13.       {
  14.          k=0xfe;//11111110  //點(diǎn)亮第一個(gè)LED
  15.          for(i=0;i<8;i++)   
  16.          {
  17.           P2=k;
  18.           delay(1000);
  19.           k=k<<1;  //11111100
  20.           k=k|0x01;//00000001    流水燈
  21.                    //11111101
  22.                    //11111010
  23.                    //00000001
  24.                    //11111011
  25.           }         
  26.       }
  27. }
復(fù)制代碼

*******************************************************************************************
h.8*8LED點(diǎn)陣驅(qū)動(dòng)

一.pdf

109.45 KB, 下載次數(shù): 7, 下載積分: 黑幣 -5

流水燈總結(jié)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:333662 發(fā)表于 2018-7-31 20:26 | 只看該作者
不錯(cuò)不錯(cuò)不錯(cuò)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人在线精品视频 | a级大片 | 欧美成人免费电影 | 欧美不卡网站 | 手机看片在线播放 | 九九热这里只有精品在线观看 | 一级国产精品一级国产精品片 | www.av在线| 欧美中文一区 | 国产精品国产亚洲精品看不卡15 | 亚洲午夜av久久乱码 | 日韩欧美在线不卡 | 国产色99 | 伊人伊人网| 色婷婷久久综合 | 久久精品视频9 | 久久美女视频 | 一区二区三区视频在线观看 | 久久亚洲一区二区三区四区 | 亚洲精品在线播放 | av福利网 | 日本成人一区二区 | 亚洲福利网 | 91麻豆精品一区二区三区 | 国产精品久久久久免费 | 国产精品久久久久久 | 黄色在线观看 | 国产日韩欧美另类 | av福利网| 日本一区二区不卡视频 | 国产欧美精品一区二区色综合 | 亚洲成人午夜在线 | 国外激情av | 欧美日韩精品一区二区三区视频 | 国产欧美日韩 | 免费在线观看黄视频 | 99在线免费观看视频 | 久久精品视频一区二区 | 免费能直接在线观看黄的视频 | 亚洲精品www| 国产午夜精品久久久 |