0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

實(shí)現(xiàn)51單片機(jī)流水燈的三種詳細(xì)資料說明

GReq_mcu168 ? 來源:未知 ? 2019-05-03 08:53 ? 次閱讀

首先,介紹下原理。下圖為主控芯片和流水燈模塊的原理圖。流水燈模塊接在單片機(jī)的P1口,由原理圖可以知道,在P1口給一個(gè)低電平即可點(diǎn)亮LED燈。相反,如果要LED燈熄滅,就要把P1口的電平變?yōu)楦唠娖郊纯?。要?shí)現(xiàn)流水燈功能,我們只要將LED1~LED8依次點(diǎn)亮、熄滅,依始類推,8只LED變會(huì)一亮一暗的做流水燈了。

實(shí)現(xiàn)8個(gè)LED流水燈程序用中文表示為:P1.0低、延時(shí)、P1.0高、P1.1低、延時(shí)、P1.1高、P1.2低、延時(shí)、P1.2高、P1.3低、延時(shí)、P1.3高、P1.4低、延時(shí)、P1.4高、P1.5低、延時(shí)、P1.5高、P1.6低、延時(shí)、P1.6高、P1.7低、延時(shí)、P1.7高、返回到開始、程序結(jié)束。

聽起來是不是很簡單??!那么下面我們來看下實(shí)現(xiàn)流水燈功能的三種常用方法!

第一種,總線方法實(shí)現(xiàn)流水燈。

這是一種比較笨但又最易理解的方法,采用順序程序結(jié)構(gòu),用位指令控制P1口的每一個(gè)位輸出高低電平,加上延時(shí)函數(shù),即可控制每個(gè)LED燈的亮滅。C程序如下:

#include

#defineucharunsignedchar

#defineuintunsignedint

codeunsignedchartmpled[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//定義八只LED燈,依次點(diǎn)亮八只LED燈

//N毫秒的延時(shí)函數(shù)

delay_ms(uint ms) { uint i,j; for(i=ms;i>0;i--) for(j=114;j>0;j--); return 0; }void main(void){unchar i;while (1){for(i=0;i<8;i++) //循環(huán)點(diǎn)亮8只LED燈{P1=tmpled[i];delay_ms(500); //延時(shí)500毫秒}}}

第二種,移位方法實(shí)現(xiàn)流水燈

上一種方法是逐個(gè)將P1口的LED燈點(diǎn)亮來實(shí)現(xiàn)閑的,因此程序看起來有一點(diǎn)復(fù)雜。下面將一種用移位的方法。采用循環(huán)程序結(jié)構(gòu)編程。首先在程序開始給P1.0口送一個(gè)低電平,其它位為高。然后延時(shí)一段時(shí)間再讓低電平往高位移動(dòng),這樣就實(shí)現(xiàn)“流水”的效果了。下面來看具體程序:

#include

#defineucharunsignedchar

#defineuintunsignedint

//N毫秒的延時(shí)函數(shù)

delay_ms(uint ms) { uint i,j; for(i=ms;i>0;i--) for(j=114;j>0;j--); return 0; }

void main(){uchar a,i;while(1){a=0xfe; //點(diǎn)亮第一位LED燈for(i=0;i<8;i++){P1=a;a=a<<1; //左移一位a=a|0x01; //左移一位后與0x01相或,保證左移后最低位為1 delay_ms(500); }}}

第三種,庫函數(shù)實(shí)現(xiàn)流水燈

C52 提供了 _crol_(字符循環(huán)左移);_cror_ (字符循環(huán)右移)等庫函數(shù),包含在頭文件intrins.h中。接下來還是先講一下移位的小知識(shí)點(diǎn)吧。

左移。C52中操作符為“<<”,每執(zhí)行一次左移指令,被操作的數(shù)將最高位移入單片機(jī)PSW寄存器的CY位。CY位中原來的數(shù)丟棄,最低位補(bǔ)0,其他位依次向左移動(dòng)一位。相信大家學(xué)過C語言都清楚吧,這里就不多說了。而函數(shù)_crol_的作用是循環(huán)左移。它會(huì)將最高位移入最低位,其他位依次向左移一位。用法:x=0xfe;x=_crol_(x,1);//循環(huán)左移移位。接下來看具體程序:

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

//N毫秒的延時(shí)函數(shù)

delay_ms(uint ms) { uint i,j; for(i=ms;i>0;i--) for(j=114;j>0;j--); return 0; }

void main(){uint a;a=0xfe;while(1){P1=a;a=_crol_(a,1); delay_ms(500);}}

知識(shí)點(diǎn):PSW寄存器

PSW(Program StatusWord)全稱為程序狀態(tài)字標(biāo)志寄存器,是一個(gè)8位寄存器,位于單片機(jī)片內(nèi)的特殊功能寄存器區(qū),字節(jié)地址D0H,用來存放運(yùn)算結(jié)果的一些特征,如有無進(jìn)位、借位等。使用匯編編程時(shí)PSW寄存器很有用,但在利用C語言編程時(shí),編譯器會(huì)自動(dòng)控制該寄存器,很少人為操作它,大家只需做簡單了解即可。其每位的具體含義

如圖1 所示:

圖 1 PWD(Program Status Word)寄存器

①CY:進(jìn)位標(biāo)志位,它表示運(yùn)算是否有進(jìn)位(或借位)。如果操作結(jié)果在最高位有進(jìn)位(加法)或者借位(減法),則該位為1,否則為0。

AC:輔助進(jìn)位標(biāo)志,又稱半進(jìn)位標(biāo)志,它指兩個(gè)8位數(shù)運(yùn)算低四位是否有半進(jìn)位,即低四位相加(或相減)是否進(jìn)位(或借位),如有,則AC為1,否則為0。

③F0:由用戶使用的一個(gè)狀態(tài)標(biāo)志位,可用軟件來使它置1或清0;也可由軟件來測(cè)試它,以控制程序的流向。

RS1、RS0:4組工作寄存器區(qū)選擇控制位。在匯編語言中這兩位用來選擇4組工作寄存器區(qū)中的哪一組為當(dāng)前工作寄存區(qū)。

⑤OV:溢出標(biāo)志位,反映帶符號(hào)數(shù)的運(yùn)算結(jié)果是否有溢出。有溢出時(shí),此位為1,否則為0。

⑥P:奇偶標(biāo)志位,反映累加器ACC內(nèi)容的奇偶性,如果ACC中的運(yùn)算結(jié)果有偶數(shù)個(gè)l(如11001100B,其中有4個(gè)1),則P為0,否則P為1。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • led
    led
    +關(guān)注

    關(guān)注

    240

    文章

    22905

    瀏覽量

    650082
  • 51單片機(jī)
    +關(guān)注

    關(guān)注

    272

    文章

    5689

    瀏覽量

    122144
  • 流水燈
    +關(guān)注

    關(guān)注

    21

    文章

    432

    瀏覽量

    59468

原文標(biāo)題:51單片機(jī)流水燈的三種實(shí)現(xiàn)方法

文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    51單片機(jī)流水燈程序

    51單片機(jī)流水燈程序 51單片機(jī)流水燈程序
    發(fā)表于 12-21 15:52 ?170次下載

    基于單片機(jī)流水燈介紹_51單片機(jī)流水燈的五實(shí)現(xiàn)方法

    本文為大家?guī)砦?b class='flag-5'>種51單片機(jī)流水燈實(shí)現(xiàn)方法。
    發(fā)表于 01-06 10:23 ?5.1w次閱讀
    基于<b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>流水燈</b>介紹_<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>流水燈</b>的五<b class='flag-5'>種</b><b class='flag-5'>實(shí)現(xiàn)</b>方法

    51單片機(jī)按鍵控制流水燈閃爍測(cè)試程序詳細(xì)資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是51單片機(jī)按鍵控制流水燈閃爍測(cè)試程序詳細(xì)資料免費(fèi)下載。
    發(fā)表于 09-29 10:34 ?50次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>按鍵控制<b class='flag-5'>流水燈</b>閃爍測(cè)試程序<b class='flag-5'>詳細(xì)資料</b>免費(fèi)下載

    51單片機(jī)教程之51單片機(jī)IO端口應(yīng)用的詳細(xì)資料概述

    本文檔的主要內(nèi)容詳細(xì)介紹的是51單片機(jī)教程之51單片機(jī)IO端口應(yīng)用的詳細(xì)資料概述主要內(nèi)容包括了:
    發(fā)表于 10-24 16:22 ?19次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>教程之<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>IO端口應(yīng)用的<b class='flag-5'>詳細(xì)資料</b>概述

    使用51單片機(jī)控制流水燈點(diǎn)亮的詳細(xì)程序資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)控制流水燈點(diǎn)亮的詳細(xì)程序資料免費(fèi)下載。
    發(fā)表于 12-20 08:00 ?12次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>控制<b class='flag-5'>流水燈</b>點(diǎn)亮的<b class='flag-5'>詳細(xì)</b>程序<b class='flag-5'>資料</b>免費(fèi)下載

    使用51單片機(jī)進(jìn)行流水燈的設(shè)計(jì)資料和程序資料說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)進(jìn)行流水燈的設(shè)計(jì)資料和程序資料
    發(fā)表于 04-12 18:27 ?5次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>進(jìn)行<b class='flag-5'>流水燈</b>的設(shè)計(jì)<b class='flag-5'>資料</b>和程序<b class='flag-5'>資料</b><b class='flag-5'>說明</b>

    使用51單片機(jī)實(shí)現(xiàn)流水燈的程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)實(shí)現(xiàn)流水燈的程序免費(fèi)下載。
    發(fā)表于 08-27 17:29 ?6次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>流水燈</b>的程序免費(fèi)下載

    使用51單片機(jī)讓蜂鳴器與LED流水燈進(jìn)行簡單結(jié)合的資料說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)讓蜂鳴器與LED流水燈進(jìn)行簡單結(jié)合的資料說明。
    發(fā)表于 07-03 17:42 ?7次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>讓蜂鳴器與LED<b class='flag-5'>流水燈</b>進(jìn)行簡單結(jié)合的<b class='flag-5'>資料</b><b class='flag-5'>說明</b>

    使用51單片機(jī)進(jìn)行流水燈閃爍使用proteus仿真和keil編寫程序資料說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)進(jìn)行流水燈閃爍使用proteus仿真和keil編寫程序資料說明
    發(fā)表于 05-07 08:00 ?20次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>進(jìn)行<b class='flag-5'>流水燈</b>閃爍使用proteus仿真和keil編寫程序<b class='flag-5'>資料</b><b class='flag-5'>說明</b>

    使用單片機(jī)實(shí)現(xiàn)流水燈詳細(xì)資料說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)實(shí)現(xiàn)流水燈詳細(xì)資料說明
    發(fā)表于 03-21 16:41 ?7次下載
    使用<b class='flag-5'>單片機(jī)</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>流水燈</b>的<b class='flag-5'>詳細(xì)資料</b><b class='flag-5'>說明</b>

    51單片機(jī)實(shí)現(xiàn)流水燈的源代碼

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)實(shí)現(xiàn)流水燈的源代碼免費(fèi)下載。
    發(fā)表于 11-13 17:28 ?55次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>流水燈</b>的源代碼

    使用51單片機(jī)實(shí)現(xiàn)LED流水燈的程序和仿真資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)實(shí)現(xiàn)LED流水燈的程序和仿真資料免費(fèi)下載。
    發(fā)表于 12-07 08:00 ?36次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>實(shí)現(xiàn)</b>LED<b class='flag-5'>流水燈</b>的程序和仿真<b class='flag-5'>資料</b>免費(fèi)下載

    使用51單片機(jī)實(shí)現(xiàn)流水燈詳細(xì)資料說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)實(shí)現(xiàn)流水燈詳細(xì)資料
    發(fā)表于 04-01 17:21 ?20次下載

    單片機(jī)實(shí)現(xiàn)流水燈功能的三種常用方法資料下載

    電子發(fā)燒友網(wǎng)為你提供單片機(jī)實(shí)現(xiàn)流水燈功能的三種常用方法資料下載的電子資料下載,更有其他相關(guān)的電路
    發(fā)表于 04-03 08:52 ?0次下載
    <b class='flag-5'>單片機(jī)</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>流水燈</b>功能的<b class='flag-5'>三種</b>常用方法<b class='flag-5'>資料</b>下載

    51單片機(jī)三種方法實(shí)現(xiàn)流水燈(超詳細(xì)

    51單片機(jī)三種方法實(shí)現(xiàn)流水燈一、數(shù)組流水燈二、移位函數(shù)流水
    發(fā)表于 11-04 15:51 ?17次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>用<b class='flag-5'>三種</b>方法<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>流水燈</b>(超<b class='flag-5'>詳細(xì)</b>)