74ls164聯(lián)級(jí)應(yīng)用電路:串口連接兩個(gè)74LS164驅(qū)動(dòng)2個(gè)LED
數(shù)碼管顯示
單片機(jī)的最小系統(tǒng)是單片機(jī)能夠工作的最小硬件組合,對(duì)于8051系列單片機(jī),其電路的最小系統(tǒng)大致相同,主要包括電源、晶體振蕩電路、復(fù)位電路等。
串口
數(shù)據(jù)通信方式包括并行通信和串行通信兩種。并行通信就是多條數(shù)據(jù)線(xiàn)上同時(shí)傳送,其優(yōu)點(diǎn):速度快,只適于近距離通信。串行通信就是數(shù)據(jù)以為以為的順序傳送,其優(yōu)點(diǎn):線(xiàn)路簡(jiǎn)單,成本低,適合遠(yuǎn)距離通信。
串行通信方式包括:異步串行通信和同步串行通信。異步方式,數(shù)據(jù)傳送不連續(xù),時(shí)間間隔任意。同步方式,發(fā)送與接收同步。數(shù)據(jù)傳送方式:?jiǎn)喂?、半雙工、全雙工、多工。常見(jiàn)的串行通訊有:RS-232、RS-485、CAN總線(xiàn)等。
串行口控制寄存器包括:串行口控制寄存器SCON(控制工作方式)、電源控制寄存器PCON(控制波特率)。SM0、SM1選擇工作方式,SM2用于多機(jī)通信,REN允許接收控制位,TB8/RB8發(fā)送/接收數(shù)據(jù)D8位,TI/RI為發(fā)送/接收中斷標(biāo)志位。
74LS164
串行口工作于方式0,發(fā)送數(shù)據(jù)時(shí),是把串行端口設(shè)置成“串入并出的”輸出口。將它設(shè)置為“串入并出”輸出口時(shí),需外接1片“串入并出”同步移位芯片74LS164或CD4094,本次設(shè)計(jì),用74LS164。
74LS164是8位邊沿觸發(fā)式移位寄存器,具有DIP、SO14等多種封裝形式。其DIP封裝形式如上圖所示。
數(shù)據(jù)通過(guò)A或B之一串行輸入,任一輸入端可以用作高電平使能端控制另一輸入端的數(shù)據(jù)輸入,兩個(gè)輸入端或者連接在一起,或者把不用的輸入端接高電平,一定不要懸空。時(shí)鐘CP每次由低變高時(shí),數(shù)據(jù)右移一位輸入到Q0。Q0是兩個(gè)數(shù)據(jù)輸入端A和B的邏輯與。
輸入的數(shù)據(jù)在Q0輸出,并依次右移在其它輸出端口輸出。
LED數(shù)碼管
LED數(shù)碼管是單片機(jī)應(yīng)用系統(tǒng)中常用的輸出設(shè)備,其特點(diǎn)結(jié)構(gòu)簡(jiǎn)單,價(jià)格便宜。單片機(jī)系統(tǒng)常用7段LED數(shù)碼管,由8個(gè)發(fā)光二極管構(gòu)成。 LED數(shù)碼管分為共陽(yáng)極和共陰極兩種。共陽(yáng)極LED數(shù)碼管,就是8個(gè)LED陽(yáng)極連接在一起再接高電平。共陰極LED數(shù)碼管,就是8個(gè)LED陰極連接在一起再接地。通過(guò)相應(yīng)的LED顯示,呈現(xiàn)出對(duì)應(yīng)的數(shù)字、符號(hào)。
‘串入并出’驅(qū)動(dòng)LED數(shù)碼管顯示
本次設(shè)計(jì),對(duì)撥碼開(kāi)關(guān)進(jìn)行撥動(dòng),從而將信息傳遞給單片機(jī),再由單片機(jī)通過(guò)串口工作在方式0將數(shù)據(jù)串行輸出給74LS164,由74LS164并行輸出給LED數(shù)碼管,進(jìn)行相應(yīng)的顯示。實(shí)際操作中,撥碼開(kāi)關(guān)低四位控制一個(gè)74LS164驅(qū)動(dòng)一個(gè)LED數(shù)碼管,而撥碼開(kāi)關(guān)高四位控制另一個(gè)74LS164驅(qū)動(dòng)另一個(gè)LED數(shù)碼管,使兩個(gè)LED數(shù)碼管獨(dú)立顯示。
本次設(shè)計(jì)涉及到,串口工作方式。串口工作于方式0時(shí),其功能為8位移位寄存器,相當(dāng)于I/0口的擴(kuò)展,再連接74LS164芯片既可實(shí)現(xiàn)“串入并出”的功能。使用查表法,將撥碼開(kāi)關(guān)的2進(jìn)制數(shù)和LED代碼建立一一對(duì)應(yīng)關(guān)系,其中用到了一些編程小技巧。設(shè)計(jì)中,又遇到另外一個(gè)問(wèn)題,74LS164級(jí)聯(lián)問(wèn)題,我在網(wǎng)上搜尋了一些問(wèn)題的答案,再看了書(shū)上對(duì)74LS164的介紹,于是得到了算是一些結(jié)論吧。將74LS164最后一個(gè)輸出端,連在另外一個(gè)74LS164的A、B之一的數(shù)據(jù)輸入端,就構(gòu)成了級(jí)聯(lián)。在程序中每一次循環(huán)向串口緩存器發(fā)送兩次8位數(shù)據(jù),即可實(shí)現(xiàn)兩個(gè)LED數(shù)碼管獨(dú)立顯示(0~F)。
系統(tǒng)原理圖設(shè)計(jì)
系統(tǒng)所需元器件包括:AT89C51、瓷片電容CAP30pF、晶振CRYSTAL、電阻RES、電解電容22uF、共陽(yáng)數(shù)碼管7SEG-COM-AN-GRN、撥碼開(kāi)關(guān)DIPSW_8、74LS164-IEC、總線(xiàn)。系統(tǒng)設(shè)計(jì)原理圖如圖3.1所示。
圖3.1 系統(tǒng)設(shè)計(jì)原理圖
程序設(shè)計(jì)流程圖
程序
#include“reg51.h”
#define uint unsigned int
#define uchar unsigned char
const uchar tab[]={0xC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0x80,0X90,0X88,
0X83,0XC6,0XA1,0x86,0X8E}; //LED代碼(0~F)
void main(void)
{
uchar i=0; //變量初始化
uchar j=0;
uchar m=0;
uchar k=0;
SCON=0X00; //設(shè)置串口工作方式為方式0
SBUF=0XC0;
while(TI==0);
TI=0;
while(1)
{
while(P1==i); //查詢(xún)撥碼開(kāi)關(guān)是否有變化
i=P1;
j=~i;
m=j&0xf0; //取撥碼開(kāi)關(guān)高四位
k=j&0x0f; //取撥碼開(kāi)關(guān)低四位
m=m》》4; //高四位移到低四位建立對(duì)應(yīng)關(guān)系
SBUF=tab[k]; //查表賦值
while(TI==0); //判斷是否發(fā)送完畢
TI=0;
SBUF=tab[m]; //查表賦值
while(TI==0); //判斷是否發(fā)送完畢
TI=0;}}
系統(tǒng)仿真結(jié)果圖如圖所示。
評(píng)論