74HC165簡介
74HC165是八位并行輸入/串行輸出移位寄存器,兩片74HC165串聯(lián)在一起,在時(shí)鐘脈沖的作用下,從KB-DAT讀入串行數(shù)據(jù),可完成對16位鍵盤數(shù)據(jù)掃描讀取。
74HC165是一款高速CMOS器件,74HC165遵循JEDEC標(biāo)準(zhǔn)no.7A。74HC165引腳兼容低功耗肖特基TTL(LSTTL)系列。
74HC165是8位并行輸入串行輸出移位寄存器,可在末級(jí)得到互斥的串行輸出(Q0和Q7),當(dāng)并行讀取(PL)輸入為低時(shí),從D0到D7口輸入的并行數(shù)據(jù)將被異步地讀取進(jìn)寄存器內(nèi)。而當(dāng)PL為高時(shí),數(shù)據(jù)將從DS輸入端串行進(jìn)入寄存器,在每個(gè)時(shí)鐘脈沖的上升沿向右移動(dòng)一位(Q0→Q1→Q2,等等)。利用這種特性,只要把Q7輸出綁定到下一級(jí)的DS輸入,即可實(shí)現(xiàn)并轉(zhuǎn)串?dāng)U展。
74HC165的時(shí)鐘輸入是一個(gè)“門控或”結(jié)構(gòu),允許其中一個(gè)輸入端作為低有效時(shí)鐘使能(CE)輸入。CP和CE的引腳分配是獨(dú)立的并且在必要時(shí),為了布線的方便可以互換。只有在CP為高時(shí),才允許CE由低轉(zhuǎn)高。在PL上升沿來臨之前,CP或者CE應(yīng)當(dāng)置高,以防止數(shù)據(jù)在PL的活動(dòng)狀態(tài)發(fā)生位移。
單片機(jī)驅(qū)動(dòng)74hc165程序
當(dāng)1腳拉低時(shí),八位并行數(shù)據(jù)被壓入鎖存器,但與此同時(shí),D7也已經(jīng)從7腳輸出,因此只要再循環(huán)7次將數(shù)據(jù)讀出即可
ucharReadExport(void)
{
unsignedchari=0,receive_date=0;
ucharRead_Int;
Clr_P25;//使能控制。為低電平時(shí),并行數(shù)據(jù)進(jìn)入鎖存器
Clr_P25;
Read_Int=(P2&0x10);//串行輸出數(shù)據(jù)線
if(Read_Int==0x10)//把最高位讀出
receive_date|=0x01;
Clr_P03;
Set_P25;//為高電平時(shí),可以進(jìn)行串行數(shù)據(jù)讀出
for(i=1;i《=7;i++)//接下來只要進(jìn)行7次循環(huán)
{
Clr_P03;
Set_P03;//時(shí)鐘線,上升沿有效
Read_Int=(P2&0x10);//串行輸出數(shù)據(jù)線
if(Read_Int==0x10)
{
receive_date|=(0x01《《i);
}
}
returnreceive_date;
}
基于51單片機(jī)之74HC165實(shí)驗(yàn)例程
**************************Copyright(C)CaKe*****************************************
==================================================
==============**文件名:main.c==============
==============**作者:CaKen==============
==============**版本號(hào):V1.0==============
==============**時(shí)間:2014.08.16==============
==============**功能描述:74HC165實(shí)驗(yàn)測試==============
====================================================
**********************************************************
#include
#include
//SPI接口
sbitCLK=P3^6;//串行時(shí)鐘
sbitIN_PL=P1^6;//把數(shù)據(jù)加載到鎖存器中
sbitIN_Dat=P1^7;//數(shù)據(jù)通過P1.7腳移進(jìn)單片機(jī)內(nèi)處理
sbitRELAY=P1^4;//繼電器
sbitBEEP=P1^5;//蜂鳴器
unsignedcharbdataKey;
sbitK0=Key^0;//位定義
sbitK1=Key^1;//位定義
sbitK2=Key^2;//位定義
sbitK3=Key^3;//位定義
sbitK4=Key^4;//位定義
sbitK5=Key^5;//位定義
sbitK6=Key^6;//位定義
sbitK7=Key^7;//位定義
bitM0,K0J;//位定義
**********************************************************
函數(shù)名:
調(diào)用:beep();
返回值:
結(jié)果:
備注:蜂鳴器(讓蜂鳴器發(fā)出動(dòng)聽聲音)
************************************************************
voidbeep()
{
unsignedchari,j;
for(i=0;i《2;i++)
{
for(j=0;j《255;j++)
{_nop_();}
BEEP=!BEEP;//BEEP取反
}
BEEP=1;//關(guān)閉蜂鳴器
}
*********************************************************
函數(shù)名:74HC165函數(shù)初始化
調(diào)用:HC165_Init();
參數(shù):
返回值:
結(jié)果:
備注:IN_PL上升沿,CLK上升沿
********************************************************
unsignedlongHC165_Init(void)
{
unsignedchari;
unsignedintindata;
IN_PL=0;//上升沿
_nop_();//短暫延時(shí)產(chǎn)生一定寬度的脈沖
IN_PL=1;//將外部信號(hào)全部讀入鎖存器中
_nop_();
indata=0;//保存數(shù)據(jù)的變量清0
for(i=0;i《8;i++)
{
indata=indata《《1;//左移一位
if(IN_Dat==1)
indata=indata+1;//如果IN_Dat檢測到高電平保存數(shù)據(jù)的變量加1
CLK=0;//時(shí)鐘置0
_nop_();//上升沿
CLK=1;//時(shí)鐘置1
}
return(~indata);//將保存數(shù)據(jù)的變量取反后返回
}
*********************************************************
函數(shù)名:主函數(shù)
調(diào)用:main
參數(shù):
返回值:
結(jié)果:
備注:74HC165控制八個(gè)按鍵
********************************************************
main()
{
while(1)
{
unsignedlongInput=HC165_Init();//調(diào)用165驅(qū)動(dòng)程序
Key=Input&0xff;//將數(shù)據(jù)傳給位變量
RELAY=1;
P2=0xff;//清除
if(K0&K0J)
M0=~M0;//實(shí)現(xiàn)脈沖輸入大家仔細(xì)體會(huì)
K0J=~K0;
if(M0){RELAY=0;P2=0x7f;}//實(shí)現(xiàn)脈沖輸入
if(K1){beep();P2=0xbf;}//K1為1時(shí)開啟蜂鳴器和2個(gè)燈
if(K2){beep();P2=0xdf;}
if(K3){beep();P2=0xef;}
if(K4){beep();P2=0xf7;}
if(K5){beep();P2=0xfb;}
if(K6){beep();P2=0xfd;}
if(K7){beep();P2=0xfe;}
}
}
評論
查看更多