#include<reg52.h> #include "intrins.h" #define uchar unsigned char #define uint unsigned int sbit SHLD=P1^7; //1腳SH/LD移位控制/置入控制(低電平有效) sbit CLK=P1^6; //2腳CLK,CLK INH時鐘輸入端(上升沿有效) sbit QH=P1^5; //9腳QH輸出端 uint data1=0, data2=0; data3=0; void XD_74hc165_Readdata(void) { uchar i; //位移時使用 unsigned char readdata1, readdata2, readdata3;//獲取數(shù)據(jù)時使用 readdata1 = 0x00; //初始值 readdata2 = 0x00; readdata3 = 0x00;
SHLD=0; //將165外部端口數(shù)據(jù)裝入內(nèi)部寄存器 置入控制端口(低電平有效) _nop_(); SHLD=1; //抬高為移位準(zhǔn)備 移位控制(高電平有效) /****************讀取第一個74HC165***************************************************/ for(i=0;i<8;i++) //移動8位字節(jié) { readdata1<<=1; //每次左移一位 CLK=0; //時鐘低 _nop_(); readdata1|=QH; //先接收高位 CLK=1; //時鐘高,上升沿下一個數(shù)據(jù)移出 _nop_(); } /****************讀取第二個74HC165***************************************************/ for(i=0;i<8;i++) //移動8位字節(jié) { readdata2<<=1; //每次左移一位 CLK=0; //時鐘低 _nop_(); readdata2|=QH; //先接收高位 CLK=1; //時鐘高,上升沿下一個數(shù)據(jù)移出 _nop_(); } /****************讀取第三個74HC165***************************************************/ for(i=0;i<8;i++) //移動8位字節(jié) { readdata3<<=1; //每次左移一位 CLK=0; //時鐘低 _nop_(); readdata3|=QH; //先接收高位 CLK=1; //時鐘高,上升沿下一個數(shù)據(jù)移出 _nop_(); }
data1=readdata1; //返回接收字符 data2=readdata2; data3=readdata3; }
void main() { XD_74hc165_Readdata(); while(1) { P2=data1; //顯示 P3=data2; P0=data3; } }
|