|
楼主 |
发表于 2009-11-4 20:52:57
|
显示全部楼层
//2防区报警+门禁//#include"stdio.h"#include"reg51.h"
) m) G& `9 ^6 t1 L+ J/ W. d0 V; U% S7 y; H+ e# l
#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; //门磁开关
/ A' s2 M" Y5 G1 L
) V( v' H! T/ o4 gunsigned 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 Z$ J t) P: l. x
6 }" v3 k0 w$ b% q1 E//***********************以下为IIC读写程序**********************/***************************************************************************** 函数原型: void function delay(void);* 功 能: 本函数实际上只有一条返回指令, 在具体应用中可视具体要求增加延时 * 指令。****************************************************************************/void function delay( void ) {;}4 T; P- _6 h. k( X$ t: n
* [, e8 P" W2 h9 \
/***************************************************************************** 函数原型: void function I_start(void);* 功 能: 提供I2C总线工作时序中的起始位。 ****************************************************************************/void function I_start( void ) {SCL = HIGH ;delay() ;SDA = LOW ;delay() ;SCL = LOW ;delay() ;} ~ ?/ ^& X! [ E
% p; B; }4 ]; v/ j/***************************************************************************** 函数原型: void function I_stop(void);* 功 能: 提供I2C总线工作时序中的停止位。****************************************************************************/void function I_stop( void ) {SDA = LOW ;delay() ;SCL = HIGH ;delay() ;SDA = HIGH ;delay() ;SCL = LOW ;delay() ;}
! c, `2 b6 v5 w* [; {8 O3 {7 v( }1 d- G1 b1 V
/***************************************************************************** 函数原型: void function I_init(void);* 功 能: I2C总线初始化。在main()函数中应首先调用本函数, 然后再调用* 其它函数。 ****************************************************************************/void function I_init( void ) {SCL = LOW ;I_stop() ;}8 M) Y- m3 X, S# U1 n* @# j4 n6 }5 k1 J
/ y6 f0 `* ^, z+ G& n( ~2 X$ S
/***************************************************************************** 函数原型: bit function I_clock(void);* 功 能: 提供I2C总线的时钟信号, 并返回在时钟电平为高期间SDA 信号线上状* 态。本函数可用于数据发送, 也可用于数据接收。 ****************************************************************************/bit function I_clock( void ) {bit sample ;SCL = HIGH ;delay() ;sample = SDA ;SCL = LOW ;delay() ;return ( sample ) ;}
- L6 l( {, f1 k$ T! R' D) J7 g u, s9 e& \
/***************************************************************************** 函数原型: 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() ) ; }. W& N+ S1 u7 H/ K Z8 C
! V G9 b0 X' Q, G/***************************************************************************** 函数原型: 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 ) ;}
Z9 I; A: j5 P2 B b/ i" B& j8 [- r3 |) ~$ O, j! n/ r4 E* w
/***************************************************************************** 函数原型: void function I_Ack(void);* 功 能: 向I2C总线发送一个应答信号ACK, 一般用于连续数据读取时。*****************************************************************************/void function I_Ack( void ) {SDA = LOW ;I_clock() ;SDA = HIGH ;}/* =========================================================================* * 上面给出的是I2C总线基本操作函数, 下面给出的是几个对I2C总线接口器件* 24C04操作的函数。* =========================================================================*/
9 h. y: n9 ^, Q, ~+ N/ q3 f, |
" P8 i) @0 T2 i' B |
|