51單片機必會驅動

51單片機必會驅動


數碼管驅動

動態掃描顯示

#include <reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;

sbit LSA = P2^2;//三八譯碼器輸入端,位選
sbit LSB = P2^3;
sbit LSC = P2^4;

u8 code smgduan[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共陰極數碼管段碼

void delay(u16 i)
{
    while(i--);
}

void digDisplay()
{
    u8 i;
    for(i=0;i<8;i++)
    {
        switch (i)
        {
            case 0:
                LSA = 0;LSB = 0;LSC = 0;break;
            case 1:
                LSA = 1;LSB = 0;LSC = 0;break;
            case 2:
                LSA = 0;LSB = 1;LSC = 0;break;
            case 3:
                LSA = 1;LSB = 1;LSC = 0;break;
            case 4:
                LSA = 0;LSB = 0;LSC = 1;break;
            case 5:
                LSA = 1;LSB = 0;LSC = 1;break;
            case 6:
                LSA = 0;LSB = 1;LSC = 1;break;
            case 7:
                LSA = 1;LSB = 1;LSC = 1;break;
        }
            P0 = smgduan[7-i];
            delay(100);
            P0 = 0x00;//消隱
    }
}

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

靜態顯示

這裏寫代碼片

串口驅動

相關原理

  1. 串行通信分類
    異步通信:異步通信是以字符(構成的幀)爲單位進行傳輸,字符之間時間間隔任意
    同步通信:同步通信時要建立發送方時鐘對接收方時鐘的直接控制,使雙方達到完全同步。傳輸數據的位之間的距離均爲“位間隔”的整數倍 ,同時傳送的字符間不留間隙,即保持位同步關係,也保持字符同步關係。可通過外同步和自同步實現。
  2. 傳輸方向:單工、半雙工(分時雙向通信)、全雙工。
  3. 傳輸速率:比特率。即每秒鐘傳輸二進制代碼的位數
  4. 串行通信接口標準:
    a) RS-232C接口
    有25針和9針接口
    特點: (1)傳輸距離短,傳輸速率低 (2) 有電平偏移 (3)抗干擾能力差
    b) RS-422A接口(全雙工)
    RS-422A輸出驅動器爲雙端平衡驅動器,差分電路避免或大大減弱地線干擾和電磁干擾的影響,RS-422A傳輸速率(90Kbps)時,傳輸距離可達1200米。
    c) RS-485接口(半雙工)
    RS-485是RS-422A的變型,需要兩根傳輸線,抗干擾性極好,傳輸距離可達1200米,傳輸速率可達1Mbps。
  5. 串口控制寄存器SCON
    SCON 是一個特殊功能寄存器,用以設定串行口的工作方式、接收/發送控制以及設置狀態標誌:
    這裏寫圖片描述
    SM0、SM1:工作方式選擇位,有四種方式可選
    這裏寫圖片描述
    SM2:多機通信控制位,主要用於方式2和方式3。
if(SM2==1)
{
    if(RB8==0)
        不激活RI,丟棄收到的信息;
    else
        收到的數據進入SBUF,激活RI;
}else
{
    無視RB8,數據進入SBUF,激活RI;
}
在方式0時,SM2必須是0。在方式1時,如果SM2=1,則只有接收到有效停止位時,RI才置1。
REN:允許串行接受位
TB8:在方式2或方式3中,是發送數據的第九位
RB8:在方式2或方式3中,是接收數據的第九位
TI:發送中斷標誌位
RI:接收中斷標誌位

6. 功率控制寄存器PCON
這裏寫圖片描述
SMOD:波特率倍增位,爲1時波特率提高一位
7. 80C51串行口工作方式
a) 方式0
這種工作方式比較特殊,與常見的微型計算機的串行口不同,它又叫同步移位寄存器輸出方式。在這種方式下,數據從 RXD 端串行輸出或輸入,同步信號從 TXD 端輸出,波特率固定不變,爲振盪率的 1/12 。該方式是以 8 位數據爲一幀,沒有起始位和停止位,先發送或接收最低位。
b) 方式1
方式1是10位數據的異步通信口。TXD爲數據發送引腳,RXD爲數據接收引腳。其中1位起始位,8位數據位,1位停止位。
用軟件置REN爲1時,接收器以所選擇波特率的16倍速率採樣RXD引腳電平,檢測到RXD引腳輸入電平發生負跳變時,則說明起始位有效,將其移入輸入移位寄存器,並開始接收這一幀信息的其餘位。接收過程中,數據從輸入移位寄存器右邊移入,起始位移至輸入移位寄存器最左邊時,控制電路進行最後一次移位。
當RI=0,且SM2=0(或接收到的停止位爲1)時,將接收到的9位數據的前8位數據裝入接收SBUF,第9位(停止位)進入RB8,並置RI=1,向CPU請求中斷。
c) 方式2和方式3
方式2和方式3時起始位1位,數據9位(含1位附加的第9位,發送時爲SCON中的TB8,接收時爲RB8),停止位1位,一幀數據爲11位。方式2的波特率固定爲晶振頻率的1/64或1/32,可由 PCON 的最高位選擇。方式3的波特率由定時器T1的溢出率決定。
採用這種方式可接收或發送 11 位數據,以 11 位爲一幀,比方式 1 增加了一個數據位,其餘相同。第 9 個數據即 D8 位具有特別的用途,可以通過軟件控制它,再加特殊功能寄存器 SCON 中的 SM2 位的配合,可使 MCS-51 單片機串行口適用於多機通信。方式 2 的波特率固定,只有兩種選擇,爲振盪率的 1/64 或 1/32 ,

SM0 SM1 方式 功 能 說 明
0 0 0 同步移位寄存器方式(用於擴展I/O口)
0 1 1 8位異步收發,波特率可變(由定時器控制)
1 0 2 9位異步收發,波特率爲fosc/64或fosc/32
1 1 3 9位異步收發,波特率可變(由定時器控制)
8. 波特率的計算
方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可變的,由定時器T1的溢出率來決定。四種工作方式共有三種波特率。
方式0的波特率 = fosc/12
方式2的波特率 =(2^(SMOD)/64)· fosc
方式1的波特率 =(2^(SMOD)/32)·(T1溢出率)
方式3的波特率 =(2^(SMOD)/32)·(T1溢出率)
T1 溢出率 = fosc /{12×[256-TH1)]}
這裏寫圖片描述
9. 串口使用方法
配置產生波特率的定時器1、串行口控制和中斷控制的參數
a) 確定T1的工作方式(編程TMOD寄存器);
b) 計算T1的初值,裝載TH1、TL1;
c) 啓動T1(編程TCON中的TR1位);
d) 確定串行口控制(編程SCON寄存器);
串行口在中斷方式工作時,要進行中斷設置(編程IE、
IP寄存器)。

代碼

#include <reg51.h>

typedef unsigned char u8;
typedef unsigned int u16;

void UsartInit()/*完成串口初始化工作*/
{
    TMOD = 0x20;//T1的M1M0:10 選擇方式2 8位自動重裝定時器 C/~T 位爲0 是定時器
    TH1 = 0xF3;//因爲是8位 所以TH和TL一樣 波特率4800 SMOD:1 計算之後的初值
    TL1 = 0xF3;
    PCON = 0x80;//最高位爲1 波特率翻倍
    TR1 = 1;//運行定時器T1
    SCON = 0x50;//串口控制寄存器 SM0SM1:01 採用方式1(10位異步收發器 8位數據)REN:1 允許串口接收
    ES = 1;//串口中斷開
    EA = 1;//總中斷開
}

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

void Usart() interrupt 4
{
    u8 receiveData;
    receiveData = SBUF;//從數據緩衝區SBUF中讀取數據至receiveData變量中
    RI = 0;//接收中斷標誌位 置0以接收下組數據
    SBUF = receiveData ;//給SBUF賦值 意在向串口發送數據
    while(!TI);//判斷是否發送完成 若完成會被置1 向CPU請求中斷
    TI = 0;//發送中斷標誌位 置0以發送下組數據
}

PCF8951 AD/DA驅動

ADC

DAC

矩陣鍵盤驅動

相關原理

代碼

AT24C02存儲模塊驅動

DS1302S時鐘驅動

1602液晶驅動

18B20溫度模塊驅動

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章