#include #define BYTE unsigned char #define WORD unsigned int sbit POWER=P1^0; //电源 sbit RST=P1^1; //复位 sbit CHECK=P3^3; //检卡 sbit VPP=P1^4; bit count=0; bit mark=0; void mDelay(BYTE j) { WORD i; for(;j>0;j--) { for(i=0;i<228;i--) //125 {;} } } /********************************************************** 初始化CPU及IO ***********************************************************/ void InitCPUIO(void) { //------------------------------------- P0=0xff; P1=0xff; P3=0xfe; P2=ReadyTwice; LE373=1; LE373=0; P2=0xff; //------------------------------------- IE=0x00; IP=0x00; // SP=0xd0; } /************************************** * 延时函数1mS(实测为1.18ms) ***************************************/ void Delayms(Word count) {Word j; while(count--!=0) for(j=0;j<46;j++); } /************************************** * 延时函数250uS ***************************************/ void Delay250uS(Word count) {Word j; while(count--!=0) for(j=0;j<12;j++); } /***************************************************************************** Function: Power_Up *****************************************************************************/ /************************************** *蜂鸣器函数: Beep() *入口参数: count 鸣叫次数 ***************************************/ void SBeep(Byte count) { Byte i; for(;count;count--) { for(i=0;i<50;i++) //255个脉冲 { P2=ReadyTwice; P_Beep=0; //拉低 LE373=1; LE373=0; P2=0xff; Delay250uS(2); P2=ReadyTwice; //拉高 LE373=1; LE373=0; P2=0xff; Delay250uS(2); } Delayms(100); //延时0.5S } } void Power_dUp(void) { RST=0; SCL=0; SDA=0; VPP=0; POWER=0; mDelay(20); } /***************************************************************************** Function: Power_off *****************************************************************************/ void Power_off(void) { SCL=0; SDA=0; RST=0; VPP=0; POWER=1; mDelay(10); } /***************************************************************************** Function: I2C_Start *****************************************************************************/ void I2C_Start(void) { SDA=1; SCL=1; if(SDA==0)CY=1; if(SCL==0)return; _nop_();_nop_(); SDA=0; _nop_();_nop_(); _nop_();_nop_(); SCL=0; CY=0; return; } /***************************************************************************** Function: I2C_Stop *****************************************************************************/ void I2C_Stop(void) { SDA=0; _nop_();_nop_(); SCL=1; _nop_();_nop_(); _nop_();_nop_(); SDA=1; } /***************************************************************************** Function: I2C_WtByt *****************************************************************************/ void I2C_WtByt(BYTE _data) { BYTE i; for(i=8;i!=0;i--) { _data<<=1; SDA=CY; _nop_(); SCL=1; _nop_();_nop_(); _nop_();_nop_(); SCL=0; //?? } SDA=1; _nop_();_nop_(); SCL=1; _nop_();_nop_(); _nop_();_nop_(); CY=SDA; SCL=0; } /***************************************************************************** Function: I2C_NoAck *****************************************************************************/ void I2C_NoAck(void) { SDA=1; _nop_();_nop_(); SCL=1; _nop_();_nop_(); _nop_();_nop_(); SCL=0; } /***************************************************************************** Function: I2C_Ack *****************************************************************************/ void I2C_Ack(void) { SDA=0; _nop_();_nop_(); SCL=1; _nop_();_nop_(); _nop_();_nop_(); SCL=0; } /***************************************************************************** Function: I2C_RdByt *****************************************************************************/ BYTE I2C_RdByt(void) { BYTE i,_data; SDA=1; for(i=8;i!=0;i--) { _nop_();_nop_(); SCL=1; _nop_();_nop_(); if(SDA) _data=_data|0x01; else _data=_data&0xfe; _data<<=1; SCL=0; } return(_data); } /***************************************************************************** Function: I2C_WtIC *****************************************************************************/ void I2C_WtIC(WORD Address,BYTE Data[],BYTE Num) { BYTE i; BYTE *PData; PData=Data; for(i=0;i