资源简介

此资源有详细的电路图和程序,报告,非常好,和大家分享一下。

资源截图

代码片段和文件信息


#include “reg52.h“
#include “intrins.h“         //调用头文件

#define WriteDeviceAddress  0xa0      // AT24C02的识别码是1010硬件的三个地址引脚接地为000最后一位为0时表示向存储器写入数据
#define ReadDviceAddress    0xa1      //最后一位为1时表示从存储器读出数据。0xa0=1010 000 0 0xa1=1010 000 1 .

sbit    BCD6 = P1^7;
sbit    BCD5 = P1^6;
sbit    BCD4 = P1^5;
sbit    BCD3 = P1^4;
sbit    BCD2 = P1^3;
sbit    BCD1 = P1^2;
sbit    SCL = P1^1;   //at24c02串行时钟信号
sbit    SDA = P1^0;   //at24c02串行数据信号
sbit    P20 = P2^0;
sbit    P21 = P2^1;
sbit    P22 = P2^2;
sbit    P23 = P2^3;
sbit    P24 = P2^4;
sbit    P25 = P2^5;
sbit    P26 = P2^6;
sbit    P27 = P2^7;
sbit    BEEP = P3^0;
sbit    UNLOCK = P3^1;
sbit    LOCK   = P3^2;
sbit    ADMINI  = P3^3;

typedef unsigned char uchar;

const uchar BCD[]={0xC00xF90xA40xB00x990x920x820xF80x800x900xBF};    //定义数字显示数组为常量
                    //0    1   2   3    4    5    6    7    8    9   -

uchar mode = 0;
uchar Password[6] = {123456};                          //存放从存储器中读取的原始密码
uchar Input[6] = {0x0A0x0A0x0A0x0A0x0A0x0A};           //存放从键盘输入的密码
                                            
void delay(unsigned int number)
{
    unsigned char temp;

    for(;number!=0;number--) 
    {
        for(temp=150;temp!=0;temp--) ;
    }
}

//起始条件存储器的通讯起始
void Start(void)       
{
    SDA=1;
    SCL=1;
    _nop_ ();    _nop_ ();    _nop_ ();  _nop_ ();
    SDA=0;
    _nop_ ();    _nop_ ();    _nop_ ();  _nop_ ();
}

//停止条件存储器的通讯停止
void Stop(void) 
{
    SDA=0;
    SCL=1;
    _nop_ ();    _nop_ ();    _nop_ ();  _nop_ ();
    SDA=1;
    _nop_ ();    _nop_ ();    _nop_ ();  _nop_ ();
}

//应答位
void Ack(void)  
{
    SDA = 0;
    _nop_ ();    _nop_ ();    _nop_ ();  _nop_ ();
    SCL = 1;
    _nop_ ();    _nop_ ();    _nop_ ();  _nop_ ();
    SCL = 0;
}

//反向应答位
void  NoAck(void)      
{
    SDA = 1;
    _nop_ ();    _nop_ ();    _nop_ ();  _nop_ ();
    SCL = 1;
    _nop_ ();    _nop_ ();    _nop_ ();  _nop_ ();
    SCL = 0;
}

//向存储器 发送数据子程序Data为要求发送的数据
void Write(uchar Data)
{         
    uchar BitCounter=8;         //位数控制
    uchar temp;                 //中间变量控制

    do
    {
        temp=Data;
        SCL=0;
        _nop_ ();    _nop_ ();    _nop_ ();  _nop_ ();

        if((temp&0x80)==0x80)   //如果最高位是1就发送1
            SDA=1;
        else
            SDA=0;              //如果最高位是0就发送0

        SCL=1;
        temp = Data<<1;         //RLC 逐位的发送数据
        Data = temp;       
        BitCounter--;           //没发完一位数据就减一
    }while(BitCounter);         //如果发送完8位后跳出循环

    SCL=0;               //释放总线
    delay(20);            
}

//读一个字节的数据并返回该字节值
uchar Read(void)
{
    uchar temp=0;
    uchar temp1=0;
    uchar BitCounter=8;   //定义从存储器读出的数据位数
    SDA=1;
    do{
        SCL=0;
        _nop_ ();    _nop_ ();    _nop_ ();  _nop_ ();
        SCL=1;
        _nop_ ();    _nop_ ();    _nop_ ();  _nop_ ();

        if(SDA)                

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

    ..A..H.       162  2009-08-17 09:51  门禁系统\~$51单片机的门禁系统设计.doc

     文件    1811456  2009-06-17 10:36  门禁系统\基于51单片机的门禁系统设计.doc

     文件      41984  2009-06-17 10:45  门禁系统\开题报告(高兴鹏).doc

     文件      20480  2009-06-15 15:31  门禁系统\门禁系统使用说明.doc

     文件      35328  2009-05-23 16:08  门禁系统\门禁系统元件.doc

     文件      15227  2009-08-17 10:32  门禁系统\门禁系统源程序.c

     文件     336658  2009-06-04 11:10  门禁系统\门禁系统电路.jpg

     文件      35840  2009-06-17 10:42  门禁系统\高兴鹏-任务书.doc

     目录          0  2009-08-17 10:44  门禁系统

----------- ---------  ---------- -----  ----

              2297135                    9


评论

共有 条评论