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

標題: 基于51單片機射頻RFID考勤數計數系統(tǒng)設計 [打印本頁]

作者: wangshidehao    時間: 2024-5-14 11:22
標題: 基于51單片機射頻RFID考勤數計數系統(tǒng)設計
51單片機射頻RFID考勤上課上班統(tǒng)計設計主要具有如下功能:
本設計由STC89C52單片機電路+RFID模塊電路+1602液晶顯示電路+按鍵電路+蜂鳴器報警電路+電源電路組成。
1、系統(tǒng)有3張,分別代表依次是張三、李四、王二。
2、任何一個人刷成功能,1602液晶響應顯示,未刷顯示空“ ”位置上空的,刷成功后相應位置顯示有人。
3、液晶第二行顯示刷的人數,即出勤總人數。
4、按下按鍵表示上課,如果簽到人數和總人數不符合,蜂鳴器
具體程序和圖見本帖附件
原理圖如下所示:

單片機源碼如下:
  1. #include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
  2. #include<stdio.h>
  3. #include <intrins.h>
  4. #include "delay.h"
  5. #include "rc522.h"
  6. #include "1602.h"

  7. sbit key = P1^1;  //接口定義
  8. sbit buzzer  = P1^0;  //接口定義

  9. /*********/
  10. unsigned char code zsID[4]={0x56,0xe9,0xe0,0x73};        //張三號
  11. unsigned char code lsID[4]={0x8a,0xa7,0xe3,0x73};        //李四號
  12. unsigned char code weID[4]={0xc9,0xad,0x84,0xc3};        //王二號
  13. /*********/

  14. unsigned char UID[5];        //號
  15. unsigned char Temp[4] ; //暫存數組  

  16. unsigned long time_20ms;   //定時計數
  17. char dis0[16];                //液晶顯示數組
  18. char dis1[16];
  19. unsigned char zsFlag =' ';//張三 是否到標志
  20. unsigned char lsFlag =' ';//李四 是否到標志
  21. unsigned char weFlag =' ';//王二 是否到標志
  22. unsigned char disFlag =0;        //顯示標志
  23. unsigned char manNum=0;                         //人數
  24. bit buzFlag = 0; //蜂鳴器報警標志
  25. void Init_Timer0(void);                 //函數聲明
  26. void UART_Init(void);
  27. void uartSendStr(unsigned char *s,unsigned char length);
  28. void uartSendByte(unsigned char dat);

  29. void main (void)
  30. {     
  31.         unsigned char disPlace=0;        //顯示位置
  32.         Init_Timer0();        //定時器0初始化
  33.         UART_Init();          //串口初始化

  34.         buzzer = 0; //報警         開
  35.         LCD_Init();           //初始化液晶
  36.         DelayMs(100);          //延時有助于穩(wěn)定
  37.         LCD_Clear();
  38.         buzzer = 0; //報警         關

  39.         PcdReset();//復位RC522
  40.         PcdAntennaOn();//開啟天線發(fā)射

  41.         sprintf(dis0,"ZS:%c LS:%c WE:%c ",zsFlag,lsFlag,weFlag);//打印數據        
  42.         LCD_Write_String(0,0,dis0);//顯示第二行

  43.         while (1)         //主循環(huán)
  44.         {

  45.                  if(PcdRequest(0x52,Temp)==MI_OK)  //檢測到號
  46.             {
  47.               if(PcdAnticoll(UID)==MI_OK) //讀取號成功
  48.               {
  49.                 uartSendByte(0x00);        //串口發(fā)送號
  50.                         uartSendStr(UID,4);
  51.                 uartSendByte(0x00);
  52.                         if((UID[0]==zsID[0])&&(UID[1]==zsID[1]))//張三 到
  53.                         {
  54.                                 if(zsFlag != 0xff)        //第一次刷到該
  55.                                 {                                                        
  56.                                         zsFlag =0xff;           //顯示 到
  57.                                         time_20ms = 8;buzzer = 0;          //蜂鳴器短暫鳴叫
  58.                                 }
  59.                         }
  60.                         else if((UID[0]==lsID[0])&&(UID[1]==lsID[1]))//李四 到
  61.                         {
  62.                                 if(lsFlag != 0xff)          //第一次刷到該
  63.                                 {
  64.                                         lsFlag =0xff;          //顯示 到
  65.                                         time_20ms = 8;buzzer = 0;         //蜂鳴器短暫鳴叫
  66.                                 }
  67.                         }
  68.                         else if((UID[0]==weID[0])&&(UID[1]==weID[1]))//李四 到
  69.                         {
  70.                                 if(weFlag != 0xff)         //第一次刷到該
  71.                                 {
  72.                                         weFlag =0xff;          //顯示 到
  73.                                         time_20ms = 8;buzzer = 0;        //蜂鳴器短暫鳴叫
  74.                                 }
  75.                         }
  76.               }
  77.             }
  78.                 if(disFlag  == 1)
  79.                 {
  80.                         sprintf(dis0,"ZS:%c LS:%c WE:%c ",zsFlag,lsFlag,weFlag);//打印數據        
  81.                         LCD_Write_String(0,0,dis0);//顯示第二行
  82.                         manNum=0;                        //清空總人數
  83.                         if(zsFlag==0xff)                //張三到 +1
  84.                         {manNum=manNum+1;}
  85.                         if(lsFlag==0xff)
  86.                         {manNum=manNum+1;}        //李四到 +1
  87.                         if(weFlag==0xff)
  88.                         {manNum=manNum+1;}        //王二到 +1        
  89.                         sprintf(dis1,"ZongRen:%d  ",(int)manNum);//打印數據        
  90.                         LCD_Write_String(0,1,dis1);//顯示第二行                                                               
  91.                         disFlag =0;               
  92.                 }

  93.                 if(key == 0) //按鍵按下
  94.                 {
  95.                         if(manNum != 3)          //人數不夠
  96.                         {
  97.                                 buzFlag = 1; //蜂鳴器報警標志
  98.                         }               
  99.                 }

  100.         }
  101. }


  102. void Init_Timer0(void)
  103. {
  104.         TMOD |= 0x01;          //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響                     
  105.         TH0=(65536-20000)/256;                  //重新賦值 20ms
  106.         TL0=(65536-20000)%256;
  107.         EA=1;            //總中斷打開
  108.         ET0=1;           //定時器中斷打開
  109.         TR0=1;           //定時器開關打開
  110. }

  111. void Timer0_isr(void) interrupt 1
  112. {
  113.         TH0=(65536-20000)/256;                  //重新賦值 20ms
  114.         TL0=(65536-20000)%256;        
  115.         time_20ms++;
  116.         if(time_20ms%10==0)           //定時顯示
  117.         {
  118.                 disFlag = 1 ;
  119.                 DelayMs(150);  
  120.                 if(buzFlag == 1) buzzer =!buzzer;//蜂鳴器報警
  121.                 else buzzer = 1;//不報警
  122.         }
  123. }

  124. void UART_Init(void)
  125. {
  126.     SCON  = 0x50;                        // SCON: 模式 1, 8-bit UART, 使能接收  
  127.     TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重裝
  128.     TH1   = 0xFD;               // TH1:  重裝值 9600 波特率 晶振 11.0592MHz
  129.         TL1 = TH1;  
  130.     TR1   = 1;                  // TR1:  timer 1 打開                        
  131.     EA    = 1;                  //打開總中斷
  132.     ES    = 1;                  //打開串口中斷
  133. }


  134. void uartSendByte(unsigned char dat)
  135. {
  136.         unsigned char time_out;
  137.         time_out=0x00;
  138.         SBUF = dat;                          //將數據放入SBUF中
  139.         while((!TI)&&(time_out<100))  //檢測是否發(fā)送出去
  140.         {time_out++;DelayUs2x(10);}        //未發(fā)送出去 進行短暫延時
  141.         TI = 0;                                                //清除ti標志
  142. }

  143. void uartSendStr(unsigned char *s,unsigned char length)
  144. {
  145.         unsigned char NUM;
  146.         NUM=0x00;
  147.         while(NUM<length)        //發(fā)送長度對比
  148.         {
  149.                 uartSendByte(*s);  //放松單字節(jié)數據
  150.                 s++;                  //指針++
  151.                 NUM++;                  //下一個++
  152.            }
  153. }

  154. void UART_SER (void) interrupt 4         //串行中斷服務程序
  155. {
  156.         if(RI)                        //判斷是接收中斷產生
  157.         {
  158.                 RI=0;                      //標志位清零
  159.         }
  160.         if(TI)  //如果是發(fā)送標志位,清零
  161.         TI=0;

復制代碼

原理圖: 無
仿真: 無
代碼: 開源-考勤.zip (296.13 KB, 下載次數: 11)





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲精品中文字幕av | 日韩视频福利 | 蜜桃精品视频在线 | 国产日韩免费视频 | 国产情侣啪啪 | 九色91视频 | 日本久草| 国产精品久久久久久久白浊 | 成人免费小视频 | 91在线 | 国产在线精品一区二区 | 欧美精品一区三区 | 日韩精品| 国产在线视频一区二区 | 日本欧美黄色片 | 91在线色视频 | 欧美一区二区 | 欧美日韩精品久久久免费观看 | 日韩一区二区在线播放 | 久久精品一区 | 亚洲国产精品一区二区三区 | 亚洲综合在线视频 | 免费一级片 | 国产农村妇女精品一二区 | 91精品国产91久久久久久三级 | 欧美成人猛片aaaaaaa | 日本不卡一区二区三区在线观看 | 国产98色在线 | 日韩 | 777zyz色资源站在线观看 | 欧美精品久久久 | 久久三区| 久久精品视频9 | 亚洲国产一区二区三区四区 | 黄色小视频入口 | 成年人在线视频 | 99精品电影| 欧区一欧区二欧区三免费 | 91免费观看国产 | 天天天操操操 | 久久久精品久 | 久久国产精品网站 |