************************** Copyright(C)CaKe *****************************************
========================================================================================
==============**文件名 : main.c ==============
==============**作者 : CaKen ==============
==============**版本號 : V1.0 ==============
==============**時(shí)間 : 2014.08.16 ==============
==============**功能描述 : 74HC165實(shí)驗(yàn)測試 ==============
========================================================================================
****************************************************************************************
#include <reg52.h>
#include <intrins.h>
//SPI 接口
sbit CLK = P3^6; //串行時(shí)鐘
sbit IN_PL = P1^6; //把數(shù)據(jù)加載到鎖存器中
sbit IN_Dat = P1^7; //數(shù)據(jù)通過P1.7腳移進(jìn)單片機(jī)內(nèi)處理
sbit RELAY = P1^4; //繼電器
sbit BEEP = P1^5; //蜂鳴器
unsigned char bdata Key;
sbit K0=Key^0; //位定義
sbit K1=Key^1; //位定義
sbit K2=Key^2; //位定義
sbit K3=Key^3; //位定義
sbit K4=Key^4; //位定義
sbit K5=Key^5; //位定義
sbit K6=Key^6; //位定義
sbit K7=Key^7; //位定義
bit M0 ,K0J; //位定義
*****************************************************************************************
函數(shù)名:
調(diào) 用:beep();
參 數(shù):
返回值:
結(jié) 果:
備 注:蜂鳴器 (讓蜂鳴器發(fā)出動(dòng)聽聲音)
*****************************************************************************************
void beep()
{
unsigned char i,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上升沿
****************************************************************************************
unsigned long HC165_Init(void)
{
unsigned char i;
unsigned int indata;
IN_PL=0; //上升沿
_nop_(); //短暫延時(shí) 產(chǎn)生一定寬度的脈沖
IN_PL=1; //將外部信號全部讀入鎖存器中
_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)
{
unsigned long Input=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ì)體會
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; }
}
}