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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 590|回復: 0
打印 上一主題 下一主題
收起左側

as608不跟單片機發數據怎么解決

[復制鏈接]
跳轉到指定樓層
樓主
ID:1004248 發表于 2022-6-9 20:02 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include <STC8.H>
xdata unsigned char aj[]={~0x21,~0x18,~0x28,~0x48,~0x14,~0x24,~0x44,~0x12,~0x22,~0x42};
xdata unsigned char a[4]={~0x01,~0x02,~0x04,~0x08};
xdata unsigned char mi[]={1,2,3,4,5,6};
xdata unsigned char shu[6];
xdata int x,y,s,k,xb,xm;
xdata int i,j;
xdata int y1,y2,cp,cp1;
sbit led=P0^5;
xdata int xxx;


//zhongduan shewzs
void Uart_Init(void)
{
        SCON  = 0x50;                // 8位數據,可變波特率
        AUXR |= 0x40;                // 定時器1時鐘為Fosc,即1T
        AUXR &= 0xFE;                // 串口1選擇定時器1為波特率發生器
        TMOD &= 0x0F;                // 設定定時器1為16位自動重裝方式
        TL1   = 0xC7;                // 設定定時初值
        TH1   = 0xFE;                // 設定定時初值
        ET1   = 0;                    // 禁止定時器1中斷
        TR1   = 1;                    // 啟動定時器1
        ES    = 1;          // 開串口中斷
        EA    = 1;          // 開總中斷


}
void Uart_Send_Byte(unsigned char c)//UART Send a byte
{
        SBUF = c;
        while(!TI);                //發送完為1
        TI = 0;
}
unsigned char Uart_Receive_Byte()//UART Receive a byteg
{       
        unsigned char dat;
        while(!RI);         //接收完為1
        RI = 0;
        led=0;
        dat = SBUF;
        return (dat);
}

sbit buzz=P3^4;
sbit KEY_DOWN=P2^3;
sbit KEY_CANCEL=P2^2;
sbit KEY_OK=P2^1;
volatile unsigned char FPM10A_RECEICE_BUFFER[32];
xdata unsigned int finger_id = 0;
//void delay_ms(unsigned int ms)
//{                        
//        unsigned int a;
//        while(ms)
//        {
//                a=1800;
//                while(a--);
//                ms--;
//        }
////        return;
//}
void Delay_Us(int i)
{
        while(--i);
}

void Delay_Ms(unsigned int m)
{
        while(m--)
        {
                 Delay_Us(125);
        }
}
void Buzz_Times(unsigned char times)
{
        unsigned char i=0;
        for(i=0;i<times;i++)
        {
                led=buzz=0;
                 Delay_Ms(200);
                 led=buzz=1;
                 Delay_Ms(200);
        }
}
//FINGERPRINT通信協議定義

code unsigned char FPM10A_Get_Device[10] ={0x01,0x00,0x07,0x13,0x00,0x00,0x00,0x00,0x00,0x1b};//口令驗證
code unsigned char FPM10A_Pack_Head[6] = {0xEF,0x01,0xFF,0xFF,0xFF,0xFF};  //協議包頭
code unsigned char FPM10A_Get_Img[6] = {0x01,0x00,0x03,0x01,0x00,0x05};    //獲得指紋圖像
code unsigned char FPM10A_Get_Templete_Count[6] ={0x01,0x00,0x03,0x1D,0x00,0x21 }; //獲得模版總數
code unsigned char FPM10A_Search[11]={0x01,0x00,0x08,0x04,0x01,0x00,0x00,0x03,0xE7,0x00,0xF8}; //搜索指紋搜索范圍0 - 999,使用BUFFER1中的特征碼搜索
code unsigned char FPM10A_Search_0_9[11]={0x01,0x00,0x08,0x04,0x01,0x00,0x00,0x00,0x13,0x00,0x21}; //搜索0-9號指紋
code unsigned char FPM10A_Img_To_Buffer1[7]={0x01,0x00,0x04,0x02,0x01,0x00,0x08}; //將圖像放入到BUFFER1
code unsigned char FPM10A_Img_To_Buffer2[7]={0x01,0x00,0x04,0x02,0x02,0x00,0x09}; //將圖像放入到BUFFER2
code unsigned char FPM10A_Reg_Model[6]={0x01,0x00,0x03,0x05,0x00,0x09}; //將BUFFER1跟BUFFER2合成特征模版
code unsigned char FPM10A_Delete_All_Model[6]={0x01,0x00,0x03,0x0d,0x00,0x11};//刪除指紋模塊里所有的模版
volatile unsigned char  FPM10A_Save_Finger[9]={0x01,0x00,0x06,0x06,0x01,0x00,0x0B,0x00,0x19};//將BUFFER1中的特征碼存放到指定的位置
//volatile:系統總是重新從它所在的內存讀取數據,即使它前面的指令剛剛從該處讀取過數據
/*------------------ FINGERPRINT命令字 --------------------------*/
//發送包頭
void FPM10A_Cmd_Send_Pack_Head(void)
{
        int i;       
        for(i=0;i<6;i++) //包頭
   {
     Uart_Send_Byte(FPM10A_Pack_Head[i]);   
    }               
}
//發送指令
void FPM10A_Cmd_Check(void)
{
        int i=0;
        FPM10A_Cmd_Send_Pack_Head(); //發送通信協議包頭
        for(i=0;i<10;i++)
         {               
                Uart_Send_Byte(FPM10A_Get_Device[i]);
          }
}
//接收反饋數據緩沖
void FPM10A_Receive_Data(unsigned char ucLength)
{
  unsigned char i;

  for (i=0;i<ucLength;i++)
        {
     FPM10A_RECEICE_BUFFER[i] = Uart_Receive_Byte();
        }

}

//FINGERPRINT_獲得指紋圖像命令
void FPM10A_Cmd_Get_Img(void)
{
    unsigned char i;
    FPM10A_Cmd_Send_Pack_Head(); //發送通信協議包頭

        for(i=0;i<6;i++) //發送命令 0x1d
        {
       
       Uart_Send_Byte(FPM10A_Get_Img[i]);   
        }
}
//講圖像轉換成特征碼存放在Buffer1中
void FINGERPRINT_Cmd_Img_To_Buffer1(void)
{
        unsigned char i;
        FPM10A_Cmd_Send_Pack_Head(); //發送通信協議包頭      
           for(i=0;i<7;i++)   //發送命令 將圖像轉換成 特征碼 存放在 CHAR_buffer1
     {
      Uart_Send_Byte(FPM10A_Img_To_Buffer1[i]);
             }
}
//將圖像轉換成特征碼存放在Buffer2中
void FINGERPRINT_Cmd_Img_To_Buffer2(void)
{
     unsigned char i;
     for(i=0;i<6;i++)    //發送包頭
         {
            Uart_Send_Byte(FPM10A_Pack_Head[i]);   
            }
     for(i=0;i<7;i++)   //發送命令 將圖像轉換成 特征碼 存放在 CHAR_buffer1
      {
              Uart_Send_Byte(FPM10A_Img_To_Buffer2[i]);
             }
}
//搜索全部用戶999枚
void FPM10A_Cmd_Search_Finger(void)
{
       unsigned char i;                       
                         FPM10A_Cmd_Send_Pack_Head(); //發送通信協議包頭
       for(i=0;i<11;i++)
           {
                  Uart_Send_Byte(FPM10A_Search[i]);   
                      }
}

void FPM10A_Cmd_Reg_Model(void)
{
       unsigned char i;          
            
                         FPM10A_Cmd_Send_Pack_Head(); //發送通信協議包頭

       for(i=0;i<6;i++)
           {
                  Uart_Send_Byte(FPM10A_Reg_Model[i]);   
                      }


}
//刪除指紋模塊里的所有指紋模版
void FINGERPRINT_Cmd_Delete_All_Model(void)
{
     unsigned char i;   
    for(i=0;i<6;i++) //包頭
      Uart_Send_Byte(FPM10A_Pack_Head[i]);   
    for(i=0;i<6;i++) //命令合并指紋模版
           {
      Uart_Send_Byte(FPM10A_Delete_All_Model[i]);   
                 }       
}
//保存指紋
void FPM10A_Cmd_Save_Finger( unsigned int storeID )
{
       unsigned long temp = 0;
                   unsigned char i;
       FPM10A_Save_Finger[5] =(storeID&0xFF00)>>8;
       FPM10A_Save_Finger[6] = (storeID&0x00FF);
                   for(i=0;i<7;i++)   //計算校驗和
                              temp = temp + FPM10A_Save_Finger[i];
                   FPM10A_Save_Finger[7]=(temp & 0x00FF00) >> 8; //存放校驗數據
                   FPM10A_Save_Finger[8]= temp & 0x0000FF;                  
       FPM10A_Cmd_Send_Pack_Head(); //發送通信協議包頭       
       for(i=0;i<9;i++)  
                      Uart_Send_Byte(FPM10A_Save_Finger[i]);      //發送命令 將圖像轉換成 特征碼 存放在 CHAR_buffer1
}
//添加指紋
void FPM10A_Add_Fingerprint()
{
        unsigned char id_show[]={0,0,0};
                        OLED_Clear(); //清屏
        finger_id=0;  
        while(1)
        {
        OLED_ShowString(20,4,"Add  finger",16);
        OLED_ShowString(20,6,"ID is",16);
        //按返回鍵直接回到主菜單
        if(KEY_CANCEL == 0)
        {
                 while(KEY_CANCEL==0);
                 break;
        }

        //按切換鍵指紋iD值加1
        if(KEY_DOWN == 0)
        {
                while(KEY_DOWN==0);
                if(finger_id == 1000)
                {
                        finger_id = 0;
                }
                else
                finger_id = finger_id + 1;
        }

         //指紋iD值顯示處理
        OLED_ShowNum(0,0,0,1,16);OLED_ShowNum(0,0,finger_id/100,1,16);OLED_ShowNum(0,0,finger_id%100/10,1,16);OLED_ShowNum(0,0,finger_id%100%10,1,16);
//         LCD1602_WriteCMD(0xc0+10);
//         LCD1602_WriteDAT(finger_id/100+48);
//         LCD1602_WriteDAT(finger_id%100/10+48);
//         LCD1602_WriteDAT(finger_id%100%10+48);
OLED_ShowString(10,2,"ksok",16);

         //按確認鍵開始錄入指紋信息                                         
         if(KEY_OK == 0)
          {       
                          while(KEY_OK==0);
                                OLED_Clear();
                                OLED_ShowString(20,3,"ks",16);
//                          LCD1602_Display(0x80," Please  finger ",0,16);
//                          LCD1602_Display(0xc0,"                ",0,16);
                        while(KEY_CANCEL == 1)
                   {
                          //按下返回鍵退出錄入返回fingerID調整狀態   
                                if(KEY_CANCEL == 0)
                                 {
                                  while(KEY_CANCEL==0);
                                  break;
                                  }
                                FPM10A_Cmd_Get_Img();
                                        //獲得指紋圖像
                                FPM10A_Receive_Data(12);
                                //判斷接收到的確認碼,等于0指紋獲取成功
                                if(FPM10A_RECEICE_BUFFER[9]==0)
                                 {
                                        Delay_Ms(100);
                                        FINGERPRINT_Cmd_Img_To_Buffer1();
                                    FPM10A_Receive_Data(12);
OLED_ShowString(20,3,"chenggong",16);
                                        Buzz_Times(1);
                                        Delay_Ms(1000);
                                //        LCD1602_Display(0x80," Please  finger ",0,16);
                          //                LCD1602_Display(0xc0,"                ",0,16);
                                        while(1)
                                        {
                                                if(KEY_CANCEL == 0)
                                                {
                                                        while(KEY_CANCEL==0);
                                                        break;
                                                }
                                         FPM10A_Cmd_Get_Img(); //獲得指紋圖像
                                         FPM10A_Receive_Data(12);
                                        //判斷接收到的確認碼,等于0指紋獲取成功
                                        if(FPM10A_RECEICE_BUFFER[9]==0)
                                        {
                                                Delay_Ms(200);
//                                                LCD1602_Display(0x80,"Successful entry",0,16);
//                                                LCD1602_Display(0xc0,"    ID is       ",0,16);
//                                                 //指紋iD值顯示處理
//                                                 LCD1602_WriteCMD(0xc0+10);
//                                                 LCD1602_WriteDAT(finger_id/100+48);
//                                                 LCD1602_WriteDAT(finger_id%100/10+48);
//                                                 LCD1602_WriteDAT(finger_id%100%10+48);
                                                FINGERPRINT_Cmd_Img_To_Buffer2();
                                                  FPM10A_Receive_Data(12);
                                                FPM10A_Cmd_Reg_Model();//轉換成特征碼
                                         FPM10A_Receive_Data(12);
                                                  FPM10A_Cmd_Save_Finger(finger_id);                                        
                                          FPM10A_Receive_Data(12);
                                                Buzz_Times(1);
                                                Delay_Ms(1000);
                                                finger_id=finger_id+1;
                                            break;
                                          }
                                   }
                                  
                                break;
                                        }
                                }
//                        ClrScreen(); //清空顯示屏
                        }
                //        Delay_Ms(500);
                }
}

//搜索指紋
void FPM10A_Find_Fingerprint()
{
        led=
        unsigned int find_fingerid = 0;
        unsigned char id_show[]={0,0,0};
        do
        {
//                LCD1602_Display(0x80," Please  finger ",0,16);
//                LCD1602_Display(0xc0,"                ",0,16);
                FPM10A_Cmd_Get_Img(); //獲得指紋圖像
                FPM10A_Receive_Data(12);               
                //判斷接收到的確認碼,等于0指紋獲取成功
                if(FPM10A_RECEICE_BUFFER[9]==0)
                {                       
                        Delay_Ms(100);
                        FINGERPRINT_Cmd_Img_To_Buffer1();
                        FPM10A_Receive_Data(12);               
                        FPM10A_Cmd_Search_Finger();
                        FPM10A_Receive_Data(16);                       
                        if(FPM10A_RECEICE_BUFFER[9] == 0) //搜索到  
                        {
//                                LCD1602_Display(0x80," Search success ",0,16);
//                                LCD1602_Display(0xc0,"    ID is       ",0,16);
                                Buzz_Times(1);                                       
                                //拼接指紋ID數
                                find_fingerid = FPM10A_RECEICE_BUFFER[10]*256 + FPM10A_RECEICE_BUFFER[11];                                       
                                 //指紋iD值顯示處理
//                                 LCD1602_WriteCMD(0xc0+10);
//                                 LCD1602_WriteDAT(find_fingerid/100+48);
//                                 LCD1602_WriteDAT(find_fingerid%100/10+48);
//                                 LCD1602_WriteDAT(find_fingerid%100%10+48);                                               
                                Delay_Ms(2000);                               
                           }
                                else //沒有找到
                                {
//                                        LCD1602_Display(0x80," Search  failed ",0,16);
//                                        LCD1602_Display(0xc0,"                ",0,16);
                                         Buzz_Times(3);
                                }
                        }               
                }while(KEY_CANCEL == 1);
}
//刪除所有存貯的指紋庫
void FPM10A_Delete_All_Fingerprint()
{
                unsigned char i=0;
//                                LCD1602_Display(0x80,"   empty all    ",0,16);
//                                LCD1602_Display(0xc0,"   Yes or no ?  ",0,16);
                do
                 {
                        if(KEY_OK==0)
                        {
                                while(KEY_OK==0);
//                                LCD1602_Display(0x80,"   emptying     ",0,16);
//                                LCD1602_Display(0xc0,"                ",0,16);
                                Delay_Ms(300);
//                                LCD1602_WriteCMD(0xc0);
                                for(i=0;i<16;i++)
                                 {
                                //        LCD1602_WriteDAT(42);
                                        Delay_Ms(100);
                                 }
                                FINGERPRINT_Cmd_Delete_All_Model();
                          FPM10A_Receive_Data(12);
//                                LCD1602_Display(0x80,"   All empty    ",0,16);
//                                LCD1602_Display(0xc0,"                ",0,16);
                                Buzz_Times(3);
                                break;
                        }
                 }while(KEY_CANCEL==1);
}

void Device_Check(void)
{
                unsigned char i=0;
                FPM10A_RECEICE_BUFFER[9]=1;                                           //串口數組第九位可判斷是否通信正常
//                LCD1602_Display(0xc0,"Loading",0,7);                   //設備加載中界面                                                          
                for(i=0;i<8;i++)                                                           //進度條式更新,看起來美觀
                {
                        //LCD1602_WriteDAT(42);                               //42對應ASIC碼的 *
                        Delay_Ms(200);                                                           //控制進度條速度
                }                                                                       
//                LCD1602_Display(0xc0,"Docking  failure",0,16);      //液晶先顯示對接失敗,如果指紋模塊插對的話會將其覆蓋       
                FPM10A_Cmd_Check();                                                                        //單片機向指紋模塊發送校對命令
                FPM10A_Receive_Data(12);                                                        //將串口接收到的數據轉存
                if(FPM10A_RECEICE_BUFFER[9] == 0)                                        //判斷數據低第9位是否接收到0
                {
//                        LCD1602_Display(0xc0,"Docking  success",0,16);        //符合成功條件則顯示對接成功
                }
}
,9,16);//
//                OLED_ShowChinese(108,2,10,16);//
//                OLED_ShowChinese(5,4,18,16);//
//                OLED_ShowChinese(25,4,19,16);//
//                OLED_ShowChinese(45,4,20,16);//
//                OLED_ShowChinese(65,4,21,16);//
//                OLED_ShowChinese(85,4,22,16);//
//                OLED_ShowString(105,4,":",16);
                P2=0xff-0x10;
        while(1)
        {
       

if(KEY_DOWN==0)        y1=1;
if(KEY_DOWN==1&&y1==1)
        {               
                                 FPM10A_Find_Fingerprint();y1=0;                                        }                                                                                                                                                       
if(KEY_CANCEL==0)        y1=2;
if(KEY_CANCEL==1&&y1==2)
        {
                                        FPM10A_Add_Fingerprint();y1=0;}
                               

                                                                       
                        Delay_Ms(100); //延時判斷100MS檢測一次       
//        anj();
}

       
       
}


cx.zip

62.85 KB, 下載次數: 1

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美三级在线 | 91麻豆精品国产91久久久更新资源速度超快 | 亚洲午夜在线 | 亚洲精品电影网在线观看 | 日本h片在线观看 | 精品视频一区二区 | 国产精品久久国产精品 | 国产精品毛片av | 中文字幕久久精品 | 最新av在线网址 | 中文字幕高清av | 久久人操 | 亚洲一二三区在线观看 | 少妇一级淫片免费播放 | 欧美日韩1区2区 | www.五月婷婷.com | 91欧美激情一区二区三区成人 | www.99热这里只有精品 | 欧美日韩一区二区三区在线观看 | 亚洲欧美综合 | 日韩成人av在线 | 亚洲a视频 | 四虎在线观看 | 久久久久国产精品午夜一区 | 在线看片国产 | 亚洲成人黄色 | 自拍偷拍第一页 | 欧美a√| 在线视频 亚洲 | 99精品国自产在线观看 | 亚洲成人av一区二区 | 欧美一级免费看 | 国产精品久久久久无码av | 成人中文字幕在线 | 国产精品一区二区三区久久久 | av在线一区二区三区 | 精品亚洲一区二区 | 日本三级线观看 视频 | 一级在线观看 | 国产免费av在线 | 欧美日韩一卡二卡 |