久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2058|回復: 2
打印 上一主題 下一主題
收起左側

萌新求問關于基于51單片機門禁程序的問題,有幾個定義不太懂

[復制鏈接]
跳轉到指定樓層
樓主
ID:784145 發(fā)表于 2020-7-16 18:34 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式


圖上這幾個定義的有的不是很懂,有的能夠猜出來。還望大佬解答這幾個定義的是什么
完成程序如下

#include "reg52.h"
#include "main.h"
#include "mfrc522.h"   
#include <string.h>
#include "LCD1602.h"
#include "DS1302.h"
#include "STCEEPROM.h"

#define uchar unsigned char
#define uint  unsigned int

sbit Speak = P2^7;
sbit RED      = P3^3;
sbit GREEN = P3^4;
sbit Relay = P3^2;

sbit KEY1 = P1^3;
sbit KEY2 = P1^4;
sbit KEY3 = P1^5;
sbit KEY4 = P1^6;
sbit KEY5 = P1^7;

unsigned char idata RevBuffer[30];
unsigned char Card_Num;            
void iccardcode();
//系統(tǒng)初始化
void InitializeSystem()
{

     PcdReset();
     PcdAntennaOff();
     PcdAntennaOn();  
     M500PcdConfigISOType( 'A' );


}
unsigned char idata UID[4],Temp[4];
unsigned char Table[3];
unsigned char Num;
unsigned char Count,Countf,Count1,Count2,Count3,Count4,Count5,C_flag;
void Auto_Reader(void)
{
    if(PcdRequest(0x52,Temp)==0)
    {
      if(PcdAnticoll(UID)==0)
      {
                Speak=0;delay_10ms(20);Speak=1;

            Table[0]=UID[0]/100+0x30;
            Table[1]=UID[0]/10%10+0x30;
            Table[2]=UID[0]%10+0x30;
            LCD1602_Disp_ZF(0x80+0x40,"Num:            ",16);
            LCD1602_Disp_ZF(0x84+0x40,Table,3);
            Count =  UID[0];
            if((Count==Count1)||(Count==Count2)||(Count==Count3)||(Count==Count4)||(Count==Count5))
            {
                LCD1602_Disp_ZF(0x8a+0x40,"OK   ",5);
                GREEN = 0;Relay=0;delay_10ms(200);Relay=1;GREEN = 1;
                C_flag=1;
            }
            else
            {
                LCD1602_Disp_ZF(0x8a+0x40,"Error",5);
                RED = 0;delay_10ms(200);RED = 1;
                C_flag=2;
            }
            delay_10ms(200);
               LCD1602_Disp_ZF(0x80+0x40,"Please Swipecard",16);

        }
    }
}
uchar DS1302_Table[7]={0};    //讀取時間值
void Display_LCD2(uchar Dis_Hour,uchar Dis_Min,uchar Dis_Sec)
{
    uchar Dis_Table[8]="11:22:33";
   
    Dis_Table[0] = Dis_Hour/10+0x30;
    Dis_Table[1] = Dis_Hour%10+0x30;

    Dis_Table[3] = Dis_Min/10+0x30;
    Dis_Table[4] = Dis_Min%10+0x30;

    Dis_Table[6] = Dis_Sec/10+0x30;
    Dis_Table[7] = Dis_Sec%10+0x30;

    LCD1602_Disp_ZF(0x85,Dis_Table,8);        
}
/********************************************************************
* 名稱 : Run_DS1302(void)
* 功能 : 讀出DS1302中的數(shù)據(jù),并進行顯示
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void Run_DS1302(void)
{
    uchar sec, min, hour, day, month, week, year;

        v_W1302(0x8f, 0);
        sec = bcdtodec(uc_R1302(0x61));       //讀出DS1302中的秒
        v_W1302(0x8f, 0);
        min = bcdtodec(uc_R1302(0x73));       //讀出DS1302中的分
        v_W1302(0x8f, 0);
        hour = bcdtodec(uc_R1302(0x85));   //讀出DS1302中的小時
        v_W1302(0x8f, 0);
        day = bcdtodec(uc_R1302(0x87));       //讀出DS1302中的日
        v_W1302(0x8f, 0);
        month = bcdtodec(uc_R1302(0x89));  //讀出DS1302中的月
        v_W1302(0x8f, 0);
        week = bcdtodec(uc_R1302(0x8b));  //讀出DS1302中的星期
        v_W1302(0x8f, 0);
        year = bcdtodec(uc_R1302(0x8d));   //讀出DS1302中的年

       DS1302_Table[0]=year;
       DS1302_Table[1]=month;
       DS1302_Table[2]=day;
       DS1302_Table[3]=week;
       DS1302_Table[4]=hour;
       DS1302_Table[5]=min;
       DS1302_Table[6]=sec;

        Display_LCD2(DS1302_Table[4],DS1302_Table[5],DS1302_Table[6]);   
}
void main(void)
{     
    InitializeSystem();
    LCD1602_init();
    LCD1602_Disp_ZF(0x80,"Time:",5);
                             //0123456789abcdef
    LCD1602_Disp_ZF(0x80+0x40,"Please Swipecard",16);
    Countf=ISP_READ(0x2c00);        
    Count1=ISP_READ(0x2c01);
    Count2=ISP_READ(0x2c02);
    Count3=ISP_READ(0x2c04);
    Count4=ISP_READ(0x2c06);
    Count5=ISP_READ(0x2c08);
    while (1)
    {   
        ////////////////////////////////
        iccardcode();
        Auto_Reader();
        ////////////////////////////////
        Run_DS1302();
        if(!KEY1)
        {
            delay_10ms(50);
            if(!KEY1)
            {
            DS1302_Table[4]++;
            Write_DS1302Init(0,0,0,0,DS1302_Table[4],DS1302_Table[5],0);
            }   
        }   
        if(!KEY2)
        {
            delay_10ms(50);
            if(!KEY2)
            {
            DS1302_Table[4]--;
            Write_DS1302Init(0,0,0,0,DS1302_Table[4],DS1302_Table[5],0);
            }   
        }
        //////////////////////////////////
        if(!KEY3)
        {
            delay_10ms(50);
            if(!KEY3)
            {
            DS1302_Table[5]++;
            Write_DS1302Init(0,0,0,0,DS1302_Table[4],DS1302_Table[5],0);
            }   
        }   
        if(!KEY4)
        {
            delay_10ms(50);
            if(!KEY4)
            {
            DS1302_Table[5]--;
            Write_DS1302Init(0,0,0,0,DS1302_Table[4],DS1302_Table[5],0);
            }   
        }
        if(!KEY5)
        {
            delay_10ms(50);
            if(!KEY5)
            {
                if(C_flag==2)
                {
                                             //0123456789abcdef
                    LCD1602_Disp_ZF(0x80+0x40," Register Card! ",12);
                    Countf++;
                    if(Countf==6)Countf=1;
                    if(Countf==1) Count1 = Count;
                    if(Countf==2) Count2 = Count;
                    if(Countf==3) Count3 = Count;
                    if(Countf==4) Count4 = Count;
                    if(Countf==5) Count5 = Count;   
                    

                }
                if(C_flag==1)
                {
                                             //0123456789abcdef
                    LCD1602_Disp_ZF(0x80+0x40,"  Clean Card!   ",11);
                    if(Count==Count1)Count1=0;
                    if(Count==Count2)Count2=0;
                    if(Count==Count3)Count3=0;
                    if(Count==Count4)Count4=0;
                    if(Count==Count5)Count5=0;


                }
                Speak=0;delay_10ms(200);Speak=1;
                LCD1602_Disp_ZF(0x80+0x40,"Please Swipecard",10);
                ISP_ERASE(0x2c00);        //注意:字節(jié)編程時必須要先要擦除整個扇區(qū)
                ISP_PROGRAM(0x2c00, Countf);
                ISP_PROGRAM(0x2c01, Count1);
                ISP_PROGRAM(0x2c02, Count2);
                ISP_PROGRAM(0x2c03, Count3);
                ISP_PROGRAM(0x2c04, Count4);
                ISP_PROGRAM(0x2c05, Count5);
                C_flag =0;
                while(!KEY5);
            }   
        }
        //////////////////////
    }
}
void iccardcode()
{         
      unsigned char cmd;
    unsigned char status;

   
    cmd = RevBuffer[0];
    switch(cmd)
     {
        case 1:     // Halt the card     //終止卡的操作
            status= PcdHalt();;            
            RevBuffer[0]=1;
            RevBuffer[1]=status;
            break;            
        case 2:     // Request,Anticoll,Select,return CardType(2 bytes)+CardSerialNo(4 bytes)
                    // 尋卡,防沖突,選擇卡    返回卡類型(2 bytes)+ 卡系列號(4 bytes)
            status= PcdRequest(RevBuffer[1],&RevBuffer[2]);
            if(status!=0)
            {
                status= PcdRequest(RevBuffer[1],&RevBuffer[2]);
                if(status!=0)               
                {
                    RevBuffer[0]=1;   
                    RevBuffer[1]=status;
                    break;
                }
            }  
            RevBuffer[0]=3;   
            RevBuffer[1]=status;
            break;
            
        case 3:                         // 防沖突 讀卡的系列號 MLastSelectedSnr
            status = PcdAnticoll(&RevBuffer[1]);
            if(status!=0)
            {
                RevBuffer[0]=1;   
                RevBuffer[1]=status;
                break;
            }
            //memcpy(MLastSelectedSnr,&RevBuffer[2],4);
            RevBuffer[0]=5;
            RevBuffer[1]=status;
            break;   
        case 4:                            // 選擇卡 Select Card
            //status=PcdSelect(MLastSelectedSnr);
            if(status!=MI_OK)
            {
                RevBuffer[0]=2;   
                RevBuffer[1]=status;
                break;
            }
            RevBuffer[0]=3;
            RevBuffer[1]=status;            
            break;
        case 5:        // Key loading into the MF RC500's EEPROM
            //status = PcdAuthState(RevBuffer[1], RevBuffer[3], DefaultKey, MLastSelectedSnr);// 校驗卡密碼
            RevBuffer[0]=34;
            RevBuffer[1]=status;            
            break;                           
        case 6:
            RevBuffer[0]=1;
            RevBuffer[1]=status;            
            break;               
        case 7:     
            RevBuffer[0]=1;
            RevBuffer[1]=status;            
            break;
        case 8:     // Read the mifare card
                    // 讀卡
            status=PcdRead(RevBuffer[1],&RevBuffer[2]);
            if(status==0)
            {RevBuffer[0]=17;}
            else
            {RevBuffer[0]=1;}
            RevBuffer[1]=status;            
            break;
        case 9:     // Write the mifare card
                    // 寫卡  下載密碼
            status=PcdWrite(RevBuffer[1],&RevBuffer[2]);
            RevBuffer[0]=1;
            RevBuffer[1]=status;            
            break;
        case 10:
            PcdValue(RevBuffer[1],RevBuffer[7],&RevBuffer[3]);
            RevBuffer[0]=1;   
            RevBuffer[1]=status;
            break;
        case 12:    // 參數(shù)設置
            PcdBakValue(RevBuffer[1], RevBuffer[2]);
            RevBuffer[0]=1;    //contact
            RevBuffer[1]=0;
            break;        
    }
}



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:471889 發(fā)表于 2020-7-17 08:15 | 只看該作者
不要被別人取的名字迷惑,你想象成一般數(shù)組與變量就好了
回復

使用道具 舉報

板凳
ID:1013634 發(fā)表于 2022-3-28 16:32 | 只看該作者
只是定義而已,隨便什么名稱都一樣的
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品三级在线观看 | 人人干97 | 亚洲欧美激情精品一区二区 | 久久久久成人精品 | 韩国精品在线观看 | 97视频久久| 国产精品久久久久一区二区三区 | 色吧综合网 | 三级高清 | 国产91丝袜在线播放 | 午夜免费视频 | 伊人影院在线观看 | 国产一区二区三区四区三区四 | 成人精品一区二区三区中文字幕 | 98成人网| 美女黄色在线观看 | 一区二区免费看 | 亚洲瑟瑟 | 午夜精| 色永久| 亚洲成人国产 | 日韩免费高清视频 | 99久久婷婷国产综合精品电影 | 亚洲香蕉| 亚洲精品视频在线播放 | 男女羞羞视频在线看 | 偷拍第一页 | 日本亚洲一区 | 亚洲精品色 | www国产成人免费观看视频 | 久久久国产一区二区三区 | 欧美 日韩 中文 | 国产农村妇女毛片精品久久麻豆 | 澳门永久av免费网站 | 成人黄色在线观看 | 91精品一区二区三区久久久久 | 日本高清视频在线播放 | 国产精品成人在线播放 | a级黄色毛片免费播放视频 国产精品视频在线观看 | 欧美激情国产日韩精品一区18 | 天天影视色综合 |