|
楼主 |
发表于 2009-11-4 20:52:57
|
显示全部楼层
//2防区报警+门禁//#include"stdio.h"#include"reg51.h"
# m" j. f- o* v$ p" w' _
! W3 z' H% e; s- V( {' y#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; //门磁开关
( m- A/ c% x& K" d2 V6 t) @3 V# g6 c
unsigned 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;
5 `% ^4 c9 ]: M. I5 C- b
8 A" f& x5 h* X6 T2 X# c9 C! n. |//***********************以下为IIC读写程序**********************/***************************************************************************** 函数原型: void function delay(void);* 功 能: 本函数实际上只有一条返回指令, 在具体应用中可视具体要求增加延时 * 指令。****************************************************************************/void function delay( void ) {;}
+ U% p$ j% {: E9 \ n% J% g# [+ t: E! _0 e: ^2 e2 a
/***************************************************************************** 函数原型: void function I_start(void);* 功 能: 提供I2C总线工作时序中的起始位。 ****************************************************************************/void function I_start( void ) {SCL = HIGH ;delay() ;SDA = LOW ;delay() ;SCL = LOW ;delay() ;}
: K& o3 V, l2 d# {8 \2 w4 f( P1 @# ]" \$ r0 C
/***************************************************************************** 函数原型: void function I_stop(void);* 功 能: 提供I2C总线工作时序中的停止位。****************************************************************************/void function I_stop( void ) {SDA = LOW ;delay() ;SCL = HIGH ;delay() ;SDA = HIGH ;delay() ;SCL = LOW ;delay() ;}0 i" F* c5 a+ M. l; B" |, l( r
% p8 J1 a! j; L2 J
/***************************************************************************** 函数原型: void function I_init(void);* 功 能: I2C总线初始化。在main()函数中应首先调用本函数, 然后再调用* 其它函数。 ****************************************************************************/void function I_init( void ) {SCL = LOW ;I_stop() ;}
4 T1 z+ e% u3 G1 }" e; t' z% U% X4 M& C8 p1 @6 f+ m( o# Z
/***************************************************************************** 函数原型: bit function I_clock(void);* 功 能: 提供I2C总线的时钟信号, 并返回在时钟电平为高期间SDA 信号线上状* 态。本函数可用于数据发送, 也可用于数据接收。 ****************************************************************************/bit function I_clock( void ) {bit sample ;SCL = HIGH ;delay() ;sample = SDA ;SCL = LOW ;delay() ;return ( sample ) ;}
. [- I% P d9 x% w% F) s
- \8 K$ P8 i8 X3 _7 L7 C# o v/***************************************************************************** 函数原型: 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() ) ; }8 O% y) w% S7 A" w3 b( w
+ B6 H# F" @: }/***************************************************************************** 函数原型: 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 ) ;}6 C$ P% |& b. a) l* o
: `$ Z/ z1 h) D. ?0 G& H n! \
/***************************************************************************** 函数原型: void function I_Ack(void);* 功 能: 向I2C总线发送一个应答信号ACK, 一般用于连续数据读取时。*****************************************************************************/void function I_Ack( void ) {SDA = LOW ;I_clock() ;SDA = HIGH ;}/* =========================================================================* * 上面给出的是I2C总线基本操作函数, 下面给出的是几个对I2C总线接口器件* 24C04操作的函数。* =========================================================================*/8 w) e$ ]9 w, x/ R
; C0 S* {- q- s: P) x |
|