久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
單片機+RC522模塊測試程序
[打印本頁]
作者:
ubun16.04
時間:
2020-8-12 13:30
標題:
單片機+RC522模塊測試程序
本帖最后由 ubun16.04 于 2020-8-12 19:45 編輯
主要參考這個網址:
http://www.zg4o1577.cn/bbs/dpj-93114-1.html
他的程序幫了很大的忙,在他尋卡的基礎上完成了注冊,判斷函數,并做出了一定的修改
為了方便演示,做了一個簡短的視頻方便示意,等過了審核發上來
視頻:
https://www.bilibili.com/video/BV14Z4y1M7Ja?from=search&seid=2775894499705602722
下面是主程序代碼,庫函數和上面網址的一樣
/*
測試成功
但是這里的串口中斷實在是不會調了
把串口中斷部分直接修改在函數中,即CALL_isr_UART();這一段被我隱藏了,串口中斷函數interrupt4直接刪除
可以實現卡片的尋卡,識別,注冊功能,注銷功能暫未設置
*/
#include<reg52.h>
#include<main.h>
#include<mfrc522.h>
//主要用于strcmp函數的操作
#include <stdio.h>
#include <string.h>
unsigned char UID[5],Temp[4]; //任意尋卡的卡號
unsigned char UID_set[5],Temp_set[4]; //注冊鎖定后的卡號
unsigned char i=0; //按鈕(注冊)計數
unsigned char j; //用于卡號和類型鎖定
unsigned char k=0; //按鈕(驗證)計數
unsigned char suc[]={"you succeed\r\n"};
unsigned char fail[]={"you lost\r\n"};
sbit key=P2^0; //注冊
sbit key_judge=P2^2; //驗證
sbit led=P3^4; //數卡錯誤響應燈
void feeb(){ //尋卡成功響應函數
ff=0;
delay_10ms(1);
ff=1;
delay_10ms(1);
}
void feeb_fail(){ //刷卡錯誤響應函數
led=0;
delay_10ms(1);
led=1;
delay_10ms(1);
}
//這個延時函數其實并不是特別重要,但是delay_10ms這個函數我看不懂,可能匯編???
void delay_10ms2(unsigned char x) //誤差 0us
{
unsigned char a,b,c;
for(c=x;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
/*
串口發送函數
*/
//向串口發送字符
void Putc_to_SerialPort(unsigned char c)
{
SBUF=c;
while(TI==0);
TI=0;
}
//向串口發送字符串
void Puts_to_SerialPort(unsigned char *s)
{
while(*s!='\0')
{
Putc_to_SerialPort(*s);
s++;
delay_10ms2(1);
}
}
//只處理一次卡片的讀取
void Auto_Reader(void){
//while(1)
{
if(PcdRequest(0x52,Temp)==MI_OK){ //尋卡,成功后Temp數組為卡類型
if(PcdAnticoll(UID)==MI_OK){ //防沖突,UID數組數據為卡序列號
//串口發送
//CALL_isr_UART(); //開串口中斷將UID數組前四個字節上傳到串口調試助手
Puts_to_SerialPort(UID);
feeb(); //調用蜂鳴器提示
i++; //開關計數+1自動歸零
}
}else ff = 0;//尋卡失敗
//鎖定卡號類型
for(j=0;j<3;j++){
Temp_set[j]=Temp[j];
}
//鎖定卡號
for(j=0;j<4;j++){
UID_set[j]=UID[j];
}
}
}
//判斷新卡和已經注冊過的卡是否一致,返回0或1
unsigned char judge(unsigned char *string1, unsigned char *string2){
if(strcmp(string1, string2) == 0)
return 0;
else return 1;
}
//卡片判斷函數,針對0或1進行判斷并輸出相應動作
void Auto_judge(void){
//while(1)
{
if(PcdRequest(0x52,Temp)==MI_OK&&!judge(Temp_set,Temp)){ //尋卡,成功后Temp數組為卡類型
if(PcdAnticoll(UID)==MI_OK&&!judge(UID_set,UID)){ //防沖突,UID數組數據為卡序列號
Puts_to_SerialPort("you succeed...\r\n"); //串口發送成功消息
Puts_to_SerialPort(UID);
//CALL_isr_UART(); //開串口中斷將UID數組前四個字節上傳到串口調試助手
feeb(); //調用蜂鳴器提示
k++; //開關計數+1自動歸零
}
}
else if(PcdRequest(0x52,Temp)==MI_OK&&judge(Temp_set,Temp))
{
Puts_to_SerialPort("type wrong...\r\n"); //串口發送失敗消息
feeb_fail();
k++; //開關計數+1自動歸零
}
else if(PcdAnticoll(UID)==MI_OK&&judge(UID_set,UID))
{
Puts_to_SerialPort("ID wrong...\r\n"); //串口發送失敗消息
feeb_fail();
k++; //開關計數+1自動歸零
}
else ff = 0;//尋卡失敗
}
}
//初始化
void InitializeSystem(){
PcdReset();
PcdAntennaOff();
PcdAntennaOn();
M500PcdConfigISOType( 'A' );
SCON=0X50; //設置為工作方式1
TMOD=0X21; //設置計數器工作方式2
PCON=0X00; //波特率加倍
TH1=0Xfd; //計數器初始值設置,注意波特率是4800的
TL1=0Xfd;
REN = 1;
ES=1; //打開接收中斷
EA=1; //打開總中斷
TR1=1;
ff = 1;
TI=0;
}
void main( ){
InitializeSystem( );
while(1)
{
if(key==0)
{
Puts_to_SerialPort("Receiving From 8051 key...\r\n");
i++;
feeb();
feeb();
}
if(key_judge==0)
{
Puts_to_SerialPort("Receiving From 8051 key_judge...\r\n");
k++;
feeb();
feeb();
}
//按下key尋卡注冊,如果沒有卡放上去,那么一直在內部循環,也可以設定時間,如果超時跳出循環
while(i%2==1){Auto_Reader();}
//按下key_judge進行判斷,如果沒有卡放上去,那么一直在內部循環,也可以設定時間,如果超時跳出循環
while(k%2==1){Auto_judge();}
}
}
復制代碼
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
欧美日韩亚洲视频
|
一级a爱片性色毛片免费
|
欧美99
|
免费在线黄
|
欧美在线
|
96久久久久久
|
国产日韩精品在线
|
日本中出视频
|
欧美日韩专区
|
欧美日韩亚洲国产
|
亚洲视频免费在线看
|
亚洲一区二区三区四区五区午夜
|
欧美一级免费
|
国产69久久精品成人看动漫
|
一区视频在线播放
|
久久精品国产久精国产
|
亚洲嫩草
|
亚洲成人精品久久
|
99精品欧美一区二区三区
|
超碰日本
|
欧美6一10sex性hd
|
一级片免费视频
|
xnxx 日本免费
|
成人在线免费网站
|
亚洲精品在线看
|
一区二区三区中文字幕
|
夜夜骑av
|
国产日韩亚洲欧美
|
懂色av一区二区三区在线播放
|
亚洲 中文 欧美 日韩 在线观看
|
欧美日韩国产一区二区三区
|
久久小视频
|
欧美性一级
|
九色在线视频
|
又爽又黄axxx片免费观看
|
色天堂影院
|
无码一区二区三区视频
|
黄色三级在线播放
|
国产女人叫床高潮大片免费
|
亚洲国产中文字幕
|
日韩成人在线一区
|