日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

单片机 c语言 p1控制流水灯,单片机控制的流水灯程序

發布時間:2023/12/14 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单片机 c语言 p1控制流水灯,单片机控制的流水灯程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們前邊學了點亮LED小燈,然后又學了LED小燈閃爍,下邊我們要進一步了解一下如何讓8個小燈依次一個一個點亮,流動起來。

圖1 LED小燈電路圖

通過前面的課程,我們可以了解到控制引腳P0.0通過了74HC245控制DB0,P0.1控制DB1......P0.7控制DB7。我們還學到一個字節是8位,我們如果寫一個P0,就代表了P0.0到P0.7的共8個位。比如我們寫P0?=?0xFE;轉換成二進制就是0b11111110,所以點亮LED小燈的程序,實際上我們可以改成另外一種寫法,如下所示。

#include

sbit??ADDR0?=?P1^0;

sbit??ADDR1?=?P1^1;

sbit??ADDR2?=?P1^2;

sbit??ADDR3?=?P1^3;

sbit??ENLED?=?P1^4;

void??main()

{

ENLED?=?0;

ADDR0?=?0;

ADDR1?=?1;

ADDR2?=?1;

ADDR3?=?1;????????????//74HC138開啟三極管

P0?=?0xFE;

while(1);?????????????//程序停止在這里

}

通過上邊這個程序我們可以看出來,可以通過P0來控制所有的8個LED小燈的亮和滅。我們下邊要進行依次亮和滅,怎么辦呢?從這里就可以得到方法了,如果想讓單片機流水燈流動起來,依次要實現的結果是:0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F。

在我們的C語言當中,有一個移位操作,其中<>代表的是右移。比如a?=?0x01?<

還要學習另外一個運算符~,這個符號是按位取反的意思,同樣,按位取反也是針對二進制而言。比如a?=?~(0x01),0x01的二進制是0b00000001,按位取反是0b11111110,那么a的值就是0xFE了。

學會了這兩個符號后,那么我們就可以把流水燈的程序寫出來,先把程序貼上。

#include

sbit??ADDR0?=?P1^0;

sbit??ADDR1?=?P1^1;

sbit??ADDR2?=?P1^2;

sbit??ADDR3?=?P1^3;

sbit??ENLED?=?P1^4;

void??main()

{

unsigned?char?j?=?0;

unsigned?int??i?=?0;

ENLED?=?0;

ADDR0?=?0;

ADDR1?=?1;

ADDR2?=?1;

ADDR3?=?1;??????????????//74HC138開啟三極管Q16

while(1)????????????????//程序死循環

{

P0?=?~(0x01?<

for(i=0;?i<20000;?i++);??//延時

if(j?==?8)????????????????//如果j等于8,重新給j賦值0

{

j?=?0;

}

}

}

這里我只講兩種情況,當j等于0的時候,1左移0位還是1,那么寫成二進制后就是0b00000001,對這個數字按位取反就是0b11111110,亮的是最右邊的小燈。當j等于7的時候,1左移7位就是0b10000000,按位取反0b01111111,亮的是最左邊的小燈。中間  過程大家自己分析一下。

流水燈結束后,關于小燈的講解,我們暫時告一段落,后邊還有小燈的高級用法,我們到時候再詳細講解。

總結

以上是生活随笔為你收集整理的单片机 c语言 p1控制流水灯,单片机控制的流水灯程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。