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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機倉庫管理下位機 C語言程序看的懂,就是不知道怎么寫

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:210728 發(fā)表于 2018-10-23 18:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本人小白一枚,才接觸單片機,有點單片機基礎(chǔ),這段時間在做個倉庫管理系統(tǒng),用的STC89C52RC芯片加上RFID,第一次刷卡是入庫,第二次刷卡則是出庫,但是我不太懂怎么實現(xiàn),C語言看的懂,就是不知道怎么寫,求大神幫幫忙,只要能在串口調(diào)試助手上能顯示卡號就行了!
謝謝大佬了!單片機代碼如下:
  1. #include "reg52.h"
  2. #include "main.h"
  3. #include "mfrc522.h"
  4. #include<intrins.h>         //函數(shù)處理頭文件        
  5. #include<string.h>          //字符串處理頭文件  
  6. #include<stdio.h>           // 輸入輸出函數(shù)頭文件

  7. unsigned char code data1[16] = {0x00,0x00,0x00,0xAA,0xFF,0xFF,0xFF,0x55,0x00,0x00,0x00,0xAA,0x01,0xFE,0x01,0xFE};//
  8. //M1卡的某一塊寫為如下格式,則該塊為門禁,不同的門修改門碼即可
  9. //4字節(jié)門碼(低字節(jié)在前)+4字節(jié)門碼取反+4字節(jié)門碼+1字節(jié)塊地址+1字節(jié)塊地址取反+1字節(jié)塊地址+1字節(jié)塊地址取反
  10. //unsigned char code data2[16] = {0x00,0x00,0x00,0x55,0xFF,0xFF,0xFF,0xAA,0x00,0x00,0x00,0x55,0x01,0xFE,0x01,0xFE};//
  11. unsigned char code data2[16] = {0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xff,0x00,0x00,0x00,0x00,0x01,0xFE,0x01,0xFE};
  12. //M1卡的某一塊寫為如下格式,則該塊為門禁,不同的門修改門碼即可
  13. //4字節(jié)門碼(低字節(jié)在前)+4字節(jié)門碼取反+4字節(jié)門碼+1字節(jié)塊地址+1字節(jié)塊地址取反+1字節(jié)塊地址+1字節(jié)塊地址取反
  14. unsigned char code DefaultKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; //密碼
  15. unsigned char TYPE_DATA[2];//類型
  16. unsigned char ID_DATA[4];  //ID地址
  17. unsigned char value_DATA[4];//卡里面的值                                                                                                                                 
  18. unsigned char g_ucTempbuf[20];//

  19. unsigned char code  DIS1[] = {"  倉庫管理系統(tǒng)  "};
  20. unsigned char code  DIS2[] = {"貨物ID:"};
  21. unsigned char code  DIS3[] = {"雪花物流歡迎您"};
  22. unsigned char code  DIS4[] = {"請掃描貨物!    "};
  23. unsigned char code  DIS6[] = {"0123456789ABCDEF"};
  24. unsigned char code  DIS7[]=  {"請入庫!          "};
  25. unsigned char tt=0,key_data,key_olddata,mode,profalg,kaimengtime;  
  26. unsigned int  a,b;      
  27. void delay1(unsigned int z)
  28. {
  29.         unsigned int x,y;
  30.         for(x=z;x>0;x--)
  31.         for(y=110;y>0;y--);        
  32. }  
  33. void fengmingqi()
  34. {
  35.         fmq = 0;
  36.                 delay1(100);
  37.                 fmq = 1;
  38.                 delay1(100);
  39.                 fmq = 0;
  40.                 delay1(200);
  41.                 fmq = 1;                        
  42.                 delay1(600);               

  43. }            
  44. void main( )
  45. {   
  46.      unsigned char status;
  47.      InitializeSystem( );
  48.          ckcsh();
  49.      PcdReset();
  50.      PcdAntennaOff(); //關(guān)閉天線
  51.      PcdAntennaOn();  //開啟天線
  52.      while ( 1 )
  53.      {                           
  54.                key();//按鍵檢測
  55.          status = PcdRequest(PICC_REQALL, g_ucTempbuf); //尋卡
  56.                  if(status!=MI_OK)//沒卡
  57.                  {
  58.                          ID_DATA[0]=0x00;
  59.                         ID_DATA[1]=0x00;
  60.                         ID_DATA[2]=0x00;
  61.                         ID_DATA[3]=0x00;
  62.                         profalg=0;
  63.                         b=0;

  64.                  }
  65.          if (status == MI_OK)//有卡
  66.          {                                   
  67.                          if(profalg==0)
  68.                                  {  
  69.                                  pro();
  70.                                  profalg=1;
  71.                                  }
  72.                                  TYPE_DATA[0]=g_ucTempbuf[0];
  73.                                  TYPE_DATA[1]=g_ucTempbuf[1];
  74.                                  status = PcdAnticoll(g_ucTempbuf);       //防沖撞 ,返回卡片ID號 4字節(jié)
  75.                          if (status == MI_OK)
  76.                          {
  77.                                                  status = PcdSelect(g_ucTempbuf);    //選定卡片  ,輸入卡片ID號
  78.                                          if (status == MI_OK)
  79.                                          {
  80.                                                         ID_DATA[0]=g_ucTempbuf[0];
  81.                                                         ID_DATA[1]=g_ucTempbuf[1];
  82.                                                         ID_DATA[2]=g_ucTempbuf[2];
  83.                                                         ID_DATA[3]=g_ucTempbuf[3];
  84.                                                         writek();//寫卡
  85.                                                         readk();//讀卡
  86.                                                         
  87.                                          }           
  88.                          }
  89.                  }               
  90.                                  LCD12864();//顯示處理包括開門處理        
  91.                                  //SendStr();
  92.                                  PcdHalt();//命令卡片進入休眠狀態(tài),因為尋卡命令是尋找所有的卡包括休眠的卡,這條命令可以去掉        
  93.          }      
  94. }
  95. void InitializeSystem()//輸入輸出口初始化
  96. {     
  97.      P0 = 0xFF;
  98.          P1 = 0xFF;
  99.          P2 = 0xFF;
  100.          P3 = 0xFF;

  101. }
  102. void Delay(unsigned int time)//延時函數(shù)
  103. {
  104.   unsigned int i,k  ;
  105.   for(i=0;i<255;i++)
  106.     for(k=0;k<time;k++)
  107.       _nop_();         
  108. }

  109. void ckcsh()       //初始化函數(shù),初始化LCD
  110. {
  111.         fmq=1;
  112.         lcd_init();                                       
  113.         Delay(1);
  114. }

  115. void LCD12864()
  116. {
  117.         unsigned char i;
  118.         lcd_pos(1,0);              //設(shè)置顯示位置為第1行
  119.         for(i=0;i<16;i++)
  120.         {
  121.                 lcd_wdat(DIS1[i]);
  122.          }
  123.         lcd_pos(2,0);             //設(shè)置顯示位置為第2行
  124.         for(i=0;i<4;i++)
  125.         {
  126.                 lcd_wdat(DIS2[i]);
  127.         }
  128.         lcd_wdat(DIS6[ID_DATA[0]/16]);        // ID
  129.         lcd_wdat(DIS6[ID_DATA[0]%16]);        //
  130.         lcd_wdat(DIS6[ID_DATA[1]/16]);        //
  131.         lcd_wdat(DIS6[ID_DATA[1]%16]);        //
  132.         lcd_wdat(DIS6[ID_DATA[2]/16]);        //
  133.         lcd_wdat(DIS6[ID_DATA[2]%16]);        //
  134.         lcd_wdat(DIS6[ID_DATA[3]/16]);        //
  135.         lcd_wdat(DIS6[ID_DATA[3]%16]);        //
  136.         lcd_pos(3,0);             //設(shè)置顯示位置為第3行
  137.         for(i=0;i<16;i++)
  138.         {
  139.                 lcd_wdat(DIS3[i]);
  140.         }
  141.         lcd_pos(4,0);             //設(shè)置顯示位置為第4行
  142.         if(b==0xaa)        //請入庫
  143.         {
  144.                 for(i=0;i<16;i++)
  145.                 {
  146.                 lcd_wdat(DIS7[i]);
  147.                 }
  148.                 LED3=0;
  149.                 LED4=0; //模擬繼電器開
  150.             kaimengtime=100;
  151.         fengmingqi();
  152.         }
  153.         if(kaimengtime==0) //當(dāng)開門時間到的話 關(guān)掉繼電器
  154.         {
  155.         LED3=1;
  156.             LED4=1; //模擬繼電器關(guān)
  157.                  for(i=0;i<16;i++)
  158.                 {
  159.                 lcd_wdat(DIS4[i]);
  160.                 }
  161.         }

  162. }
  163. bit lcd_busy() //檢查LCD忙狀態(tài) , lcd_busy為1時,忙,等待。lcd-busy為0時,閑,可寫指令與數(shù)據(jù)。
  164. {                          
  165.     bit result;
  166.     LCD_RS = 0;
  167.     LCD_RW = 1;
  168.     LCD_EN = 1;
  169.     result = (bit)(P0&0x80);
  170.     LCD_EN = 0;
  171.     return(result);
  172. }
  173. void lcd_wcmd(unsigned char cmd) //寫指令數(shù)據(jù)到LCD , RS=L,RW=L,E=高脈沖,D0-D7=指令碼。
  174. {                          
  175.     while(lcd_busy());
  176.     LCD_RS = 0;
  177.     LCD_RW = 0;
  178.     LCD_EN = 0;
  179.     P0 = cmd;
  180.     _nop_();
  181.     _nop_();     
  182.     LCD_EN = 1;
  183.     LCD_EN = 0;
  184. }
  185. void lcd_wdat(unsigned char dat) //寫顯示數(shù)據(jù)到LCD ,RS=H,RW=L,E=高脈沖,D0-D7=數(shù)據(jù)。
  186. {                          
  187.     while(lcd_busy());
  188.     LCD_RS = 1;
  189.     LCD_RW = 0;
  190.     LCD_EN = 0;
  191.         P0 = dat;   
  192.     LCD_EN = 1;
  193.     LCD_EN = 0;
  194. }
  195. void lcd_init()// LCD初始化設(shè)定
  196. {
  197.     LCD_PSB =1;
  198.     //LCD_RST = 0;                 //液晶復(fù)位
  199.     Delay(3);                  
  200.     LCD_RST = 1;      
  201.     Delay(3);
  202.     lcd_wcmd(0x34);      //擴充指令操作
  203.     Delay(5);
  204.     lcd_wcmd(0x30);      //基本指令操作
  205.     Delay(5);
  206.     lcd_wcmd(0x0C);      //顯示開,關(guān)光標(biāo)
  207.     Delay(5);
  208.     lcd_wcmd(0x01);      //清除LCD的顯示內(nèi)容
  209.     Delay(5);
  210. }
  211. void lcd_pos(unsigned char X,unsigned char Y)//設(shè)定顯示位置
  212. {                          
  213.    unsigned char  pos;
  214.    if (X==1)
  215.      {X=0x80;}
  216.    else if (X==2)
  217.      {X=0x90;}
  218.    else if (X==3)
  219.      {X=0x88;}
  220.    else if (X==4)
  221.      {X=0x98;}
  222.    pos = X+Y ;
  223.    lcd_wcmd(pos); //顯示地址
  224. }
  225. void  clr_screen()// 清屏函數(shù)   
  226. {
  227.    lcd_wcmd(0x34);//擴充指令操作
  228.    lcd_wcmd(0x30);//基本指令操作
  229.    lcd_wcmd(0x01);//清屏   
  230. }
  231. void pro()//蜂鳴器啟動函數(shù)
  232. {
  233. //fmq=0;
  234. TMOD=0x11;//設(shè)置定時器0為工作方式1
  235. TH0=(65536-50000)/256;//給定時器裝初值 高八位
  236. TL0=(65536-50000)%256;//給定時器裝初值 低八位
  237. EA=1;   //開總中斷
  238. ET0=1;  //
  239. TR0=1;  //
  240. }
  241. void delay10ms(void) //延時程序

  242. {

  243.       unsigned char i,j;

  244.       for(i=20;i>0;i--)

  245.       for(j=248;j>0;j--);

  246. }
  247. void key()//16鍵 按鍵掃描檢測
  248. {
  249.         if(keya==0)        //按鍵值更新與否
  250.         {
  251.                
  252.          delay10ms();
  253.          while(keya==0);
  254.                  mode=3;
  255.          pro();
  256.         }
  257.             if(keyb==0)        //按鍵值更新與否
  258.         {
  259.                
  260.         delay10ms();
  261.          while (keyb==0);
  262.              mode=2;
  263.          pro();
  264.         }                  
  265.         
  266. }
  267. void time0() interrupt 1// 中斷服務(wù)子程序,蜂鳴器聲音進入3次,開門時間-1
  268. {

  269. TH0=(65536-50000)/256;//給定時器裝初值 高八位
  270. TL0=(65536-50000)%256;//給定時器裝初值 低八位
  271. tt++;
  272. if(tt==3)
  273.         {        
  274.         tt=0;
  275.                 fmq=1;
  276.         }
  277. if(kaimengtime>0)
  278.         {        
  279.      kaimengtime--;  
  280.         }        
  281. }
  282. void readk()//讀卡,b的值及為標(biāo)志
  283. {        
  284. unsigned char status;
  285. status = PcdAuthState(PICC_AUTHENT1A, 1, DefaultKey, g_ucTempbuf);//PICC_AUTHENT1A 驗證密碼模式60A密碼 61B密碼,“1”塊地址,DefaultKey初始密碼,g_ucTempbuf ID號
  286.          if (status == MI_OK) //驗證密碼
  287.          {                                                                                                                                                                                                                                                                                                                                                                                          
  288.         status = PcdRead(1, g_ucTempbuf);//讀塊地址“1”的數(shù)據(jù),返回值存在        g_ucTempbuf
  289.                 if (status == MI_OK)
  290.                           {
  291.                                 value_DATA[0]=g_ucTempbuf[0];
  292.                                 value_DATA[1]=g_ucTempbuf[1];
  293.                                 value_DATA[2]=g_ucTempbuf[2];
  294.                                 value_DATA[3]=g_ucTempbuf[3];        
  295.                                 b=value_DATA[3];
  296.                                 //printf("%s",b);                                                                                                                                                            
  297.                           }   
  298.      }
  299. }        
  300. void writek()//給門禁卡寫入值,00或者aa AA可以開門 00的不可以入庫
  301. {
  302.     unsigned char status;
  303.       if( mode==3)//寫入0xaa充值
  304.                 {        
  305.                         mode=0;
  306.                     status = PcdAuthState(PICC_AUTHENT1A, 1, DefaultKey, g_ucTempbuf);//PICC_AUTHENT1A 驗證密碼模式60A密碼 61B密碼,“1”塊地址,DefaultKey初始密碼,g_ucTempbuf ID號
  307.                         if (status == MI_OK) //驗證密碼
  308.                           {                                                                                                                                                                                                                                                                                                                                          
  309.                                   status = PcdWrite(1, data1);//寫入庫碼
  310.                                   if (status == MI_OK)
  311.                                         {
  312.                                         pro();
  313.                                     }
  314.                           }
  315.                 }
  316.                 if(mode==2) //寫入0x00                  
  317.                 {
  318.                         mode=0;
  319.                 status = PcdAuthState(PICC_AUTHENT1A, 1, DefaultKey, g_ucTempbuf);//PICC_AUTHENT1A 驗證密碼模式60A密碼 61B密碼,“1”塊地址,DefaultKey初始密碼,g_ucTempbuf ID號
  320.                     if (status == MI_OK) //驗證密碼
  321.                     {                                                                                                                                                                                                                                                                                                                                          
  322.                                   status = PcdWrite(1, data2);//寫入庫碼
  323.                                   if (status == MI_OK)
  324.                                          {
  325.                                                   pro();
  326.                                          }
  327.                     }
  328.                 }
  329. }
復(fù)制代碼


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

使用道具 舉報

沙發(fā)
ID:897941 發(fā)表于 2021-3-29 10:45 | 只看該作者
你這個弄明白了沒
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 97碰碰碰 | 蜜桃传媒av| 日本精品视频在线观看 | 日韩精品一区二区三区中文在线 | 国色天香综合网 | 在线观看欧美日韩视频 | 精品国模一区二区三区欧美 | 黄网站涩免费蜜桃网站 | 国产精品一区二区视频 | 精品影院 | 成人性生交大片免费看中文带字幕 | 成人一区二区视频 | 亚洲国产成人精品女人久久久野战 | 一级做a爰片久久毛片免费看 | 免费观看成人鲁鲁鲁鲁鲁视频 | 日韩免费网站 | 日韩中文欧美 | 免费视频二区 | 狠狠操狠狠 | 国产精品久久精品 | 亚洲精品自在在线观看 | 国产精品毛片久久久久久久 | 免费a v网站 | 亚洲精品国产偷自在线观看 | 国产不卡视频在线 | 国产69精品久久99不卡免费版 | 亚洲国产视频一区二区 | 久久国产精品久久久久久 | 午夜在线观看视频 | 日韩视频在线免费观看 | 91免费在线视频 | 日韩午夜激情 | 久久视频免费看 | 在线一区二区观看 | www.国产| 亚洲大片在线观看 | 欧洲一区在线观看 | 精品久久久久久久久久久久 | 欧美一区| 午夜精品一区 | 91精品中文字幕一区二区三区 |