|

楼主 |
发表于 2009-11-4 20:52:57
|
显示全部楼层
//2防区报警+门禁//#include"stdio.h"#include"reg51.h". K8 E9 h% v6 D5 N8 H5 s
: e+ F: z* X7 _! C) ^4 H6 u( u#define byte unsigned char#define HIGH 1#define LOW 0#define FALSE 0#define TRUE ~FALSE#define function#define end_if#define end_for#define WRITE 0xA0 /* 定义24C04的器件地址SLA和方向位W */#define READ 0xA1 /* 定义24C04的器件地址SLA和方向位R */#define Code_Size 16sbit Buz =P1^0; //响铃 sbit Num1=P1^4; //第一位sbit Num2=P1^2; //第二位sbit Num3=P1^3; //第三位sbit Num4=P1^1; //第四位sbit SDA =P1^7; //数据sbit SCL =P1^6; //时钟sbit PP =P1^5; //页选sbit Dog =P3^2; //狗sbit Rel =P3^3; //继电器sbit Zone1 =P3^4; //防区1sbit Zone2 =P3^5; //防区2sbit An =P3^6; //出门按钮sbit Mc =P3^7; //门磁开关* h, ]% |& m3 v z, _9 F) g
0 t$ l( x# V' v" N3 junsigned char code table[] = { 0x60,0xfc,0x52,0x58,0xcc,0x49,0x41,0x7c,0x40,0x48,0xbf,0x46}; //显示字符的编码(共阴数码管)unsigned char code ok_time[]={"Time ok"};unsigned char code ok_zon1[]={"Zone 1 code enter ok"};unsigned char code ok_zon2[]={"Zone 2 code enter ok"};unsigned char code ok_zon3[]={"Zone 3 code enter ok"};unsigned char code ok_pass[]={"Pass ok"};unsigned char code ok_fort[]={"Zone fortify ok"};unsigned char data zon_tmp_buf[Code_Size];unsigned char idata buffer[4];unsigned char idata timebuf[4];unsigned char idata cipbuf[6];unsigned char idata passbuf[6] = {132,132,132,132,132,132}; //初始密码byte chh,ptr,count0,scan,ch,buz_time,medkey,p,dis_count,Amount,hour,min,sec,a_count,an_count,count8,key_num,kkeeyy;bit zon1_ok,zon2_ok,zon3_ok,pass_ok,scre_ok,fort_ok,time_ok,fpass_rd,fSec,fk,fc,fr,fh,fcip,fan,fz1,fz2,fz3,ffz,fmod,fall,fortify,fortify2,re_count,fa_count,fsec2,fmc,modify;unsigned int count1,count2,count3,count4,count5,count6,time,count7;
V% c t# k" s# g& t0 N2 Q2 q1 o! t! U/ X% p4 }
//***********************以下为IIC读写程序**********************/***************************************************************************** 函数原型: void function delay(void);* 功 能: 本函数实际上只有一条返回指令, 在具体应用中可视具体要求增加延时 * 指令。****************************************************************************/void function delay( void ) {;}
& ~6 U+ i/ X* S3 k. u2 h5 a0 L2 `
' a- B4 W- l9 j4 y9 q3 b8 A/***************************************************************************** 函数原型: void function I_start(void);* 功 能: 提供I2C总线工作时序中的起始位。 ****************************************************************************/void function I_start( void ) {SCL = HIGH ;delay() ;SDA = LOW ;delay() ;SCL = LOW ;delay() ;}
1 h1 ?$ k3 X3 _" |9 w& ]( { l5 b4 p$ N! g8 d- M4 G$ ~" M
/***************************************************************************** 函数原型: void function I_stop(void);* 功 能: 提供I2C总线工作时序中的停止位。****************************************************************************/void function I_stop( void ) {SDA = LOW ;delay() ;SCL = HIGH ;delay() ;SDA = HIGH ;delay() ;SCL = LOW ;delay() ;}
2 N- {& c+ b/ w! K D) U- l/ E( L, i) @; z) T7 D
/***************************************************************************** 函数原型: void function I_init(void);* 功 能: I2C总线初始化。在main()函数中应首先调用本函数, 然后再调用* 其它函数。 ****************************************************************************/void function I_init( void ) {SCL = LOW ;I_stop() ;}' u. c J/ q' b( B# K( s2 }
$ U+ f) B& ]/ l* N/***************************************************************************** 函数原型: bit function I_clock(void);* 功 能: 提供I2C总线的时钟信号, 并返回在时钟电平为高期间SDA 信号线上状* 态。本函数可用于数据发送, 也可用于数据接收。 ****************************************************************************/bit function I_clock( void ) {bit sample ;SCL = HIGH ;delay() ;sample = SDA ;SCL = LOW ;delay() ;return ( sample ) ;}& ]% ]$ A4 b8 ^- V
) K6 B2 z+ n+ C
/***************************************************************************** 函数原型: bit function I_send(byte I_data);* 功 能: 向I2C总线发送8位数据, 并请求一个应答信号ACK。如果收到ACK应答* 则返回1(TRUE), 否则返回0(FALSE)。 ****************************************************************************/bit function I_send( byte I_data ) {register byte i ;/* 发送8位数据 */for ( i=0 ; i<8 ; i++ ) { SDA = (bit)( I_data & 0x80 ) ; I_data = I_data << 1 ; I_clock() ;end_for}/* 请求应答信号ACK */SDA = HIGH ;return ( ~I_clock() ) ; }+ P7 d! F5 F3 }
7 c" F- H$ [- L1 o" E/***************************************************************************** 函数原型: byte function I_receive(void);* 功 能: 从I2C总线上接收8位数据信号, 并将接收到8位数据作为一个字节* 返回, 不回送应答信号ACK。主函数在调用本函数之前应保证SDA信* 号线处于浮置状态, 即使8051的P1.7脚置1。 ****************************************************************************/byte function I_receive( void ) {byte I_data = 0 ;register byte i ;for ( i=0 ; i<8 ; i++ ) { I_data *= 2 ; if ( I_clock() ) I_data++ ; end_ifend_for }return ( I_data ) ;}
9 y- ]- R1 a& V0 r
$ L! o" z7 ?- ]! t- D; w/***************************************************************************** 函数原型: void function I_Ack(void);* 功 能: 向I2C总线发送一个应答信号ACK, 一般用于连续数据读取时。*****************************************************************************/void function I_Ack( void ) {SDA = LOW ;I_clock() ;SDA = HIGH ;}/* =========================================================================* * 上面给出的是I2C总线基本操作函数, 下面给出的是几个对I2C总线接口器件* 24C04操作的函数。* =========================================================================*/
( n7 u0 d. x- t4 c3 o! G6 o' p$ M: b- u7 R# p" [
|
|