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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4725|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

我家里的指紋模塊51單片機(jī)程序 已經(jīng)安全運(yùn)行三年了

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:240289 發(fā)表于 2017-10-17 16:27 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  1. #include <reg52.h>
  2. #include <intrins.h>  

  3. #define TRUE 1

  4. unsigned char         SaveNumber=0,searchnum=0;
  5. unsigned int          SearchNumber=0;               

  6. unsigned int         clk0=0;

  7. sbit relay =P1^4; //繼電器引腳
  8. sbit buzzer=P1^5; //蜂鳴器引腳
  9. sbit red=   P2^7;//錄入模式指示燈 在板子靠近單片機(jī)處
  10. sbit green= P2^0;//識(shí)別模式指示燈 在板子遠(yuǎn)離單片機(jī)處



  11. sbit k1=P3^3; //模式識(shí)別
  12. sbit k2=P3^4; //錄入一次指紋
  13. sbit k3=P3^2; //清除所有指紋(10個(gè)指紋清除)


  14. //變量定義:
  15. unsigned char code tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//表:共陽(yáng)數(shù)碼管 0-9
  16.                                        
  17. //數(shù)碼管引腳定義:
  18. sbit SMG_g = P1^3;        //定義數(shù)碼管陽(yáng)級(jí)控制腳(個(gè)位)
  19. //由于程序中定時(shí)器被用 我們用一位數(shù)碼管顯示 且為靜太顯示 所以推薦大家用1602或者12864液晶


  20. bit changeflag=0,modeflag=0,clearallflag=0;  //默認(rèn)為識(shí)別模式,如果為1為錄入指紋模式,每錄入一次SaveNumber++


  21. //////////////////////////////////////常用指令定義/////////////////////////////

  22. //Verify  Password   :驗(yàn)證設(shè)備握手口令
  23. unsigned char code VPWD[16]={16,0X01 ,0Xff,0xff,0xff,0xff, 0x01,0,7,0x13,0x00,0x00,0x00,0x00,0x00,0x1b};         //回送12個(gè)

  24. //設(shè)置設(shè)備握手口令
  25. unsigned char code STWD[16]={16,0X01 ,0Xff,0xff,0xff,0xff, 0x01,0,7,0x12,0x00,0x00,0x00,0x00,0x00,0x1a};         //回送12個(gè)

  26. //GetImage           :探測(cè)手指并從傳感器上讀入圖像
  27. unsigned char code GIMG[14]={12, 0X01 ,0Xff,0xff,0xff,0xff, 0x01, 0,3,1,0x00,0x05};        //回送12個(gè)

  28. //Gen Templet1        :根據(jù)原始圖像生成指紋特征1
  29. unsigned char code GENT1[14]={13,0X01 ,0Xff,0xff,0xff,0xff,0x01,0,4,2,1,0x00,0x08};        //回送12個(gè)

  30. //Gen Templet2        :根據(jù)原始圖像生成指紋特征2
  31. unsigned char code GENT2[14]={13,0X01 ,0Xff,0xff,0xff,0xff,0x01,0,4,2,2,0x00,0x09}; //回送12個(gè)        

  32.         
  33. //Search Finger      :以CharBufferA或CharBufferB中的特征文件搜索整個(gè)或部分指紋庫(kù)
  34. unsigned char code SEAT[18]={17,  0X01 ,0Xff,0xff,0xff,0xff, 0x01,   0,8, 4,1,0,0,    0,0x65,  0x00,0x73};        //回送16個(gè)


  35. //Merge Templet      ;將CharBufferA與CharBufferB中的特征文件合并生成模板,結(jié)果存于ModelBuffer。
  36. unsigned char code MERG[14]={12,  0X01 ,0Xff,0xff,0xff,0xff, 0x01,  0,3,5 , 0x00,0x09};//回送12個(gè)        

  37. //Store Templet      :將ModelBuffer中的文件儲(chǔ)存到flash指紋庫(kù)中
  38. unsigned char code STOR[16]={15,  0X01 ,0Xff,0xff,0xff,0xff, 0x01,  0,6,6,2,     0x00,0x00,     0x00,0x0f}; //回送12個(gè)

  39. //Read Note
  40. unsigned char code RDNT[14]={13,0X01 ,0Xff,0xff,0xff,0xff, 0x01, 0,4,0x19,  0, 0x00,0x1e};

  41. //Clear Note
  42. unsigned char code DENT[46]={45,0X01 ,0Xff,0xff,0xff,0xff, 0x01, 0,36,0x18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x00,0x3d};

  43. //DEL one templet
  44. unsigned char code DELE_one[16]={16, 0X01 ,0Xff,0xff,0xff,0xff, 0x01, 0,7,  0x0c,0x00,0x00, 0,1, 0x00,0x15};

  45. //DEL templet      ;清空指紋庫(kù)
  46. unsigned char code DELE_all[12]={12,0X01 ,0Xff,0xff,0xff,0xff, 0x01, 0,3,  0x0d,0x00,0x11};


  47. ////////////////常用指令定義-------結(jié)束///////////////////////////////////////////////////////////////////////////////////////


  48. //////////////////////////////////////宏定義////////////////////////////////////////////////////////////////////////
  49. #define FALSE 0
  50. #define TURE  1

  51. //狀態(tài)定義表
  52. #define on            1
  53. #define off           0

  54. #define MAX_NUMBER    63
  55. #define _Nop()  _nop_()


  56. //////////////////////////////////////宏定義------------結(jié)束////////////////////////////////////////////////////////

  57. unsigned char                  FifoNumber=0;
  58. unsigned char    FIFO[MAX_NUMBER+1]={0};

  59. /*********1毫秒延時(shí)程序**********/
  60. void delay1ms(unsigned int t)
  61. {
  62.         unsigned int i,j;
  63.         for(i=0;i<t;i++)
  64.            for(j=0;j<120;j++)
  65.            ;
  66. }


  67. void TxdByte(unsigned char dat)//串口發(fā)送信息,通過查詢方式發(fā)送一個(gè)字符
  68. {
  69.     TI = 0;                 //讓TI=0
  70.     SBUF = dat;         //讀入數(shù)據(jù)
  71.     while(!TI);         //等待發(fā)送完畢
  72.     TI = 0;                 //清零
  73. }

  74. bit Command(unsigned char *p,unsigned char MaxTime) //命令解析,給模塊發(fā)送一個(gè)命令
  75. {
  76.           unsigned char count=0,tmpdat=0,temp=0,i=0,package=0,flag=0,checksum=0;
  77.                   
  78.         bit result=0, start=0,stop=0;

  79.           TxdByte(0xef);//數(shù)據(jù)包包頭識(shí)別碼
  80.            TxdByte(0x01);//數(shù)據(jù)包包頭識(shí)別碼
  81.           i=*p;         //數(shù)組的第“0”個(gè)元素、里面存放了本數(shù)組的長(zhǎng)度,把這個(gè)長(zhǎng)度給變量i,方便進(jìn)行操作
  82.           p++;
  83.         p++;
  84.           for (count=i-1; count!=1;count--)  //Sent command String
  85.     {
  86.                          temp=*p++;    //取第個(gè)“1”個(gè)元素的內(nèi)容,然后發(fā)送
  87.                     TxdByte(temp);//將數(shù)據(jù)發(fā)送出去
  88.         }  
  89.           result=TURE;//發(fā)送完成,結(jié)果為真 (真為1)           
  90.           FifoNumber=0;
  91.           for (count=MAX_NUMBER+1; count!=0; count--)//清空所有FIFO[]數(shù)組里面的內(nèi)容,寫入0X00
  92.                  FIFO[count-1]=0x00;  
  93.           if (result)   
  94.            {               
  95.              result=FALSE;
  96.               start =FALSE;
  97.                    stop  =FALSE;
  98.                count=0;
  99.                clk0=0;        //清零CL0計(jì)數(shù)
  100.                
  101.                do /////////////////////////////do的內(nèi)容////////////////////////////////
  102.                 {        
  103.                         restart0:                                
  104.                          if (RI==1)//如果接收到數(shù)據(jù)
  105.                               {                                 
  106.                                           tmpdat=SBUF;//先把接收到的數(shù)據(jù)放到tmpdat中
  107.                             RI=0;
  108.                             if ((tmpdat==0xef)&&(start==FALSE))//這個(gè)數(shù)據(jù)為第一個(gè)傳回來的數(shù)據(jù),也就是“指令應(yīng)答”的第一個(gè)字節(jié)
  109.                                     {
  110.                                                         count=0;
  111.                                                     FIFO[0]=tmpdat;//讀入第一個(gè)應(yīng)答字節(jié)(0XEF),存在第“0”個(gè)元素中   
  112.                                                         flag=1;        
  113.                                                         goto
  114.                                                                 restart0;//可以用中斷方式進(jìn)行                        
  115.                                                 
  116.                                      }
  117.                                         if(flag==1)//第一個(gè)字節(jié)已經(jīng)回來,所以flag==1成立
  118.                                                 {  
  119.                                                         if(tmpdat!=0x01)  //接收數(shù)據(jù)錯(cuò)誤,將重新從緩沖區(qū)接收數(shù)據(jù)
  120.                                                         {         
  121.                                                                 flag=0;//接收應(yīng)答失敗
  122.                                                                 result=FALSE;
  123.                                                               start =FALSE;
  124.                                                                    stop=FALSE;
  125.                                                                count=0;
  126.                                                                 goto
  127.                                                                         restart0;                                       
  128.                                                         
  129.                                                         }
  130.                                                         //如果成功接收到0xef01,可以開始接收數(shù)據(jù)
  131.                                                         flag=2;//flag=2;表示應(yīng)答成功,可以開始接收數(shù)據(jù)了
  132.                                                         count++;//現(xiàn)在count=1;
  133.                                                         FIFO[count]=tmpdat;//讀入第二個(gè)應(yīng)答字節(jié)(0X01),存在第“1”個(gè)元素中   
  134.                                                         start=TURE;        //應(yīng)答成功可以開始接收數(shù)據(jù)
  135.                                                             goto
  136.                                                                         restart0;        
  137.                                                 }                  
  138.                              if((flag==2)&&(start==TURE))//flag=2;表示應(yīng)答成功,可以開始接收數(shù)據(jù)了
  139.                                      {                                                              
  140.                                                            count++; //數(shù)據(jù)元素下標(biāo)++
  141.                                             FIFO[count]=tmpdat;//存入數(shù)據(jù)
  142.                                                         if(count>=6)
  143.                                                                 {
  144.                                                                         checksum=FIFO[count]+checksum; //計(jì)算校驗(yàn)和
  145.                                                                 }
  146.                                                         if(count==8)
  147.                                                                 {
  148.                                                                         package=FIFO[7]*0X100+FIFO[8];        //計(jì)算包長(zhǎng)度                                                        
  149.                                                                         stop= TURE;
  150.                                                                 }
  151.                                                         if(stop)
  152.                                                                 {                                                
  153.                                                                         if(count==package+8)
  154.                                                                         {
  155.                                                                                 checksum=checksum-FIFO[count-1] - FIFO[count];
  156.                                                                                 if(checksum != (FIFO[count]&0xff))
  157.                                                                                         result=FALSE; //校驗(yàn)失敗,置結(jié)果標(biāo)志為0                                                        
  158.                                                                                 else
  159.                                                                                         result=TURE;
  160.                                                                                 flag=0;
  161.                                                                                 break;
  162.                                                                         }
  163.                                                                 }
  164.                                      }
  165.                                 }
  166.           }/////////////////////////////do的內(nèi)容----------------結(jié)束////////////////////////////////
  167.                   
  168.                 while ((clk0 <= MaxTime) && (count <= MAX_NUMBER) && (changeflag==0)); //由定時(shí)器以及最大接收數(shù)據(jù)來控制,保證不會(huì)在此一直循環(huán)
  169.                   
  170.         FifoNumber=count;        //保存接收到的數(shù)據(jù)個(gè)數(shù)
  171.          }
  172.    return (result);
  173. }

  174. bit VefPSW(void)//驗(yàn)證設(shè)備握手口令,成功返回1     
  175. {
  176.          unsigned char  count=0;
  177.         while (1)
  178.            {
  179.              if(Command(VPWD,20) && (FifoNumber==11) && (FIFO[9]==0x00))  
  180.                         return(1);
  181.              count++;
  182.                      if (count>=2)//如果不成功,再驗(yàn)證一次,如果兩次不成功,返回失敗
  183.                 {  
  184.                     return(0);   
  185.                      }
  186.         }
  187. }


  188. void Clear_All(void) //清空指紋庫(kù)   
  189. {                                
  190.       delay1ms(200);
  191.           Command(DELE_all,50); //清空指紋庫(kù)                  
  192. }

  193. unsigned char ImgProcess(unsigned char BUFID)  //發(fā)獲取圖像并生成特征文件,存入BUFID中//輸入?yún)?shù)為緩沖區(qū)號(hào)  
  194. {        
  195.     if(Command(GIMG,89) && (FifoNumber==11) && (FIFO[9]==0x00))  
  196.     {
  197.                 if(BUFID==1)      
  198.                 {                                   
  199.                       if(Command(GENT1,60) && (FifoNumber==11) && (FIFO[9]==0x00))  
  200.                 {                                                        
  201.                                 return 1;
  202.                         }  
  203.                 else
  204.                 {
  205.                                   return 0;
  206.                  }
  207.                  }
  208.                 else if(BUFID==2)
  209.                 {
  210.                           if(Command(GENT2,60) && (FifoNumber==11) && (FIFO[9]==0x00))  
  211.                 {                                
  212.                                 return 1;
  213.                         }  
  214.                 else
  215.                 {
  216.                                   return 0;
  217.                  }                        
  218.                 }
  219.     }
  220.     else
  221.     {
  222.       return 0;      
  223.     }
  224.         return 0;            
  225. }

  226. bit Searchfinger(void)//搜索指紋(發(fā)送搜索命令、以及根據(jù)返回值確定是否存在)        
  227. {               
  228.            if(Command(SEAT,60) && (FifoNumber==15) && (FIFO[9]==0x00) )  
  229.     {
  230.                 SearchNumber=FIFO[10]*0x100+FIFO[11];//搜索到的頁(yè)碼
  231.                 //MatchScore=FIFO[12]*0x100+FIFO[13]   可以在此計(jì)算得分,從而進(jìn)行安全級(jí)別設(shè)定,本程序忽略
  232.                    return 1;
  233.         }     
  234.     else            
  235.     {
  236.                return 0;
  237.     }  
  238. }


  239. unsigned char search(void)//搜索指紋
  240. {
  241.          unsigned char SearchBuf=0,i=0;
  242.           while (i<20)
  243.     {
  244.              if (ImgProcess(1)==1)//首先讀入一次指紋  
  245.                {
  246.                        SearchBuf=Searchfinger();//進(jìn)行指紋比對(duì),如果搜索到,返回搜索到的指紋序號(hào)
  247.                        if(SearchBuf==1)
  248.                        {
  249.                                return SearchNumber;
  250.                        }
  251.                        else
  252.                         {
  253.                            return 255;//表示搜索到的指紋不正確
  254.                         }     
  255.                }
  256.                 i++;        
  257.     }
  258.    return 0;
  259. }

  260. bit savefingure(unsigned char ID)//保存指紋
  261. {
  262.          unsigned char i=0;
  263.          //現(xiàn)在開始進(jìn)行存儲(chǔ)指紋模板的操作
  264.      for (i=0;i<16;i++)        //保存指紋信息
  265.          {
  266.                 FIFO[i]=STOR[i];
  267.         }  

  268.      FIFO[12]=ID; //把指紋模板存放的PAGE_ID也就是FLASH的位置
  269.      FIFO[14]=FIFO[14]+ID;        //校驗(yàn)和

  270.      if (Command(FIFO,70)==1)//此處進(jìn)行存放指紋模板的命令
  271.          {
  272.            return(1);
  273.          }
  274.      else
  275.          {
  276.            return(0);//不成功返回0
  277.          }
  278. }



  279. unsigned char enroll(void) //采集兩次指紋,生成1個(gè) 指紋模板
  280. {
  281.          unsigned char temp=0,count=0;
  282.           while(1)
  283.           {
  284.                    temp=ImgProcess(1); //生成特征1   
  285.                    if (temp==1)//生成特征文件成功            
  286.               {                        
  287.                 //采集第一個(gè)特征成功
  288.                            count=0;  
  289.                           buzzer=1;
  290.                         delay1ms(100);
  291.                         buzzer=0;
  292.                         break;
  293.                }
  294.              else                  
  295.                {
  296.                 if (temp==0)//采集指紋沒有成功
  297.                   {
  298.                                 count++;
  299.                     if (count>=40)//如果采集了40次,還不成功,直接采集失敗,直接退出enroll函數(shù)----返回0  
  300.                                         return(0);
  301.             }
  302.         }
  303.            }

  304.         delay1ms(2000);//延時(shí)2S開始采集下一個(gè)特征

  305.         //開始采集第二個(gè)特征
  306.          while(1)
  307.           {
  308.                    temp=ImgProcess(2); //生成特征2   
  309.                    if (temp==1)//生成特征文件2成功
  310.               {
  311.                 if (  (Command(MERG,40)&& (FifoNumber==11) && (FIFO[9]==0x00))==1  ) //合并成功返回1
  312.                         {
  313.                              buzzer=1;
  314.                      delay1ms(100);
  315.                      buzzer=0;
  316.                                  delay1ms(100);
  317.                                  buzzer=1;
  318.                      delay1ms(100);        //響兩聲,表示生成一個(gè)模板成功
  319.                      buzzer=0;
  320.                                  return(1);
  321.                         }
  322.                         else
  323.                         {
  324.                            return(0);
  325.                         }               
  326.         }
  327.               else      
  328.                {        
  329.                 if (temp==1)//采集指紋沒有成功
  330.                 {
  331.                                 count++;
  332.                                 
  333.                                 if (count>=25)
  334.                                 
  335.                                 return(0);
  336.                        }
  337.              }
  338.            }
  339. }


  340. void main(void)//主函數(shù)
  341. {

  342.         unsigned char i=0;
  343.          buzzer=0;
  344.         ET0=1;     //定時(shí)器0開中斷
  345.         TL0=0x97;  //17ms的初值
  346.         TH0=0xBD;

  347.     //串口初始化
  348.     SCON=0x50;   //UART方式1:8位UART;   REN=1:允許接收
  349.     PCON=0x00;   //SMOD=0:波特率不加倍
  350.     TMOD=0x21;   //T1方式2,用于UART波特率
  351.     TH1=0xFD;
  352.     TL1=0xFD;   //UART波特率設(shè)置:9600
  353.     TR1=1;
  354.     TR0=1;// 開定時(shí)器0
  355.         
  356.         IT0=0;//中斷0低電平中斷
  357.         IT1=1;//中斷1低電平中斷
  358.         EX0=1;//開中斷0
  359.         EX1=1;//開中斷1
  360.     EA=1;

  361.         SMG_g = 0;
  362.         P0 = tab[0];//顯示0


  363.             for(i=0;i<6;i++)//開始握手6次,如果沒有一次成功,表示模塊通信不正常。只要成功就跳出此循環(huán)
  364.               {
  365.                                 if(VefPSW()==1)//與模塊握手通過,綠燈亮起。進(jìn)入識(shí)別模式
  366.                                  {
  367.                                                 green=0;
  368.                                                 buzzer=1;
  369.                                     delay1ms(300);
  370.                                     buzzer=0;
  371.                                                 green=1;
  372.                                 red=0;
  373.                                                 break; //成功就退出這個(gè)循環(huán)
  374.                                 }
  375.               }


  376.     while(1)
  377.         {

  378.         if(k2==0)//錄入一個(gè)指紋
  379.                                         {
  380.                                                           delay1ms(10);        
  381.                                                           if(k2==0)//如果仍為低電平,表示按鍵有效
  382.                                                                                           {
  383.                                                                                             while(k2==0);//等待松手
  384.                                                                                           if(VefPSW()==1&&modeflag==1&&SaveNumber<10)//與模塊握手通過
  385.                                                                                                           {
  386.                                                                                                                     if(enroll()==1)//采集兩次,生成1個(gè)指紋模板成功
  387.                                                                                                                                           {
  388.                                                                                                                                                            if(savefingure(SaveNumber+1)==1)//保存也成功
  389.                                                                                                                                                                    {
  390.                                                                                                                                                                         SaveNumber++;//加一次
  391.                                                                                                                                                                         P0=tab[SaveNumber];
  392.                                                                                                                                                                         delay1ms(200);
  393.                                                                                                                                                                         P0=0xFF;//來一次顯示,閃爍一次
  394.                                                                                                                                                                         delay1ms(200);
  395.                                                                                                                                                                         P0=tab[SaveNumber];
  396.                                                                                                                                                                 }
  397.                                                                                                 
  398.                                                                                                                                         }
  399.                                                                                                           }
  400.                                                                                                 else
  401.                                                                                                                 {
  402.                                                                                                                                                         buzzer=1;
  403.                                                                                                                                                         for(i=0;i<8;i++)
  404.                                                                                                                                                         {
  405.                                                                                                                                                           delay1ms(100);
  406.                                                                                                                                                           red=~red;
  407.                                                                                                                                                         }
  408.                                                                                                                                                         red=0;
  409.                                                                                                                                                         buzzer=0;
  410.                                                                                                                                                                
  411.                                                                                                                 }         
  412.                                                                                           }
  413.                                                                
  414.                                                 }


  415.                                                                                   // ET0=0;
  416.                                                                                  //  ET1=0;                                                                           
  417.                                                                                  //  PCON=0X02;

  418.                     if(modeflag==0)//為識(shí)別模式
  419.                                 {
  420.                                           green=0;
  421.                                           red=1;
  422.                                           searchnum=search();
  423.                                 if(searchnum>=1&&searchnum<=162)//只能存入162個(gè)指紋
  424.                                                                           {
  425.                                                                                             P0=tab[searchnum];//顯示搜索到的指紋模塊
  426.                                                                                //蜂鳴器響一聲
  427.                                                                                     //繼電器打開約        5s
  428.                                                                                    relay=1;
  429.                                                                                buzzer=1;
  430.                                                                                delay1ms(100);
  431.                                                                                buzzer=0;
  432.                                                                                    delay1ms(5000);
  433.                                                                                    relay=0;

  434.                                                                                    //ET0=0;
  435.                                                                                  //  ET1=0;                                                                                    
  436.                                                                                  //  PCON=0X02;
  437.                                                                           }
  438.                                     if(searchnum==255)//不正確的指紋 蜂鳴器響三聲
  439.                                                                           {
  440.                                                                                      P0=tab[0];//顯示0
  441.                                                                                    buzzer=1;delay1ms(100); buzzer=0;delay1ms(100);
  442.                                                                                buzzer=1;delay1ms(100); buzzer=0;delay1ms(100);
  443.                                                                                buzzer=1;delay1ms(100); buzzer=0;delay1ms(100);

  444.                                                                                    //ET0=0;
  445.                                                                                   //ET1=0;                                                                           
  446.                                                                                   // PCON=0X02;
  447.                                                                           }                        
  448.                                 }



  449.                 if(modeflag==1)//錄入模式
  450.                                 {
  451.                                   green=1;
  452.                                   red=0;
  453.                                 }

  454.                 if(clearallflag==1)
  455.                                 {
  456.                                         clearallflag=0;
  457.                                         Clear_All();
  458.                                     red=0;             //紅色燈亮
  459.                                     green=1;
  460.                                         //蜂鳴器長(zhǎng)響一次,表示清除所有指紋結(jié)束
  461.                                         modeflag=1;//進(jìn)入錄入指紋模式
  462.                                         P0=tab[0];//表示沒有指紋錄入
  463.                                         buzzer=1;
  464.                                         delay1ms(800);
  465.                                         buzzer=0;
  466.                                         SaveNumber=0;
  467.                                 }

  468.                 if(changeflag==1)
  469.                                 {
  470.                                     changeflag=0;
  471.                                         if(modeflag==0) //識(shí)別模式
  472.                                                          {
  473.                                                                  green=0;
  474.                                                                 red=1;
  475.                                                                 P0=tab[0];//顯示當(dāng)前有幾個(gè) 指紋
  476.                                                          }
  477.                                          else                   //錄入模式
  478.                                                          {
  479.                                                                  red=0;
  480.                                                                 green=1;
  481.                                                                 P0=tab[0];//顯示0
  482.                                                          }
  483.                                 
  484.                  
  485.          
  486.         }////////////////////////////while(1)結(jié)束////////////////////////////////
  487.         
  488.   }
  489. }

  490.                                                                                          //////////////
  491. void  Timer0(void) interrupt 1//定時(shí)器0中斷函數(shù)
  492. {
  493.          TL0=0x97;
  494.         TH0=0xBD;
  495.         clk0++;   //延時(shí)17ms
  496. }

  497. void int0(void) interrupt 0//中斷0,清除所有指紋
  498. {
  499.         if(k3==0) //清除所有指紋
  500.         {
  501.                 delay1ms(10);
  502.                 if(k3==0)//如果仍為低電平,表示按鍵有效
  503.                 {
  504.                         while(k3==0);//等待松手        
  505.                         clearallflag=1;
  506.                         changeflag=1;
  507.                 }        
  508.         }        
  509. }


  510. void int1(void) interrupt 2//中斷1,模式轉(zhuǎn)換
  511. {
  512.         if(k1==0)//模式轉(zhuǎn)換 其中用modeflag 來標(biāo)志,默認(rèn)從第1個(gè)指紋開始錄入
  513.         {
  514.           delay1ms(10);        
  515.           if(k1==0)//如果仍為低電平,表示按鍵有效
  516.                   {
  517.                          while(k1==0);//等待松手
  518.                          modeflag=~modeflag;//0表示錄入指紋  1表示識(shí)別指紋
  519.                          changeflag=1;
  520.                 //         PCON=0;                                                                                  ///////////
  521.            //  ET0=1;        
  522.                 //         ET1=1;
  523.                 }        
  524.         }        
  525. }


復(fù)制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2017-10-17 17:38 | 只看該作者
樓主能提供下原理圖嗎?
回復(fù)

使用道具 舉報(bào)

板凳
ID:243040 發(fā)表于 2017-10-26 10:37 | 只看該作者
有點(diǎn)看不懂
回復(fù)

使用道具 舉報(bào)

地板
ID:247778 發(fā)表于 2017-12-11 16:32 | 只看該作者
樓主能教教我嗎,qq遠(yuǎn)程有償
回復(fù)

使用道具 舉報(bào)

5#
ID:272876 發(fā)表于 2018-9-6 17:59 | 只看該作者
有圖嗎
回復(fù)

使用道具 舉報(bào)

6#
ID:71421 發(fā)表于 2019-3-14 08:38 | 只看該作者
層次分明,思維縝密,學(xué)到很多!多謝分享!!!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久久国产一区二区三区 | 91精品国产91 | 欧美性网| 欧美最猛黑人xxxⅹ 粉嫩一区二区三区四区公司1 | 高清亚洲| 国产精品国产精品国产专区不卡 | 日韩成人一区 | 久久精品国产一区 | 亚洲精品在线视频 | 亚洲国内精品 | 伊人精品国产 | www.亚洲精品 | 国产精品久久久久久高潮 | 日韩一级欧美一级 | 久久精品99 | 日韩视频在线免费观看 | 久久99这里只有精品 | 欧美日韩精品在线免费观看 | 亚洲国产精品成人无久久精品 | 日本久久久久久 | 亚洲视频一区在线观看 | 国产精品久久久久久久久久99 | 亚洲www啪成人一区二区麻豆 | 天天爽夜夜操 | 精品国产一区二区在线 | 91精品国产一区二区三区 | 黄网站在线播放 | 国产一二区在线 | 日韩在线一区二区 | 欧美一区二区三区,视频 | 精品乱子伦一区二区三区 | 人人澡人人射 | 日韩1区 | 美女爽到呻吟久久久久 | 欧美另类视频 | 欧美视频一区二区三区 | 91精品国产综合久久久久久丝袜 | 久久久精品网站 | 69性欧美高清影院 | 久久一区二区视频 | 成人午夜激情 |