久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
兆訊1608 RFID芯片N12_SDK_STC_V1.8.0 RC523單片機(jī)源碼下載
[打印本頁]
作者:
yuanlai2731
時(shí)間:
2018-2-9 20:22
標(biāo)題:
兆訊1608 RFID芯片N12_SDK_STC_V1.8.0 RC523單片機(jī)源碼下載
非接芯片驅(qū)動(dòng)程序
N12_SDK_STC_V1.8.0-MH523
0.png
(46.23 KB, 下載次數(shù): 35)
下載附件
2018-2-9 23:00 上傳
單片機(jī)源程序如下:
/**
****************************************************************
* @file main.c
*
* @brief main entry of test.
*
* @author
*
*
****************************************************************
*/
/*
* INCLUDE FILES
****************************************************************
*/
#include "define.h"
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include "stc_new_8051.h"
#include "spi.h"
#include "uart.h"
#include "timer.h"
#include "mh523.h"
#include "rfid.h"
#include "iso14443_4.h"
#include "iso14443a.h"
#define COM_BUF_SIZE 50
#define HEAD 0x68
typedef struct r_w_reg_s
{
u8 addr;//讀寫的寄存器地址
u8 rw_dat;//讀寫的寄存器值
}r_w_reg;
typedef struct pc_tx_pkt_s
{
u8 head;//包頭
u8 len; //包長:從包頭到校驗(yàn)和
u8 cmd; //包命令
union datu
{
r_w_reg reg;
u8 dat[1];//發(fā)送或接收的數(shù)據(jù)
}datu;
}pc_tx_pkt;
typedef struct lpcd_config_s
{
u8 delta;
u32 t_inactivity_ms;
u8 skip_times;
u8 t_detect_us;
}lpcd_config_t;
lpcd_config_t XDATA g_lpcd_config;
static u8 XDATA com_tx_buf[ COM_BUF_SIZE ];//pc to stc
static u16 tx_buf_index = 0;
static U8 xdata Snr_RC500[4];
#if (POWERON_POLLING)
bit g_query_mode = 1; //手動(dòng)操作芯片模式
bit g_typa_poll = TRUE;
bit g_typb_poll = TRUE;
bit g_need_reconfig = TRUE;//需要重新初始化PCD的協(xié)議類型
#else
bit g_query_mode = 0; //手動(dòng)操作芯片模式
bit g_typa_poll = FALSE;
bit g_typb_poll = FALSE;
bit g_need_reconfig = FALSE;//需要重新初始化PCD的協(xié)議類型
#endif
u32 XDATA g_polling_cnt = 0;
bit g_lpcd_started = FALSE; //LPCD周期自動(dòng)探測(cè)卡功能是否開啟
bit g_lpcd_config_test_start = FALSE;//LPCD周期自動(dòng)探測(cè)卡功能是否開啟
pc_tx_pkt XDATA *recv_packet(void);
char prase_packet(pc_tx_pkt XDATA *ppkt);
void discard_pc_pkt(pc_tx_pkt XDATA *ppkt);
u8 check_sum(u8 XDATA *buf, int len)
{
u8 sum = 0;
while (len--)
sum += *buf++;
return sum;
}
void make_packet(u8 cmd, u8 *buf, u8 len)
{
u8 sum = 0;
sum += HEAD;
sendc(HEAD);
sum += len + 4;
sendc(len + 4);
sum += cmd;
sendc(cmd);
while (len--)
{
sendc(*buf);
sum += *buf++;
}
sendc(sum);
}
pc_tx_pkt XDATA * recv_packet(void)
{
pc_tx_pkt *XDATA ppkt;
while(get_bytes() && tx_buf_index < COM_BUF_SIZE )
{
com_tx_buf[tx_buf_index] = _getkey() ;
tx_buf_index++;
}
if ( tx_buf_index >= 4 )
{
u8 i;
u8 rest = 4;
for (i=0; i<tx_buf_index-3; )//
{
ppkt = (pc_tx_pkt *)(com_tx_buf + i);
if (ppkt->head == 0x68 && ppkt->len > 0
&& ppkt->len + i < COM_BUF_SIZE)//判斷是不是能接受完包
{
if (ppkt->len + i <= tx_buf_index)//判斷該包有沒有接受完包?
{
u8 sum = check_sum((u8 XDATA *)ppkt, ppkt->len - 1);
if (sum == ppkt->datu.dat[ppkt->len - 4] )
{
return ppkt;
}
else
{
i++;
}
}
else
{
rest = tx_buf_index - i;
break;
}
}
else
{
i++;
}
}
memmove(com_tx_buf, com_tx_buf + tx_buf_index - rest, rest);
tx_buf_index = rest;
}
return NULL;
}
char prase_packet(pc_tx_pkt XDATA *ppkt)
{
switch(ppkt->cmd)
{
case COM_PKT_CMD_READ_REG: //要求把地址和值都返回給pc
{
r_w_reg XDATA reg;
reg.addr = ppkt->datu.reg.addr;
reg.rw_dat = read_reg(ppkt->datu.reg.addr);
make_packet(COM_PKT_CMD_READ_REG, (u8 *)®, sizeof(reg));
break;
}
case COM_PKT_CMD_WRITE_REG:
{
write_reg(ppkt->datu.reg.addr, ppkt->datu.reg.rw_dat);
break;
}
case COM_PKT_CMD_QUERY_MODE:
{
if (ppkt->datu.dat[0] == 1)
{
g_query_mode = TRUE;
if (ppkt->datu.dat[1] == 1)
{//typeA poll
pcd_config('A');
g_typa_poll = TRUE;
}
else
{
g_typa_poll = FALSE;
}
if (ppkt->datu.dat[2] == 1)
{//typeB poll
pcd_config('B');
g_typb_poll = TRUE;
}
else
{
g_typb_poll = FALSE;
}
if (g_typa_poll && g_typb_poll)
{
g_need_reconfig = TRUE;
}
else
{
g_need_reconfig = FALSE;
}
g_polling_cnt = *((u32*)&ppkt->datu.dat[3]);
printf("g_polling_cnt=%lu\n", g_polling_cnt);
}
else
{
g_query_mode = FALSE;
}
break;
}
case COM_PKT_CMD_CHIP_RESET:
{
pcd_reset();
mdelay(7);//carrier off 7ms
pcd_antenna_on();
break;
}
case COM_PKT_CMD_HALT:
{
pcd_hlta();
printf("HltA\n");
break;
}
case COM_PKT_CMD_LPCD:
{
g_lpcd_started = TRUE;
pcd_lpcd_start();
break;
}
case COM_PKT_CMD_LPCD_CONFIG_TEST:
{
int XDATA z;
memcpy(&g_lpcd_config, &ppkt->datu.dat[0], sizeof(g_lpcd_config));
for (z = 0; z < sizeof(g_lpcd_config);z++)
{
printf(" %02x", ppkt->datu.dat[z]);
}
pcd_lpcd_config_start(g_lpcd_config.delta, g_lpcd_config.t_inactivity_ms, g_lpcd_config.skip_times, g_lpcd_config.t_detect_us);
printf("config=%bd,%lu,%bd,%bd\n",g_lpcd_config.delta, g_lpcd_config.t_inactivity_ms, g_lpcd_config.skip_times, g_lpcd_config.t_detect_us);
g_lpcd_config_test_start = TRUE;
break;
}
case COM_PKT_CMD_LPCD_CONFIG_TEST_STOP:
{
pcd_lpcd_end();
g_lpcd_config_test_start = FALSE;
break;
}
default:
return FALSE;
//break;
}
return TRUE;
}
void discard_pc_pkt(pc_tx_pkt XDATA *ppkt)
{
int bytes;
u8 XDATA *p = ((u8 XDATA *)ppkt) + ppkt->len;
bytes = (p - com_tx_buf);
if (bytes <= tx_buf_index)
{
memmove(com_tx_buf, com_tx_buf + bytes, tx_buf_index - bytes);
tx_buf_index -= bytes;
}
else
{
tx_buf_index = 0;
}
}
void main()
{
pc_tx_pkt XDATA *ppkt;
tick XDATA g_statistic_last_t = 0;
u8 XDATA status;
//復(fù)位鍵下載功能支持代碼
if((PCON&0x10)==0) //如果POF位=0
{
PCON=PCON|0x10; //將POF位置1
IAP_CONTR=0x60; //軟復(fù)位,從ISP監(jiān)控區(qū)啟動(dòng)
}
else
{
PCON=PCON&0xef; //將POF位清零
}
led_success_on();
led_fail_on();
init_uart();
init_timer0();
EA = 1;
init_spi();
EA = 1;
printf("NFC_SDK_STC_V%s start...\n", VERSION);
pcd_init();//初始化pcd寄存器
rfid_init();//初始化rfid本地變量
while(1)
{
ppkt = recv_packet();
if (ppkt)
{
//檢查是否是調(diào)試命令包
if (FALSE == prase_packet(ppkt))
{
//RFID命令包
rfid_operation(&ppkt->cmd);
}
discard_pc_pkt(ppkt);
}
//自動(dòng)輪詢尋卡模式
if (g_query_mode && (g_typa_poll || g_typb_poll))
{
u8 cmd[2];
u8 status_a = 1, status_b = 1;
pcd_antenna_off();
mdelay(10);
pcd_antenna_on();
mdelay(10);
if (g_typa_poll == TRUE)
{
if (g_typa_poll & g_typb_poll)
{
pcd_config('A');
}
cmd[1] = 0x52;
//pcd_default_info();
status_a = com_reqa(&cmd);//詢所有A卡
}
if (g_typb_poll == TRUE)
{
if (g_typa_poll & g_typb_poll)
{
pcd_config('B');
}
cmd[1] = 0x08;
status_b = com_reqb(&cmd);//詢所有B卡
}
//點(diǎn)亮對(duì)應(yīng)燈
if (status_a == MI_OK || status_b == MI_OK)
{
led_success_on();//成功
}
else
{
led_fail_on();//失敗
}
}
//cos指令輪詢操作
if (g_cos_loop == TRUE)
{
if (g_cos_loop_times > 0)
{
com_exchange(g_loop_buf);
g_cos_loop_times--;
mdelay(20);
}
else
{
mdelay(200);
g_cos_loop = FALSE;
g_statistic_refreshed = TRUE;
statistic_print();
make_packet(COM_PKT_CMD_TEST_STOP, NULL, NULL);
}
}
//自動(dòng)卡檢測(cè)
if (g_lpcd_started == TRUE)
{
if (TRUE == pcd_lpcd_check())
{
g_lpcd_started = FALSE;
make_packet(COM_PKT_CMD_LPCD, NULL, NULL);
}
}
//自動(dòng)卡檢測(cè)參數(shù)測(cè)試
if (g_lpcd_config_test_start == TRUE)
{
if (TRUE == pcd_lpcd_check())
{
u8 XDATA tag_type[2];
g_statistics.lpcd_cnt++;
g_statistic_refreshed = TRUE;
statistic_print();
//驗(yàn)證是否有卡入場(chǎng)
pcd_config('A');
status = pcd_request(0x52, tag_type);
//剛檢測(cè)到卡時(shí)可能處于距離邊緣,有可能第一次尋卡失敗,所以增加第二次尋卡驗(yàn)證
if (status != MI_OK)
{
status = pcd_request(0x52, tag_type);
}
///剛檢測(cè)到卡時(shí)可能處于距離邊緣,如果前兩次尋卡失敗,則第三次尋卡驗(yàn)證
if (status != MI_OK)
{
status = pcd_request(0x52, tag_type);
}
if (status == MI_OK)
{//有卡片入場(chǎng)
//可添加具體的應(yīng)用功能代碼
/*
*/
//等待卡離場(chǎng),應(yīng)用代碼中可不必等待離場(chǎng)
while(1)
{
pcd_antenna_off();
mdelay(10);
pcd_antenna_on();
mdelay(10);
status = pcd_request(0x52, tag_type);
if(status != MI_OK)
{//一次驗(yàn)證卡離場(chǎng)
mdelay(100);
status = pcd_request(0x52, tag_type);
if(status != MI_OK)
{//二次驗(yàn)證卡離場(chǎng)
mdelay(100);
status = pcd_request(0x52, tag_type);
if(status != MI_OK)
{//三次驗(yàn)證卡離場(chǎng)
mdelay(100);
pcd_lpcd_config_start(g_lpcd_config.delta, g_lpcd_config.t_inactivity_ms, g_lpcd_config.skip_times, g_lpcd_config.t_detect_us);
break;
}
}
}
}
}
else
{
g_statistics.lpcd_fail++;
g_statistic_refreshed = TRUE;
pcd_lpcd_config_start(g_lpcd_config.delta, g_lpcd_config.t_inactivity_ms, g_lpcd_config.skip_times, g_lpcd_config.t_detect_us);
}
}
}
//輸出統(tǒng)計(jì)信息
if (is_timeout(g_statistic_last_t, 100))
{
g_statistic_last_t = get_tick();
statistic_print();
}
}
}
復(fù)制代碼
所有資料51hei提供下載:
N12_SDK_STC_V1.8.0-MH523.zip
(191.79 KB, 下載次數(shù): 37)
2018-2-9 20:22 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
洪志軍10
時(shí)間:
2018-9-15 09:04
樓主有沒有這資料對(duì)應(yīng)實(shí)物的淘寶鏈接,求分享
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
欧美精品一区三区
|
色婷婷av99xx
|
99久久婷婷国产亚洲终合精品
|
成人精品一区二区
|
精品视频一区二区三区在线观看
|
欧美一级做a爰片免费视频 国产美女特级嫩嫩嫩bbb片
|
久操亚洲
|
午夜视频在线观看网址
|
欧美亚洲国产一区二区三区
|
欧美日韩电影一区二区
|
华丽的挑战在线观看
|
精品国产乱码久久久久久闺蜜
|
在线免费观看黄色网址
|
国产乱码精品一区二区三区中文
|
国产一级在线视频
|
久久久美女
|
亚洲激情在线观看
|
亚洲成人免费在线
|
午夜视频在线观看一区二区
|
在线一级片
|
中文无码日韩欧
|
伊人激情网
|
欧美电影在线
|
亚洲第一色站
|
精精国产xxxx视频在线
|
青青久在线视频
|
国产成人免费视频网站高清观看视频
|
久久久久久成人
|
超碰520
|
亚洲乱码一区二区三区在线观看
|
久久久久久综合
|
91美女在线
|
日韩av电影院
|
久久久久久久97
|
在线观看精品
|
国产三区在线观看视频
|
射欧美
|
99精品网
|
超碰地址
|
免费久久网站
|
国产激情综合五月久久
|