欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
請教單片機+74hc165程序的疑惑
[打印本頁]
作者:
wps10025
時間:
2021-5-10 14:57
標題:
請教單片機+74hc165程序的疑惑
其中這部分,請教大神釋疑:
indata|=IN_Dat;
意思是通過或運算把數據賦值給indata,請問IN_Dat的數據是在最低位嗎?
0000 0000 0000 0000|0000 0000 0000 0001 ,是這個意思嗎?
#include <reg52.H>
#include <intrins.h>
#define NOP() _nop_() /* 定義空指令 */
//SPI 接口
sbit CLK = P3^6; //串行時鐘
sbit IN_PL = P1^6; //把數據加載到鎖存器中
sbit IN_Dat = P1^7; //數據通過P1.7腳移進單片機內處理
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; //位定義
unsigned long ReHC74165(void); //函數聲名
void beep();
/********************************************************
* 主函數 *
* *
********************************************************/
main()
{
while(1)
{
unsigned long Input=ReHC74165();//調用165驅動程序
Key=Input&0xff; //將數據傳給位變量
RELAY = 1;
P2 = 0xff; //清除
//實現脈沖輸入 大家仔細體會
if(K0&K0J)M0=~M0;
K0J=~K0;
if(M0) {RELAY = 0; P2 = 0x7f; }//實現脈沖輸入
if(K1) {beep(); P2 = 0xbf; }//K1 為1時開啟蜂鳴器和2個燈
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; }
}
}
/**********************************************************
* *
* 蜂鳴器 (讓蜂鳴器發出動聽聲音) *
************************************************************/
void beep()
{
unsigned char i , j;
for (i=0;i<2;i++)
{
for (j = 0; j<255; j++) {_nop_();}
BEEP=!BEEP; //BEEP取反
}
BEEP=1; //關閉蜂鳴器
}
/*************************此部分為74HC165的驅動程序使用SPI總線連接*************************************/
/*********************************************************************************************************
** 函數名稱: 74HC165
** 功能描述:
** 管腳描述:請參考相關的芯片資料(學習光盤中以配)
*********************************************************************************************************/
unsigned long ReHC74165(void)
{
unsigned char i;
unsigned int indata;
IN_PL=0;
NOP(); //短暫延時 產生一定寬度的脈沖
IN_PL=1; //將外部信號全部讀入鎖存器中
NOP();
indata=0; //保存數據的變量清0
for(i=0; i<8; i++)
{
indata=indata<<1; //左移一位
CLK=0; //時鐘置0
NOP();
indata|=IN_Dat;
CLK=1; //時鐘置1
}
return indata; //將保存數據的變量取反后返回
}
復制代碼
作者:
wps10025
時間:
2021-5-10 17:14
頂一頂帖子,求各位老師指教
作者:
timerzero
時間:
2021-5-10 18:38
印象中好像是這樣的:
indata|=IN_Dat ------->indata=indata|IN_Dat
如果
indata=0000 0000 0000 0000 IN_DAT=0000 0000 0000 0001
那么結果應該是indat=0000 0000 0000 0001
作者:
timerzero
時間:
2021-5-10 18:39
一樣的小白,僅供參考
作者:
wps10025
時間:
2021-5-10 18:50
timerzero 發表于 2021-5-10 18:38
印象中好像是這樣的:
indata|=IN_Dat ------->indata=indata|IN_Dat
如果
關鍵是IN_Dat是單一位的芯片數據輸出腳,感覺和16位的數據有點不合,是不是還有不知道的規則,就是想問這一點。
也就是說:是不是遇到這樣的數據輸出單片機就自動把它放在最低位?
作者:
timerzero
時間:
2021-5-10 19:14
unsigned int indata
看來是8位數據,像串口那樣逐位接受? 我小白等一位大佬
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1