www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 單片機 > 單片機
[導讀] Start(void);voidStop(void);u8CurrentRead(void);u8RandomRead(u8addr);voidByteWrite(u8addr,u8data);voidSendByte(u8data);voidI2c_Ack(void);voidI2c_NoAck(void);u8I2c_CheckAck(void);u8ReadByte

Start(void);
voidStop(void);
u8CurrentRead(void);
u8RandomRead(u8addr);
voidByteWrite(u8addr,u8data);
voidSendByte(u8data);

voidI2c_Ack(void);
voidI2c_NoAck(void);
u8I2c_CheckAck(void);
u8ReadByte(void);
voidCommandWrite(u8addr);
voidPageWrite(u8*data,u8cnt,u8BeginAddr);
voidSequentialRead(u8*data,u8cnt,u8BeginAddr);

#defineSDAR60
#defineSCLR61

u8array[2];




////////////////////////////////////////////////////////////
//readRoutine

u8ReadByte(void)
{
u8i;
u8data;

P6CR|=0x01;//changetoinput
for(i=0;i<8;i++)
{
data<<=1;
if(SDA)data++;
nop();
SCL=1;
nop();
nop();
SCL=0;
}
P6CR&=0Xfe;//changetooutput
returndata;
}

u8CurrentRead(void)
{
u8data;
u8ack;

Start();
SendByte(0xA1);//readcommand
ack=I2c_CheckAck();
data=ReadByte();
I2c_NoAck();
Stop();

returndata;
}

u8RandomRead(u8addr)
{
u8data;

CommandWrite(addr);
data=CurrentRead();
returndata;
}

voidSequentialRead(u8*data,u8cnt,u8BeginAddr)
{
u8i;
u8ack;

CommandWrite(BeginAddr);
Start();
SendByte(0xA1);//readcommand
ack=I2c_CheckAck();

for(i=0;i{
*data=ReadByte();
I2c_Ack();
}
I2c_NoAck();
Stop();

}

////////////////////////////////////////////////////////////
//sendBytedataviai2c

voidCommandWrite(u8addr)
{
u8ack;

Start();
SendByte(0xA0);
ack=I2c_CheckAck();
nop();
SendByte(addr);
ack=I2c_CheckAck();
nop();
}


voidByteWrite(u8addr,u8data)
{
u8ack;

CommandWrite(addr);
SendByte(data);
ack=I2c_CheckAck();
nop();
Stop();
}

voidPageWrite(u8*data,u8cnt,u8BeginAddr)
{
u8i;
u8ack;

CommandWrite(BeginAddr);
for(i=0;i{
SendByte((u8)*data);
ack=I2c_CheckAck();
}
Stop();
}

////////////////////////////////////////////////////////////
//send8bitdata

voidSendByte(u8data)
{
u8i;

for(i=0;i<8;i++)
{
if(data&0x80)
{
SDA=1;//sda=1
}else{
SDA=0;//sda=0
}
nop();
nop();
SCL=1;
nop();
nop();
SCL=0;
data<<=1;
}
}

////////////////////////////////////////////////////////////
//acknowLEDgeofi2c

voidI2c_Ack(void)
{
SDA=0;
nop();
SCL=1;
nop();
nop();
SCL=0;
}

voidI2c_NoAck(void)
{
SDA=1;
nop();
SCL=1;
nop();
nop();
SCL=0;
}

u8I2c_CheckAck(void)
{
u8rst;

rst=0;
SDA=1;
P6CR|=0x01;//SDAsettoinput
nop();
SCL=1;
if(!SDA)rst=1;//haveack
nop();
SCL=0;
P6CR&=0xfe;//SDAsettooutput
returnrst;
}
////////////////////////////////////////////////////////////
//startandstopofi2cbus

voidStart(void)
{
SDA=1;
SCL=1;
nop();
nop();
SDA=0;
nop();
nop();
SCL=0;
nop();
nop();
}

voidStop(void)
{
SDA=0;
nop();
nop();
SCL=1;
nop();
nop();
SDA=1;
nop();
nop();
}#include"EM78x156xx.h"
#include"HEAD156.H"


///////////////////////////////////////////////////
//functiondeclare

voidSysInit(void);
u8KeySCAN(void);
voidBeep(s8time);
voidScanBuz(void);
voidStopBeep(void);
voidScanIR(void);
u8CheckIR(void);

///////////////////////////////////////////////////
//GlobalVariable
u8volatileIntrCnt;
u8MainStatus;

enum{//mainstatus
PROTECT,
RELEASE,
RUNNING,
ALARM,
};

u8MsCnt;

#defineKEY_DOOR0X01
#defineKEY_ACC0X02
#defineKEY_BREAK0X04

u8SaveKey;
u8Cont;
u8Trg;

voidmain()
{
SysInit();
sei();

while(1)
{
wdtc();

if(IntrCnt==160)//20ms
{
IntrCnt=0;
MsCnt++;

ScanBuz();

ScanIR();

if(KeyScan())
{
if(Trg&KEY_DOOR)
{
Beep(1);
nop();
}
if(Trg&KEY_ACC)
{
Beep(1);
nop();
}
if(Trg&KEY_BREAK)
{
nop();
}
}

switch(MsCnt)
{
case50://1s
MsCnt=0;

break;
default:
break;
}
}
}
}


/**************************************************
BUZZERPROCESSROUTINE
p61
**************************************************/
#defineBUZPINR65
bitbBuzEn=0;
bitbBuzSW;
s8cntBuzTimes;
u8cntBuz;

voidScanBuz(void)
{
if(bBuzEn){

if(cntBuzTimes==-1){
BUZPIN=1;//ENDOFSOUND
return;
}

if(bBuzSW){
BUZPIN=1;
if(cntBuz--==0){
cntBuz=25;//RELOADDATA
bBuzSW=0;//CHANGESTATUS
}
}else{
BUZPIN=0;
if(cntBuz--==0){
cntBuz=25;
bBuzSW=1;
cntBuzTimes--;//1TIMES
}
}

if(cntBuzTimes==0){
bBuzEn=0;//ENDOFSOUND
}
}
}

voidBeep(s8time)//time=n*tICk
{
bBuzEn=1;
bBuzSW=1;
cntBuz=25;
cntBuzTimes=time;
}

voidStopBeep(void)
{
bBuzEn=0;
BUZPIN=0;
}

/**************************************************
KEYSCANROUTINE
P60door0:close1:open
P61ACC0:open1:close
P62Break0:open1:close

**************************************************/

u8KeyScan(void)
{
u8temp=0;

temp=PORT6;
temp&=0x07;
temp^=0x06;

if(temp!=SaveKey){
SaveKey=temp;
return0;
}else{
Trg=SaveKey&(SaveKey^Cont);//triggerentry
Cont=SaveKey;//continuousentry
return1;
}
}


/**************************************************
IRPROCESSROUTINE
**************************************************/
#defineir_port0x05
#defineir_pin2

#defineir_pass0
#defineir_lead1
#defineir_receive2
#defineir_syn3
#defineir_delay4


#defineir_dat_code6
#defineir_dat_bit24

u8ir_flag=0;
u8ir_reg_bit;
u8ir_reg_code;
u8ir_addr_hig;
u8ir_addr_low;
u8ir_user;

#defineCODE_LOCK0x41
#defineCODE_UNLOCK0x42
#defineCODE_SOUND0x44
#defineCODE_BACK0x49
#defineCODE_FIND0x48

voidScanIR(void)
{
if(CheckIR()==0)//ifcheckerror,return
{
return;
}

ir_flag=0;

switch(ir_user)
{
caseCODE_LOCK:
Beep(2);
break;
caseCODE_UNLOCK:
Beep(2);
break;
caseCODE_SOUND:
Beep(2);
break;
caseCODE_BACK:
Beep(2);
break;
caseCODE_FIND:
Beep(2);
break;
default:
break;
}
}

u8CheckIR(void)
{
u8temp;

temp=ir_flag^0xff;
temp&=0x01;

if(temp)//ifir_pass==0
{
ir_flag&=0xfe;//clearpassflag
return0;
}

if((ir_addr_hig==0xf6)&&(ir_addr_low==0x7c))
{
return1;//success
}else{
ir_flag=0;//clearpassflag
return0;//fail
}
}





//==================================
void_iNTCallinterrupt_l(void)@0x08:low_int0
{
_asm{
MOV 0x1f,a
swap0x1f
swapa0x03
MOV 0x1e,a
}
}
void_intcallinterrupt(void)@int0
{
///////////////////////////////////////
//intrruptcounterincrease
IntrCnt++;

///////////////////////////////////////
//RFreceive

_asm{

int_ir:
jbc%ir_flag,ir_pass
jmpint_ir_end

jbc%ir_flag,ir_receive
jmpcode_receive

jbc%ir_flag,ir_lead
jmpcode_lead

jbcir_port,ir_pin//ifdetectlowlevel
jmpint_ir_end
bs%ir_flag,ir_lead
clr%ir_reg_code
/***********************************************/
code_lead:
jbcir_port,ir_pin
jmpdetect_hig

detect_low:
jz%ir_reg_code
jmpint_ir_end
detect_error:
clr%ir_reg_code//timeoverflowerror
bc%ir_flag,ir_lead
jmpint_ir_end

detect_hig:
//calculatethelowpulsewidth
MOV a,@85
suba,%ir_reg_code//reg>85
jbs0x03,0
jmpdetect_error

MOV a,@87//reg<87
suba,%ir_reg_code
jbc0x03,0
jmpdetect_error

bs%ir_flag,ir_receive//leadhavereceived,begintoreadcode

bs%ir_flag,ir_delay
MOV a,@ir_dat_code
MOV %ir_reg_code,a
MOV a,@ir_dat_bit
MOV %ir_reg_bit,a

//jmpint_ir_end
/***********************************************/
code_receive:
jbs%ir_flag,ir_syn
jmpcode_r1
jbcir_port,ir_pin
jmpint_ir_end
bc%ir_flag,ir_syn

code_r1:
jbc%ir_flag,ir_delay
jmpcode_r2

jbsir_port,ir_pin//highlevelbegin
jmpint_ir_end
bs%ir_flag,ir_delay
code_r2:
djz%ir_reg_code
jmpint_ir_end

bc%ir_flag,ir_delay
jbcir_port,ir_pin
jmpcode_one
code_zero:
bc0x03,0
jmpram_shift
code_one:
bs%ir_flag,ir_syn
bs0x03,0
ram_shift:
rlc%ir_user
rlc%ir_addr_low
rlc%ir_addr_hig
code_end:
MOV a,@ir_dat_code
MOV %ir_reg_code,a
djz%ir_reg_bit
jmpint_ir_end
bs%ir_flag,ir_pass;接收成功標志
int_ir_end:
nop

}//endofasmcode

///////////////////////////////////////
//clearinterruptflag
TCIF=0;
_asm{
swapa0x1e
MOV 0x03,a
swapa0x1f
}
}

voidSysInit(void)
{
cli();

/*---------------------------------------------------------------------------
CONT_SETUP
argument:TCC_1_1~TCC_1_256prescal
TCC_SRC_INT/TCC_SRC_EXTsourceselection
TCC_EDGE_RISE/TCC_EDGE_FALLtrigeedgeselection
TCC_PRESCAL/WDT_PRESCALTCCORWDTUSEPRESCAL
---------------------------------------------------------------------------*/
_asm
{
MOV a,@(WDT_PRESCAL|WDT_1_32|TCC_SRC_INT)//16.34msintrupttime
contw
}

/*
IOWMACROARG1,ARG2
IORREG1,REG2IORREG2->REG1
IOWREG1,REG2IOWREG2->REG1
*/

P5CR=0X04;//port5I/O
P6CR=0X07;//port6I/O
PDCR=0XFF;//PULLDOWN0:ENABLE,1:DISABLE
ODCR=0X00;//OPENDRAIN0:DISABLE,1:ENABLE
PHCR=0XF8;//PULLHIGH0:ENABLE,1:DISABLE

PORT5=0x0c;
PORT6=0x08;

/*---------------------------------------------------------------------------
WDT_SETUP
argument:WDT_ENABLE/WDT_DISABLEenableconrtol
ROC_ENABLE/ROC_DISABLEROPTION
EIS_IO/EIS_INTP60ACTASIOORINTPIN
---------------------------------------------------------------------------*/

WDTCR=WDT_ENABLE|ROC_DISABLE|EIS_IO;

/*---------------------------------------------------------------------------
IMR1_SETUP
argument:IMR_TCC/IMR_EXT
---------------------------------------------------------------------------*/

IMR=IMR_TCC;

}

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅(qū)動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅(qū)動性能的關鍵。

關鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質(zhì)量和效率直接關系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅(qū)動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關鍵字: LED 驅(qū)動電源 開關電源

LED驅(qū)動電源是把電源供應轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅(qū)動電源
關閉