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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3864|回復: 16
打印 上一主題 下一主題
收起左側(cè)

求助大神,AS608指紋模塊與51單片機編程問題

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:742880 發(fā)表于 2020-5-2 16:43 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 立夏匆匆 于 2020-5-4 10:36 編輯

我的程序.zip (94 KB, 下載次數(shù): 18)



這個問題已經(jīng)折磨我快一周了,怎么查程序的問題都查不出來,增加指紋這個函數(shù)只要一運行,就只能顯示“請按指紋”這四個字,然后即便按指紋也不會運行下面的程序,確認碼也能返回,就是不往下運行。附程序:#include <reg52.h>
#include <intrins.h>

sbit TCH = P3^7;//按指紋識別
uchar data querenma=11;//用于緩存確認碼
uchar sum[2],sum1[2];//sum存放應答包的校驗和,sum1存放指令包的校驗和
int sum_ans,sum_ins;//定義整形變量用來存放2字節(jié)大小的校驗和
uint page_ID;//存放注冊函數(shù)中的頁碼

/**************************************************
函數(shù)名稱:端口初始化
單片機:晶振11.0592MHz 波特率為9600bps
指紋模塊:波特率為9600bps
***************************************************/
void UART_init()
{
        SCON = 0x50;//串行寄存器設(shè)為串行口工作方式1(01010000)
        PCON = 0x00;//一般默認為0
  TMOD = 0x20;//定時器1,工作方式2
        TH1 = 0xfd;//T1定時器裝初值(波特率9600bps)
        TL1 = 0xfd;//T1定時器裝初值
        TR1 = 1;//啟動定時器1
        EA = 1;//開總中斷
}
/**************************************************
函數(shù)作用:串口發(fā)送1幀數(shù)據(jù)
***************************************************/
void UART_sent_byte(uchar c)
{
  SBUF = c;//將要發(fā)送的數(shù)據(jù)放在SBUF中,單片機會自動發(fā)送
        while (!TI);//判斷一下TI有沒有置1,如果TI等于0,說明沒有
                    //發(fā)完,那么會一直等待。如果發(fā)送完了,那么TI
                    //等于1,1取反為0,那么會跳出這句話。
        TI = 0;//發(fā)送完了,要把發(fā)送標志位清零
}
/**************************************************
函數(shù)作用:串口接收1幀數(shù)據(jù)
和發(fā)送函數(shù)原理一樣,只是把發(fā)送標志位改為接收標志位。
***************************************************/
uchar UART_receive_byte()
{
        uchar dat;
        while (!RI);
        RI = 0;
        dat = SBUF;
  return (dat);
}
/**************************************************
函數(shù)作用:錄入指紋圖像
***************************************************/
void getimage()
{
        uchar i;
  UART_sent_byte(0xef);
        UART_sent_byte(0x01);//協(xié)議包頭為0xef01
        
        UART_sent_byte(0xff);
        UART_sent_byte(0xff);
        UART_sent_byte(0xff);
        UART_sent_byte(0xff);//芯片地址為0xffffffff
        
        UART_sent_byte(0x01);//包標識

        UART_sent_byte(0x00);
        UART_sent_byte(0x03);//包長度是2字節(jié)的03H
        
        UART_sent_byte(0x01);//錄入圖像指令碼
        
        UART_sent_byte(0x00);
        UART_sent_byte(0x05);//校驗和是2字節(jié)的05H
        
        for (i=0;i<9;i++)//接收應答包前9字節(jié)為包頭,芯片地址,包識別,包長度
        {
          while (!RI);
                RI = 0;
        }
        
        querenma = UART_receive_byte();
        sum[1] = UART_receive_byte();
        sum[0] = UART_receive_byte();
        sum_ans = (sum[1]<<8)+sum[0];//存放16位校驗和
        
}

/**************************************************
函數(shù)作用:生成指紋特征,并存入bufferID中
***************************************************/
void genchar(uchar bufferID)
{
  uchar i;
  UART_sent_byte(0xef);
        UART_sent_byte(0x01);//協(xié)議包頭為0xef01
        
        UART_sent_byte(0xff);
        UART_sent_byte(0xff);
        UART_sent_byte(0xff);
        UART_sent_byte(0xff);//芯片地址為0xffffffff
        
        UART_sent_byte(0x01);//包標識

        UART_sent_byte(0x00);
        UART_sent_byte(0x04);//包長度是2字節(jié)的04H
        
        UART_sent_byte(0x02);//生成特征指令碼
        
        UART_sent_byte(bufferID);//輸入特征緩沖區(qū)號
        
  sum_ins = 0x07+bufferID;
        sum1[0] = sum_ins;
        sum1[1] = sum_ins>>8;
        UART_sent_byte(sum1[1]);
        UART_sent_byte(sum1[0]);
        
        for (i=0;i<9;i++)//接收應答包前9字節(jié)為包頭,芯片地址,包識別,包長度
        {
          while (!RI);
                RI = 0;
        }
        
        querenma = UART_receive_byte();
        sum[1] = UART_receive_byte();
        sum[0] = UART_receive_byte();
        sum_ans = (sum[1]<<8)+sum[0];//存放16位校驗和
}
/**************************************************
函數(shù)作用:自動注冊模板。
采集一次指紋注冊模板,在指紋庫中搜索空位并存儲,返回
儲存ID。
***************************************************/
void enroll()
{
        uchar i,ID1,ID2;
  UART_sent_byte(0xef);
        UART_sent_byte(0x01);//協(xié)議包頭為0xef01
        
        UART_sent_byte(0xff);
        UART_sent_byte(0xff);
        UART_sent_byte(0xff);
        UART_sent_byte(0xff);//芯片地址為0xffffffff
        
        UART_sent_byte(0x01);//包標識

        UART_sent_byte(0x00);
        UART_sent_byte(0x03);//包長度是2字節(jié)的03H
        
        UART_sent_byte(0x10);//指令碼
        
        UART_sent_byte(0x00);
        UART_sent_byte(0x14);//校驗和
        
        for (i=0;i<9;i++)////接收應答包前9字節(jié)為包頭,芯片地址,包識別,包長度
        {
          while (!RI);
                RI = 0;
        }
        
        querenma = UART_receive_byte();
        
        ID1 = UART_receive_byte();
        ID2 = UART_receive_byte();//存放頁碼
        
        sum[1] = UART_receive_byte();
        sum[0] = UART_receive_byte();
        
        page_ID = (ID1<<8)+ID2;//存放16位頁碼
        sum_ans = (sum[1]<<8)+sum[0];//存放16位校驗和
}

/**************************************************
函數(shù)作用:高速搜索。
1.以charbuffer1或charbuffer2中的特征文件高速搜索整個或
部分指紋庫。若搜索到就返回頁碼。
2.該指令對于的確存在于指紋庫中,且登錄時質(zhì)量很好的指紋,
會很快給出搜索結(jié)果。
***************************************************/
void fastsearch(uchar BufferID)
{
  uchar i,ID1,ID2;
  UART_sent_byte(0xef);
        UART_sent_byte(0x01);//協(xié)議包頭為0xef01
        
        UART_sent_byte(0xff);
        UART_sent_byte(0xff);
        UART_sent_byte(0xff);
        UART_sent_byte(0xff);//芯片地址為0xffffffff
        
        UART_sent_byte(0x01);//包標識

        UART_sent_byte(0x00);
        UART_sent_byte(0x08);//包長度
        
        UART_sent_byte(0x1b);//指令碼
        
        UART_sent_byte(BufferID);//緩沖區(qū)號
        
        UART_sent_byte(0x00);
        UART_sent_byte(0x00);//起始頁碼
        
        UART_sent_byte(0x00);
        UART_sent_byte(0xb4);//頁碼數(shù)量180
        
        sum_ins = 9+0x1b+BufferID+0xb4;//校驗和
        sum1[0] = sum_ins;
        sum1[1] = sum_ins>>8;
        UART_sent_byte(sum[1]);
        UART_sent_byte(sum[0]);
        
        for (i=0;i<9;i++)////接收應答包前9字節(jié)為包頭,芯片地址,包識別,包長度
        {
          while (!RI);
                RI = 0;
        }
        
        querenma = UART_receive_byte();
        
        ID1 = UART_receive_byte();
        ID2 = UART_receive_byte();//存放頁碼
        
        while(!RI);
        RI = 0;
        while(!RI);
        RI = 0;         //2字節(jié)的得分
        
        sum[1] = UART_receive_byte();
        sum[0] = UART_receive_byte();
        
        page_ID = (ID1<<8)+ID2;//存放16位頁碼
        sum_ans = (sum[1]<<8)+sum[0];//存放16位校驗和
}



/**************************************************
增加指紋函數(shù)
***************************************************/

void addfinger()
{
        uchar IDa,IDb,IDc;//存儲返回的指紋序號
  PutStr(1,2,"請按手指");
        getimage();
        while (querenma != 0)
        getimage();
        genchar(bufferID1);
        UART_init();
        fastsearch(bufferID1);
        while (querenma == 1)
        fastsearch(bufferID1);
        if (querenma == 0)
        {
          lcdclear();
                PutStr(1,1,"指紋已被錄入");
                PutStr(2,1,"請按任意鍵繼續(xù)");
                while(keycheck()==0);
        }
  else if (querenma == 9)
        {
          lcdclear();
                PutStr(1,1,"請再按手指");
                enroll();
                while (querenma == 2)
                enroll();
                lcdclear();
                if (querenma == 0)
                {
                  IDa = page_ID /100;//取百位
                        IDb = (page_ID-IDa*100)/10;//取十位
                        IDc = page_ID%10;//取個位
                        PutStr(1,1,"指紋錄入成功");
                        PutStr(2,1,"編號為:");
                        lcd_wcmd(0x8d);
                        lcd_wdat(0x30+IDa);lcd_wdat(0x30+IDb);lcd_wdat(0x30+IDc);//通過ASC碼值進行輸出
                }
    else if(querenma != 0)
                {
                        PutStr(1,1,"指紋錄入失敗");
                        PutStr(2,1,"請重新操作");
                }
                PutStr(3,0,"請按任意鍵繼續(xù)");
                while (keycheck() == 0);
        }
}



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

使用道具 舉報

沙發(fā)
ID:648281 發(fā)表于 2020-5-2 16:51 | 只看該作者
你好!
這個只能是軟硬件結(jié)合,分步來調(diào)試
回復

使用道具 舉報

板凳
ID:742880 發(fā)表于 2020-5-2 17:12 | 只看該作者
51hei**1140 發(fā)表于 2020-5-2 16:51
你好!
這個只能是軟硬件結(jié)合,分步來調(diào)試

硬件是沒問題的,我已經(jīng)調(diào)了好幾次了。程序運行也沒有報錯,所以我現(xiàn)在根本不知道到底是硬件的問題還是軟件的問題
回復

使用道具 舉報

地板
ID:452950 發(fā)表于 2020-5-2 19:41 | 只看該作者
你好,你用的指令太繁瑣了,可以只用自動注冊指紋enroll實現(xiàn)錄入指紋,可以用AS608的手指探測功能(Touch引腳),檢測到手指后再發(fā)送enroll指令。
回復

使用道具 舉報

5#
ID:742880 發(fā)表于 2020-5-2 20:51 | 只看該作者
xxpp2011 發(fā)表于 2020-5-2 19:41
你好,你用的指令太繁瑣了,可以只用自動注冊指紋enroll實現(xiàn)錄入指紋,可以用AS608的手指探測功能(Touch引 ...

你好,也許是指令太繁瑣的問題吧,但是感覺邏輯上也講得通啊。不過我在程序里還使用了刪除指紋和識別指紋兩個指令,這兩個指令都是單獨放在一個函數(shù)里就可以運行。這個增加指紋的函數(shù)里面放了三個指令就不能運行,我再調(diào)試一下吧。先謝謝了。
回復

使用道具 舉報

6#
ID:452950 發(fā)表于 2020-5-2 22:22 | 只看該作者
立夏匆匆 發(fā)表于 2020-5-2 20:51
你好,也許是指令太繁瑣的問題吧,但是感覺邏輯上也講得通啊。不過我在程序里還使用了刪除指紋和識別指紋 ...

       genchar(bufferID1);
        while (querenma != 0)
        genchar(bufferID1);
改成
        genchar(bufferID1);
生成特征處理信息只在指紋模塊內(nèi)部進行,不像錄入圖像需要按手指,如果錄入的指紋圖像夠清晰完整,一次就肯定成功,當錄入的指紋圖像不夠清晰完整時,無論生成多少次也不會成功,會導致卡在循環(huán)里面。
回復

使用道具 舉報

7#
ID:742880 發(fā)表于 2020-5-3 09:15 | 只看該作者
xxpp2011 發(fā)表于 2020-5-2 22:22
genchar(bufferID1);
        while (querenma != 0)
        genchar(bufferID1);

我照您說的方法改了,但還是不行,程序還是卡在“請按指紋”這個地方,然后按指紋也不往下運行。
回復

使用道具 舉報

8#
ID:452950 發(fā)表于 2020-5-3 10:37 | 只看該作者
立夏匆匆 發(fā)表于 2020-5-3 09:15
我照您說的方法改了,但還是不行,程序還是卡在“請按指紋”這個地方,然后按指紋也不往下運行。

你好,你的錄入指紋函數(shù)里面的文字是請按手指,你說卡在請按指紋的界面,說明不是卡在錄入指紋這一程序,建議發(fā)完整代碼或者仔細檢查一下。
回復

使用道具 舉報

9#
ID:452950 發(fā)表于 2020-5-3 11:29 | 只看該作者
如果確實是這個函數(shù)卡住,只能在中間試試串口初始化了,畢竟用的指令太多,中間某一環(huán)丟包了就很麻煩。
void addfinger()
{
        uchar IDa,IDb,IDc;//存儲返回的指紋序號
  PutStr(1,2,"請按手指");
        getimage();
        while (querenma != 0)
        getimage();
        genchar(bufferID1);
        UART_init();
        fastsearch(bufferID1);
        while (querenma == 1)
        fastsearch(bufferID1);
        if (querenma == 0)
        {
          lcdclear();
                PutStr(1,1,"指紋已被錄入");
                PutStr(2,1,"請按任意鍵繼續(xù)");
                while(keycheck()==0);
        }
回復

使用道具 舉報

10#
ID:718485 發(fā)表于 2020-5-3 13:54 來自手機 | 只看該作者
樓主,我也出現(xiàn)和你一模一樣的問題,請問樓主解決這個問題了嗎?
回復

使用道具 舉報

11#
ID:742880 發(fā)表于 2020-5-3 17:18 | 只看該作者
xxpp2011 發(fā)表于 2020-5-3 11:29
如果確實是這個函數(shù)卡住,只能在中間試試串口初始化了,畢竟用的指令太多,中間某一環(huán)丟包了就很麻煩。
vo ...

其實您說的這些方法,我之前都有試過,都不行。而且我還調(diào)試過這樣一個程序
void addfinger()
{
        uchar IDa,IDb,IDc;//存儲返回的指紋序號
  PutStr(1,2,"請按手指");
        getimage();
        while (querenma != 0)
        {getimage();PutStr(2,2,"錯誤");}
        genchar(bufferID1);
        UART_init();
        fastsearch(bufferID1);
        while (querenma == 1)
        fastsearch(bufferID1);
        if (querenma == 0)
        {
          lcdclear();
                PutStr(1,1,"指紋已被錄入");
                PutStr(2,1,"請按任意鍵繼續(xù)");
                while(keycheck()==0);
        }
我主要是想看它是不是能返回確認碼,但是它確實可以返回,在我沒按指紋時,它就能在屏幕上顯示錯誤。當我按指紋的時候,“錯誤”就不會顯示。但是程序依舊只能卡在這里。
回復

使用道具 舉報

12#
ID:742880 發(fā)表于 2020-5-3 17:18 | 只看該作者
HAYA 發(fā)表于 2020-5-3 13:54
樓主,我也出現(xiàn)和你一模一樣的問題,請問樓主解決這個問題了嗎?

還沒有,正在苦惱著。
回復

使用道具 舉報

13#
ID:742880 發(fā)表于 2020-5-3 17:32 | 只看該作者
xxpp2011 發(fā)表于 2020-5-3 10:37
你好,你的錄入指紋函數(shù)里面的文字是請按手指,你說卡在請按指紋的界面,說明不是卡在錄入指紋這一程序, ...

完整的程序,除了調(diào)用以外,和增加指紋函數(shù)相關(guān)的函數(shù),我又都附上了,有一些定義之類的,您看看可不可以
回復

使用道具 舉報

14#
ID:818291 發(fā)表于 2020-11-28 16:29 | 只看該作者
sum[1] = UART_receive_byte();         sum[0] = UART_receive_byte();                  page_ID = (ID1<<8)+ID2;//存放16位頁碼         sum_ans = (sum[1]<<8)+sum[0];//存放16位校驗和 這個是什么意思呀?
回復

使用道具 舉報

15#
ID:714012 發(fā)表于 2022-4-26 18:19 | 只看該作者
樓主,問題解決了嗎,我也遇到這個問題了,不知道怎么解決了

回復

使用道具 舉報

16#
ID:161164 發(fā)表于 2022-4-27 11:32 | 只看該作者
清風無慮 發(fā)表于 2022-4-26 18:19
樓主,問題解決了嗎,我也遇到這個問題了,不知道怎么解決了

手上沒有AS608模組
只能從代碼和數(shù)據(jù)手冊入手如果你是用了樓主的代碼
可以參考我的發(fā)現(xiàn)
在main.c






358行的指令碼應該是0x04而不是0x1b
AS608的指令碼中沒有0x1b
不知道AS608會不會有數(shù)據(jù)返回/返回多長的數(shù)據(jù)

因為后面的代碼


一定要接收等于/多于16字節(jié)的數(shù)據(jù)
不然就會被while(!RI)卡死

不太建議用while(!RI)這種寫法來等待數(shù)據(jù)
一不小心/丟包就會卡死程序

回復

使用道具 舉報

17#
ID:1004248 發(fā)表于 2022-6-10 08:16 | 只看該作者
請問指紋WAK和Vt端是不是一直接高電平

回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 伊人无码高清 | 在线不卡av | 亚洲美女一区二区三区 | 国产欧美在线一区二区 | 日韩在线视频免费观看 | 亚洲综合五月天婷婷 | 日本a∨精品中文字幕在线 亚洲91视频 | 欧美精品a∨在线观看不卡 国产精品久久国产精品 | 久久久久久国产精品免费免费男同 | 国产日韩中文字幕 | 日本视频在线播放 | 亚洲热在线视频 | 日韩免费一区 | 在线观看国产 | 在线播放亚洲 | 天天干视频 | 羞羞视频免费观 | 一级做a毛片 | 欧美区日韩区 | 99色播| 精品久久久久久亚洲精品 | 午夜欧美一区二区三区在线播放 | 欧州一区二区三区 | 免费观看www7722午夜电影 | 国产资源在线视频 | 日本高清视频网站 | 午夜精品一区二区三区在线视频 | 久久精品国产一区二区三区 | 网络毛片 | 亚洲成人av在线播放 | 国产在线精品一区 | 国产成人亚洲精品 | 91在线观| 亚洲精品无人区 | 国产伦精品一区二区三区照片91 | 国产精品一区二区三区在线 | 国产二区在线播放 | 一级欧美 | av资源中文在线天堂 | 久久精品亚洲国产 | 久久久久国产精品 |