導航:首頁 > 操作系統 > 單片機流水燈雙向

單片機流水燈雙向

發布時間:2023-01-11 13:23:05

『壹』 單片機流水燈程序

程序如下:

#include <reg52.h>

sbit led1 = P2^0;

sbit led2 = P2^1;

sbit led3 = P2^2;

sbit led4 = P2^3。

讓電子信息技術與單片機技術相融合,有效提高了單片機應用效果。作為計算機技術中的一個分支,單片機技術在電子產品領域的應用,豐富了電子產品的功能,也為智能化電子設備的開發和應用提供了新的出路,實現了智能化電子設備的創新與發展。

從二十世紀九十年代開始,單片機技術就已經發展起來,隨著時代的進步與科技的發展,目前該技術的實踐應用日漸成熟,單片機被廣泛應用於各個領域。現如今,人們越來越重視單片機在智能電子技術方面的開發和應用,單片機的發展進入到新的時期。

無論是自動測量還是智能儀表的實踐,都能看到單片機技術的身影。當前工業發展進程中,電子行業屬於新興產業,工業生產中人們將電子信息技術成功運用。

『貳』 流水燈原理

如圖2(只關注led燈部分電路),P0口的8位輸出分別連接了8個發光二極體L0~L7的陽極, P2.3經過一個反相器連接到8個發光二極體L0~L7的陰極(共陰極)。根據二極體的單向導通性(當陽極為高(對應P0口位為1)、陰極為低時,二極體導通,否則不導通),若P2.3輸出信號為低電平「0」,則二極體的陰極都為高電平,此時無論P0輸出的是「1」還是「0」,二極體都不會導通,也就不會發光。因此想要發光二極體導通,必須先設置P2.3輸出信號為「1」,再通過設置P0,點亮想要點亮的發光二極體。

STC系列晶元有5組8位輸入口,分別為P0到P5,其中P5口僅P5.0~P5.5用於輸入輸出。STC晶元的所有I/O口都可以配置為四種工作模式之一:准雙向口/弱上拉、推挽/強上拉、輸入/高阻和開漏模式。STC15系列單片機上電復位後為准雙向口/弱上拉工作模式。

每個I/O口的工作模式由2個控制寄存器中的相應位控制(PnM0和PnM1,n=0、1、2、3、4、5)。也就是說P0口的具體工作模式由P0M0和P0M1控制。具體賦值方法參照表1。

其他I/O口工作模式設置類似。

四種工作模式的說明:

(1)准雙向口。真正的雙向口指的是具有輸入和輸出兩種模式的埠,在不同模式之間需要進行轉換;如果從輸入改為輸出,需要對某些控制寄存器進行設定,才能完成。而51系列單片機的I/O口線在輸入和輸出之間沒有明確的模式區別。相應埠在同樣模式下,既可以作為輸入,又可以作為輸出。P3口除外,因為它需要連接外設。51單片機的I/O口如果要讀必須先寫1才可以,因此稱為「准」雙向口。需要大電流高電平輸出能力的場合和高速場合不能使用該模式。

(2) 推挽電路 輸入輸出(push-pull)模式。推挽電路的輸出端好像有兩個「臂」(兩組放大元件),一個「臂」的電流增加時,另一個「臂」的電流則減小,二者的狀態輪流轉換。對負載而言,好象是一個「臂」在推,一個「臂」在拉,共同完成電流輸出任務。該電路模式的主要作用是增強驅動能力,為外部設備提供大電流,可以直接輸出高電平電壓。

(3)輸入/高阻模式。僅用於輸入。

(4)開漏電路。I/O口的開漏就是沒有連接 上拉電阻 。

注意: 需要將P0的8個引腳和P2.3都設置為推挽輸出,led燈才可以點亮。其中的細節原理初學者可先不必深究。

『叄』 P0 P1雙向流水燈相反方向四種方法

本實驗使用AT89C51晶元的P1埠,連接8個發光二極體,電路中使用470Ω電阻保護電路,其中發光二極體正極連接電源,負極連接P1.0—P1.7,通過給P1口不同的值控制不同的燈亮,中間使用延時函數。
延時500毫秒,實現流水效果,下面使用4種演算法實現雙向流水燈。
順序結構、數組結構、循環移位、移位運算。

『肆』 51單片機C語言對鍵控雙向流水燈編程。用兩個按鍵,中端來做。

#include<reg51.h>
#define uchar unsigned char
uchar num,temp,times,led;
t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
times++;
if(times>=10)
{
times=0;
P0=led;
if(key1==0){
num++;
num&=0x07;
}
else if(key2==0)
{
if(num>0)num--;
else(num=7;
}
led>>=num;
}
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
LED=0x0xfe;
num=0;
times=0;
while(1);
}

『伍』 求51單片機驅動32盞LED流水燈(單向流水,全部亮時閃爍兩次,雙向流水,全部亮時閃爍兩次)的C程序!謝謝

這個比較簡單吧
uchar table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

void delay();//自己寫吧 延遲一秒
void led_blink();//~~~~~~~~~~~~
void single_stream();//單向流水函數聲明
void double_stream();//~~~~~~~~

void led_blink() //全部亮時閃爍兩次

{
uchar i;
if(P3^7==0)

{ i=2;

while(i--)

{
P0=0x00;//低電平點亮
P1=0x00;
P2=0x00;
P3=0x00;
delay();
P0=0xff;//熄滅
P1=0xff;
P2=0xff;
P3=0xff;
delay();

}
}

}
void single_stream()//單向流水燈
{
uchar i;//自己定義一下 unsigned char

for(i=0;i<8;i++)
{
P0=table[i];//逐個點亮led0-7 第零組

delay();

}
for(i=0;i<8;i++)
{
P1=table[i];//第一組
delay();
}
for(i=0;i<8;i++)
{
P2=table[i];//第二組
delay();
}
for(i=0;i<8;i++)
{
P3=table[i];//第三組
delay();
}

}

void double_stream()//這個你也自己寫吧
{

}

void main()//main 函數就調用下 前面的就可以了。。

{
while(1)
{
single_stream();
led_blink();
double_stream();
led_blink();
}

}// 大概就是這樣。。我沒測試

『陸』 51單片機點亮流水燈是什麼通信方式

語言知識點:
1、sbit:

sbit 變數名=地址名; //在給某個引腳取名的時候
登錄後復制
2、#typedef使用:重新定義一些常用的關鍵詞

typedef unsigned char u8; //使u8可定義無符號字元型
typedef unsigned int u16; //使u16可定義無符號整型
登錄後復制
3、#define

#define A P0 //用A來定義成P0
登錄後復制
4、延時函數:可通過設置斷點(在左側行數欄雙擊)進行debug調試查看具體延時時間

void delay(u16 i) //i為1時,大約延時10us
{
while(i--);
}
登錄後復制
5、循環左移右移函數(包含在intrins.h庫函數中)

_crol_(a,b); //循環左移函數,a是左移值,b是左移的位數
_cror_(a,b); //循環右移函數,a是右移值,b是右移的位數
登錄後復制

51單片機簡單實驗
51單片機引腳圖
P3口第二功能各引腳功能定義:

P3.0:RXD串列口輸入
P3.1:TXD串列口輸出
P3.2:INT0外部中斷0輸入
P3.3:INT1外部中斷1輸入
P3.4:T0定時器0外部輸入
P3.5:T1定時器1外部輸入
P3.6:WR外部寫控制
P3.7:RD外部讀控制

1、點亮led燈
這里我的開發板上led燈當引腳輸出為低電平時點亮,故選取了P2.0引腳使其輸出低電平(此處可根據自己led連接或者板上電路來設置高低電平)

#include"reg52.h"

sbit led=P2^0; //取P2.0變數名為led

void main()
{
while(1)
{
led=0;
}
}
登錄後復制

2、閃爍led燈
閃爍程序上即為在點亮後進行延時一段時間在熄滅再延時,執行如此循環,故可在上一個程序中修改為:

#include"reg52.h"
typedef unsigned int u16;

sbit led=P2^0; //取P2.0變數名為led

void delay(u16 i) //構建延時函數
{
while(i--);
}

void main()
{
while(1)
{
led=0;
delay(50000);
led=1;
delay(50000);
}
}
登錄後復制

3、led流水燈
#include"reg52.h"
#include"intrins.h"
#define led P2 //將P2定義為led
typedef unsigned int u16;
typedef unsigned char u8;

void delay(u16 i) //構建延時函數
{
while(i--);
}

void main()
{
u8 i;
led=0xfe; //1111 1110
delay(50000); //延時450ms
while(1)
{
for(i=0;i<7;i++)
{
led=_crol_(led,1);
delay(500000);
}
}
}
登錄後復制

4、蜂鳴器

無源蜂鳴器(壓電式蜂鳴器):左邊第一張圖即有綠色電路板,由多諧振盪器、壓電蜂鳴片等組成,接通電源後(1.5v~15v直流工作電壓),多諧振盪器起振,輸出1.5~2.5kHZ的音頻信號,發聲。需要形成脈沖控制,改變單片機輸出波形的頻率(脈沖周期),就可以控制蜂鳴器音調,產生不同音色、音調的聲音;改變輸出電平的高低電平占空比,則可以控制蜂鳴器的聲音大小

有源蜂鳴器(電磁式蜂鳴器):下部無綠色電路板,內部含有振盪器電路,接通電源後,振盪器產生音頻信號電流通過電磁線圈,使電磁線圈產生磁場,周期性振動地發聲。可通過單片機高低電平直接控制

ULN2003:高耐壓、大電流達林頓陳列,由七個npn達林頓管組成(com接VCC,E接GND)

這里我的開發板上蜂鳴器連接引腳P1^5故可設置如下程序:

#include"reg52.h"

typedef unsigned int u16;
sbit beep=P1^5;

void delay(u16 i) //延時函數
{
while(i--);
}

void main()
{
while(1)
{
beep=~beep; //取反
delay(10); //延時100us,不同延時頻率不同聲音不同
}
}
登錄後復制

6、中斷
6.1、中斷的定義
CPU在處理某一事件時,發生另一事件B請求CPU迅速去處理(中斷發生),CPU暫時中斷當前的工作,轉去處理需要迅速處理的事件(中斷響應和中斷服務),待中斷事件處理完成後繼續處理原事件(中斷返回)

引起CPU中斷的根源稱為中斷源,CPU暫時中斷原來的事件轉向中斷事件,處理完成後回到原來的地方(即斷點),實現中斷功能的部件稱為中斷系統。

中斷的優點:分時操作:CPU可以分時為多個I/O設備服務,提高計算機的利用率、實時響應:CPU能夠及時處理應用系統的隨機事件,實時性大大增強、可靠性高:CPU具有處理設備故障及掉電等突發事件能力,使可靠性提高、解決了快速主機預慢速I/O設備的數據傳輸問題

6.2、中斷源、中斷寄存器和中斷優先順序
89C51的中斷系統有5個中斷源,2個中斷優先順序,可實現二級中斷嵌套。五個中斷源如圖由上至下對應為外部中斷0、定時器0、外部中斷1、定時器1、串口中斷,其中斷優先順序由上至下遞減;TCON中的IT0和IT1可決定INT0和INT1低電平有效還是下降沿有效;對應的中斷標志位IE0、TF0(定時器0溢出)、IE1、TF1(定時器1溢出)為1時觸發中斷,當RX或TX串列口接受或者發送完成RI或TI置1觸發中斷;

CPU對中斷系統所有中斷及某個中斷源的開放和屏蔽是由中斷寄存器IE控制的。

EX0(IE.0):外部中斷0允許位;ET0(IE.1):定時/計數器T0中斷允許位;EX1(IE.2):外部中斷1允許位;ET1(定時/計數器T1中斷允許位);ES(IE.4)串列口中斷允許位;EA(IE.7):CPU中斷總允許位

TCON中斷請求標志。

IT0(TCON.0),外部中斷0觸發方式控制位。當IT0=0時,為電平觸發方式;當IT0=1時,為邊沿觸發方式(下降沿有效)。

IE0(TCON.1),外部中斷0中斷請求標志位。發生中斷後標志位置一。

IT1(TCON.2),外部中斷1觸發方式控制位。

IE1(TCON.3),外部中斷1中斷請求標志位。

TF0(TCON.5),定時/計數器T0溢出請求標志位。

TF1(TCON.7),定時/計數器T1溢出中斷請求標志位。

同一優先順序的中斷請求不止一個時,則有中斷優先順序的排隊問題。其排列如圖所示:

中斷源

正在進行的中斷過程不能被新的同級或低級優先順序的中斷請求所中斷,進行的低優先順序中斷服務可被高優先順序中斷請求所中斷。

6.3、中斷處理過程
中斷響應條件:

中斷源有中斷請求;

此中斷源的中斷標志位為1;

CPU開中斷(即EA=1)。

使用中斷,需要做什麼

想使用的中斷是哪個?選擇而響應的中斷號;

希望觸發的條件是什麼?

希望在中斷之後干什麼?

以外部中斷0為例

EA=1; //打開總中斷開關
EX0=1; //打開外部中斷0
IT0=0/1; //設置外部中斷的觸發方式,0為低電平1為下降沿
登錄後復制
中斷服務函數

void int0 () interrupt 0 using 1 //int0為函數名稱,() interrupt為固定格式,0位中斷號,using1可不寫
{
do anything that you want
}
登錄後復制
7、外部中斷
51單片機中斷系統結構

P3.0:RXD串列口輸入
P3.1:TXD串列口輸出
P3.2:INT0外部中斷0輸入
P3.3:INT1外部中斷1輸入
P3.4:T0定時器0外部輸入
P3.5:T1定時器1外部輸入
外部中斷實驗:

將開關連接至單片機的P3.2口(外部中斷0),按下開關使得連接至P2.0的小燈點亮狀態進行取反。

#include "reg52.h"

typedef unsigned int u16;
typedef unsigned char u8;

sbit key = P3 ^ 2; //定義按鍵key
sbit led = P2 ^ 0; //定義P2.0為led口

void delay(u16 i) //構建延時函數
{
while (i--);
}

void Int0Init() //構建中斷初始化函數
{
EA = 1;
EX0 = 1;
IT0 = 1;
}

void main()
{
Int0Init(); //設置外部中斷0
while (1);
}

void Int0() interrupt 0 //中斷響應程序
{
delay(1000); //延時消抖
if (key == 0)
led = ~led;
}
登錄後復制

8、定時器和計數器中斷
8.1、CPU時序的有關知識
振盪周期:為單片機提供定時信號的振盪源的周期(即為晶振周期或外加振盪周期)(一般外界晶振為12M,一個振盪周期為1/12us)

狀態周期:2個振盪周期為1個狀態周期,用S表示。(若為12m晶振,一個狀態周期為1/6us)

機器周期:1個機器周期含6個狀態周期,12個振盪周期。(若為12m晶振,一個機器周期=12x1/12m,即為1us)

指令周期:完成1條指令所佔用的全部時間,以機器周期為單位。(若為12m晶振,1~4us)

8.2、51單片機定時器/計數器
8.2.1 需要了解的知識

51單片機有兩組定時器/計數器,因為既可以定時,又可以計數。

定時器/計數器和單片機CPU是相互獨立的。定時器/計數器工作過程不需要CPU的參與。可以增加單片機的效率,一些簡單的重復加1的工作可以交給定時器/計數器處理。同時實現精確定時的作用。

51單片機中的定時器/計數器是根據機器內部的時鍾或者是外部的脈沖信號對寄存器的數據加1。

8.2.2 工作原理

定時/計數器實際上是一個加1的計數器。它隨著計數器的輸入脈沖進行自加1,也就是每來一個脈沖計數器就自動加1,當加到計數器全為1時,再輸入一個脈沖就使計數器回零,且計數器的溢出使得相應的中斷標志位置一,同CPU發出中斷請求。

可見,由溢出時計數器的值減去計數器的初值才是加1計數器的值。

定時/計數器的實質是加1計數器(16位),由高8位和低8位兩個寄存器THx和TLx組成。TMOD是定時/計數器的工作方式寄存器,確定工作方式和功能;TCON是控制寄存器,控制T0、T1的啟動停止及設置溢出標志。

8.2.3、定時/計數器的控制

定時/計數器工作由兩個特殊功能寄存器控制。TMOD用於設置其工作方式;TCON用於控制其啟動和中斷申請。

(1)工作方式寄存器TMOD

工作方式寄存器TMOD用於設置定時/計數器的工作方式,低四位用於T0,高四位用於T1。格式如下:

GATE是門控位,用於控制定時器的啟動是否受中斷源的影響。GATE位0時,只要軟體使TCON中的TR0和TR1位1,就可以使定時器/計數器工作;GATE=1時,需要外部中斷INT0/1也為高電平時,TR0或TR1為1,才能啟動定時/計數器工作。

C/T:定時/計數模式選擇位。C/T=0為定時模式;C/T=1為計數模式。

M1 M0:工作方式設置位。定時/計數器有四種工作方式。(一般使用方式1和方式2)

(2)控制寄存器TCON

TCON的高4位用於控制定時/計數器的啟動和中斷。格式如下:

TF1(TCON.7):T1溢出中斷請求標志位。T1計數溢出時由硬體自動置1,CPU響應中斷後TF1由硬體自動清0。T1工作時,CPU可隨時查詢TF1的狀態,TF1可用作查詢測試的標志。TF1也可用軟體置1或清0。

TR1(TCON.6):T1運行控制位。TR1置1時,T1開始工作;TR1置0時,T1停止工作。TR1由軟體置1或清0.

TF0(TCON.5):T0溢出中斷請求標志位,其功能與TF1類同。

TR0(TCON.4):T0運行控制位,其功能與TR1類同。

8.3、定時/計數器的工作方式
1、方式0

方式0位13位計數器,由TL0的低5位(高3位未用)和TH0的8位組成。TL0的低5位溢出時向TH0進位,TH0溢出時,置位TCON中的TF0的標志,向CPU發出中斷請求。

定時器模式有:N=t/Tcy,定時器的初值還可以採用計數個數直接取補法獲得

計數器初值計算公式為:X=2^13-N,計數模式時計數脈沖是T0引腳上的外部脈沖獲得

門控位GATE具有特殊的作用。當GATE=0時,經反向後使或門輸出為1,此時僅由TR0控制與門的開啟,與門輸出1時,控制開關接通,計數開始;當GATE=1時,由外中斷引腳信號控制或門的輸出,此時控制與門的開啟由外部中斷引腳信號和TR0共同控制。

2、方式1

方式1的計數位數是16位,由TL0作為低8位,TH0作為高8位,組成了16加1計數器。

計數個數與計數初值的關系為:X=2^16-N

3、方式2

方式2位自動重裝初值的8位計數方式。(只要低8位計滿就會重新裝載)

計數與計數初值的關系為:X=2^8-N,適合於用作較精確的脈沖信號發生器。

4、方式3

方式3隻適用於定時/計數器T0,定時器T1處於方式3時相當於TR1=0,停止計數。

工作方式3將T0分成兩個的8位計數器TL0和TH0。

使用定時/計數器該做哪些工作:

對TMOD賦值,以確定T0和T1的工作方式。

計算初值,並將其寫入TH0、TL0或TH1、TL1。

中斷方式時,對EA賦值,開放定時器中斷。

使TR0或TR1置位,啟動定時/計數器定時或計數

計數器初值的計算

機器周期也就是完成一個基本操作所需要的時間。

機器周期=1/單片機的時鍾頻率

51單片機的時鍾頻率是外部時鍾的12分頻。也就是說當外部晶振的頻率輸入到單片機裡面的時候要進行12分頻。當使用12M晶振,那麼單片機內部的時鍾頻率就是12/12MHZ,機器周期=1us

定時1ms的初值是多少呢?1ms=1000us。也就是要數1000個數,初值=65535-1000+1(因為實際上計數器記到66636才溢出)=64536=FC18H

8.4、定時器中斷常式

時間小燈間隔1s的閃爍,連接led至P2^0口,使用定時器0進行定時

#include "reg52.h"

typedef unsigned int u16;
typedef unsigned char u8;

sbit led = P2 ^ 0;

void time0Init()
{
TMOD = 0x01; //定時器0門控位設置為0,設置為定時器模式,計數模式1
TH0 = 0xFC; //設置定時器初值
TL0 = 0x18;
EA = 1; //開啟總中斷
ET0 = 1; //打開定時器0中斷允許
TR0 = 1; //打開定時器
}

void main()
{
time0Init();
while (1);
}

void time0() interrupt 1
{
static u16 i; //設置靜態變數,每過1ms即執行一次中斷加1
TH0 = 0xFC; //賦予初值
TL0 = 0x18;
i++;
if (i == 1000) //u16累加至1000即過1s後i清0 led狀態取反
{
i = 0;
led = ~led;
}
}
登錄後復制

9、串口通信
9.1、串口通信的原理
計算機通信是指計算機與外部設備或計算機與計算機之間的信息交換。通信有並行通信和串列通信兩種。

並行通信:將數據位元組的各位用多條數據線同時進行傳送。

並行通信特點:控制簡單、傳輸速度快;由於傳輸線較多,長距離傳送成本高且接受的各位同時接收存在困難。

串列通信:將數據位元組分成一位一位的形式在一條傳輸線上逐個地傳送。

串列通信的特點:傳輸線少,長距離傳送時成本低,且可以利用電話網等現成的設備,但數據的傳送控制比2並行通信復雜。

串列通信的基本概念

一、非同步通信與同步通信

1、非同步通信:通信的發送與接收設備使用各自的時鍾控制數據的發送和接收過程。為使雙方的收發協調,要求發送和接收的時鍾盡可能一致。

非同步通信是以字元(構成的幀)為單位進行傳輸,字元與字元之間的間隙(時間間隔)是任意的,但同一字元內的各位之間的距離均為「位間隔」的整數倍。

非同步通信的特點:不要求收發雙方時鍾的嚴格一致,實現容易,設備開銷較小,但每個字元要附加2~3位用於起止位,各幀之間還有間隔,因此傳輸效率不高。

2、同步通信:建立發送方時鍾對接收方時鍾的直接控制,使雙方達到完全同步。此時,傳輸數據的位之間的距離均為「位間隔」的整數倍,同時傳送的字元間不留間隙,即保持位同步關系,也保持字元同步關系。發送方對接收方的同步可以通過兩種兩種方法實現。(數據加時鍾形式傳送)

二、串列通信的傳輸方向

單工:數據僅能沿一個方向,不能實現反向傳輸。

半雙工:數據可以沿兩個方向,但需要分時進行。

全雙工:數據可以同時進行雙向傳輸。

串列通信常見的錯誤校驗

1、奇偶校驗:發送數據時,數據位尾隨的1位為奇偶校驗位(1或0)。奇校驗時,數據中的「1」的個數與校驗位「1」的個數之和為奇數;偶校驗時,數據中「1」的個數與校驗位「1」的個數之和應為偶數。接收字元時,對「1」的個數進行校驗,若發現不一致,則說明傳輸數據中出現了差錯。(如傳輸數據為1101110數據位1的個數為5奇數,若為奇校驗則校驗位為0)

2、代碼和校驗

3、循環冗餘校驗

三、傳輸速率

1、比特率:每秒傳輸二進制代碼的位數,單位是:位/秒(bps)。如每秒鍾傳送240個字元,而每個字元格式包含10位(1個起始位、1個停止位、8個數據位),這時比特率為:

10位X240個/秒=2400bps

2、傳輸距離與傳輸速率之間的關系

串列介面或終端直接傳送串列信息位流的最大距離與傳輸速率及傳輸線的電氣特性有關。傳輸距離隨傳輸速率的增加而減小。

四、串列通信介面標准

1、RS-232C介面:EIA(美國電子工業協會)修訂,定義了數據終端設備與數據通信設備之間的物理介面標准。

(1)機械特性:RS-232C介面規定使用25針連接器,連接器的尺寸及每個插針的排列位置都有明確的定義。

(2)過程特性:過程特性規定了信號之間的時序關系,以便正確地接收和發送數據。

遠程通信連接(RTS請求發送,DSR數據建立就緒,TXD發送數據,RXD接收數據)

近程通信連接

RS-232C電平與TTL電平轉換驅動電路(將5V的單片機電平轉換為12V的計算機串口電平,將12V的計算機電平轉換為計算機的12V電平)

2、採用RS-232C介面存在的問題(通常使用在通信距離短的設備)

傳輸距離短,傳輸速率低:受電容允許值的約束,使用傳輸距離一般不要超過15m。最高傳送速率為20Kbps。

有電平漂移:RS232C要求收發雙方共地。通信距離較大時,收發雙方的地電位差別較大,在信號地上將有比較大的地電流並產生壓降。

抗干擾能力差:RS-232C在電平轉換時採用單端輸入輸出,在傳輸過程中當干擾和雜訊混在正常的信號中。為了提高信噪比,RS-232C匯流排標准不得不採用較大的電壓擺幅。

9.2、80C51的串列口
80C51串列口結構

有兩個物理上獨立的接收、發送緩沖器SBUF,它們佔用同一地址99H(因此在編程時通常無論接收還是發送都寫SBUF);接收器是雙緩存結構;發送緩沖器由於是CPU主動進行發送,不會產生重疊錯誤。

1、80C51串列口的控制寄存器

SCON是一個特殊功能寄存器,用以設定串列口的工作方式、接收/發送控制以及設置狀態標志:

SM0和SM1為工作方式選擇位,可以選擇四種工作方式:(通常採用方式1)

SM2,多機通信控制位,主要用於方式2和方式3.當接收機的SM2=1時可以利用收到的RB8來控制是否激活RI(RB8=0時不激活RI,收到信息丟棄)。當SM2=0時,不論收到的RB8為0和1,均可以使收到的數據進入SBUF,並激活RI。通過SM2,可以實現多機通信。方式0時,SM2必須是0。在方式1時,如果SM2=1,則只有接收到有效停止位時,RI才置1.

REN,允許串列接收位,由軟體置REN=1,則啟動串列口接收數據;若軟體置REN=0,則禁止接收。

TB8,在方式2或方式3中,時發送數據的第九位,在方式0和方式1中,該位未用。

RB8,在方式2或方式3中,是接收到數據的第九位。

TI,發送中斷標志位。在方式0時,當串列發送第8位數據結束時(或其他方式,串列發送停止位的開始時),由內部硬體使TI置1,向CPU發中斷申請。在中斷服務程序中,必須用軟體將其清0,取消此中斷申請。

RI接收中斷標志位。在方式0時,當串列口接收第8位數據結束時(或其他方式,串列接收停止位的中間時),由內部硬體使RI置1,向CPU發出中斷申請。也必須在中斷服務程序中,用軟體將其清0,取消中斷申請。
PCON中只有一位SMOD與串列口工作有關:

SMOD(PCON.7) 波特率倍增位。在串列口方式1、方式2、方式3時,波特率與SMOD有關,當SMOD=1時,波特率提高一倍。復位時,SMOD=0.

9.3、串列口的工作方式
1、方式0

方式0時,串列口位同步移位寄存器的輸入輸出方式。主要用於擴展並行輸入或輸出口。數據由RXD(P3.0)引腳輸入或輸出,同步移位脈沖由TXD(P3.1)引腳輸出。發送和接收均為8位數據,低位在先,高位在後。波特率固定為fosc/12。

發送時,如圖先發送低位後發送高位,發送完成後TI置1

接收時,當接收完成後RI由硬體置1.

2、方式1

方式1是10位數據的非同步通信口。TXD位數據發送引腳,RXD為數據接收引腳,傳送一幀數據的格式如圖所示。其中1位起始位,8位數據位,1位停止位。

用軟體置REN為1,接收器以所選擇波特率的16倍速率采樣RXD引腳電平,檢測到RXD引腳輸入電平發生負跳變時,則說明起始位有效。

『柒』 定時器雙向流水燈閃爍

把定時器設置成50ms一次定時中斷,作為時間基準,在定時中斷里再每次對一個變數計數加加得到想要的0.5秒和2秒時間基準 define uint unsigned int //定義無符號整數 void delay(uint); //聲明延時函數 void main(void){ uint i;uchar temp;while(1){ temp=0xFE;for(i=0;i<8;i++) //8個流水燈依次全部點亮 { P1=temp;delay(500...
用定時器實現流水燈從左到右雙位循環,跳動頻率為1秒。程序怎麼編啊... —— 用定時器實現流水燈,跳動頻率為1秒。用定時器定時50ms,採用中斷方式,對定時中斷計數,計數20次就是1秒。如下模擬圖,P1口接8個LED燈。

有關於單片機的一段程序,是用定時器做流水燈的 —— 要用定時器 就得用定時器中斷。。至於全亮的原因 是因為 delay1s 沒有起到延時1s的作用 二十極其短的延時 導致流水燈太快 給人感覺是全亮的。。你可以改成 long a ;while(a<500000)(值大小自己調試)...

如何用定時器中斷實現流水燈1秒定時流水? —— 可以中斷50ms一次(不一定非要50ms),每次中斷計數一次,等計數時間到1s,就執行一次流水動作

求助,用定時器控制流水燈循環 —— 將定時器中斷時間設置為一秒一次。聲明一個全局的變數temp 在初始化的時候賦初值,在中斷服務函數中

用定時器控制16路流水燈循環單片機,且定時時間可調,謝謝! —— interrupt1{uchari;//循環變數//重裝定時器初值,50ms中斷一次p++;if(p>=20)//一秒鍾改變一次狀態{for(i=0;i<8;i++){P1=temp;temp<<=1;//左移一位,流水燈}p=0;}}呵呵,這就是簡單的後台任務處理思想 ...

51單片機定時器實現流水燈,並用按鍵外部中斷控制改變流水燈的流向,這個... —— EA=1;//開總中斷 EX0=1;//開外部中斷0 IT0=1;//下降沿觸發 while(1){ if(flag==0){ for(i=0;i<8;i++){ P0=0X01<<i;delayms(500); } } if(flag==1){ for(i=0;i<8;i++){ P0=0X80...

51單片機用定時器,怎麼編程流水燈一秒閃爍一次, —— 先寫一個延時子函數delay,延時時間1秒。然後寫LED=0;delay(1);LED=1;這樣就可以做到一亮一滅,再把這段程序加入到循環中就可以,循環函數很簡單不用再說了吧,如果還不懂回復我給你程序 ...

plc怎麼用計時器做3個流水燈程序 —— 計數器,定時器……用計數器,就數值1點亮一個,2點亮一個,3點亮一個,加完復位,加個循環;定時器,定時一秒,二秒,三秒,每個對應一個燈,加個循環

『捌』 單片機流水燈雙燈點亮程序

AT89S52也是51系列的單片機,程序完全兼容,用51的程序就行了,包括外圍電路也一樣,直接用就行了。
單燈亮就是在IO口輸出一個二進制數中只有一位不同的數,比如說「00000001」,就只有最後一位是「1」,其餘的都是「0」,要雙燈亮就使其中的兩位與其他的不同就行了,還是那上面的例子來說,現在改成「00000011」,這樣有兩位是不用的了,當然不同的兩位也可以不挨著,比如「00100001」,這樣也是兩位同時點亮。(例子的前提是輸出高電平時LED點亮,如果不是的話就把裡面的「0」改成「1」,「1」改成「0」就行了。)

你有源程序嗎,有的話發到我郵箱里,我幫你改吧,這方面你一點不懂,這樣問下去也不會有什麼進展的了,郵箱發到你的"網路Hi"上了。

『玖』 單片機led流水燈方向如何改變

工作原理
該系統與上位機的通信由AT91M42800A的USART0口與485介面電路完成,上位機僅需將要顯示的數據,傳送至AT91M42800A即可。開機後,AT91M42800A初始化,讀入啟動代碼後,將保存在Flash存儲器內的程序代碼和所要顯示的字模數據,重映射到SDRAM中,使得系統的數據存取全部在高速SDRAM中完成。在接收到上位機的數據後,AT91M42800A將要顯示的數據,轉換成相對應的LED屏顯示驅動信號,再加入相應的動態顯示效果控製程序(畫面左移、上移、開幕、覆蓋、閃爍和直顯等)後,用SPI口分別輸出給行、列驅動電路。同時,若有需要,上位機所傳來的數據或圖像畫面,也可以保存在Flash存儲器中。
顯示屏採用1/16動態逐次行掃描方式,先將SPIA埠中的24個位元組數據依此串列移入對應的24個A6276列驅動電路,並鎖存。接著,SPIB埠再將一行行選通信號串列移入行驅動電路,完成一行的LED顯示。然後依理,逐次的顯示LED屏的各行。
二極體亮滅時間的占空比可用軟體進行設定,以選取合適亮度,提高發光二極體的使用壽命。在現場實際安裝的LED顯示屏,有效顯示面積約為4.6 m2,共有288×384=110 592個像素,滿幀刷新時間最短可小於8 ms,換幀頻率125 Hz以上,比傳統的用單片機組成的顯示系統提高了10倍以上的幀頻,保證了動態顯示時的視覺效果。同時,在相同的條件下,還可以使得實際可視像素點增多。
軟體部分簡述
本系統的軟體採用μC/OSII操作系統,使得系統具有強大的多任務管理、定時器管理、中斷管理、存儲管理等功能,通過對相關寄存器的實時監控,可以大大提高系統的穩定性,這些是以往用單片機和部分DSP處理器所無法實現的。
顯示應用程序採用定時器中斷方法,通過設置合適的進入中斷時間常數,即可以得到高於40 Hz的LED刷新幀頻,使人眼得到穩定的動態視覺效果。
畫面的實時動態處理,即各種動態顯示方式均以子程序形式編寫,每種顯示方式都是獨立的子程序。具體的動態顯示方式有:畫面左、右移,上、下移,拉幕,覆蓋,閃爍,直顯等多種方式。

閱讀全文

與單片機流水燈雙向相關的資料

熱點內容
伺服器顯示error1什麼意思 瀏覽:708
python代碼精簡 瀏覽:457
文件加密了怎麼找到了 瀏覽:193
jellyfin插件怎麼選擇主伺服器 瀏覽:836
asp用戶注冊源碼 瀏覽:48
什麼是照片壓縮文件 瀏覽:392
java調用js代碼 瀏覽:979
崑山市民app怎麼修改身份信息 瀏覽:779
php登陸次數 瀏覽:744
python字元轉成數字 瀏覽:822
海川用的是什麼伺服器 瀏覽:376
口才是練出來的pdf 瀏覽:458
雲伺服器哪個公司性價比高 瀏覽:517
源碼論壇打包 瀏覽:558
php怎麼做成word 瀏覽:692
python批量生成密鑰 瀏覽:492
程序員要不要考社區人員 瀏覽:150
app的錢怎麼充q幣 瀏覽:814
android銀行卡識別 瀏覽:756
怎麼在app投放廣告 瀏覽:11