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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6742|回復: 8
收起左側

51單片機FM1702SL讀卡器控制程序

  [復制鏈接]
ID:248940 發表于 2017-11-13 19:06 | 顯示全部樓層 |閱讀模式
該程序為51單片機的FM1702代碼
0.png
單片機源程序如下:

  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #include <FM1702.h>
  4. #include   <STDIO.H>
  5. #define        PAUSE_INT        EA=0;
  6. #define        START_INT        EA=1;
  7. #define uchar unsigned  char
  8. #define uint  unsigned  int

  9. #define TRUE   1
  10. #define FALSE  0


  11. sbit  rst =P0^7;
  12. sbit  cs  =P0^6;
  13. sbit  si  =P0^5;
  14. sbit  sck =P0^4;
  15. sbit  so  =P0^3;

  16. sbit  led =P1^3;
  17. sbit  beep=P3^7;

  18. sbit K1=P1^0;
  19. sbit K2=P1^1;
  20. uchar flag=0;
  21. unsigned char date;
  22. unsigned char        TxData[5];
  23. void UART_Init();
  24. uchar Receive();
  25. void Send(unsigned char back);
  26. void        send_char_com(uchar ch);
  27. void        send_string_com(uchar *str, uchar strlen);


  28. /////變量定義///////////////

  29. uchar         RevBuffer[24];                    /* FM1702命令發送接收緩沖區 */
  30. uchar         UID[5];                            /* 序列號 */
  31. uchar  Secnr;                                /* 塊號 */
  32. #define         m1erea                 0x01     //要操作的扇區號
  33. uint     pay=1;                                //刷卡扣取的金額,2個字節,65535
  34. uint     put=100;                        //刷卡充值的金額,每刷一次充值100元
  35. uint     ctime,cctime;
  36. uchar    ctimeH,ctimeL;
  37. uchar lcd[5];
  38. bit ICValueFlag=1;              //IC卡分值為0標志位
  39. bit payflag=0;
  40. /////變量定義///////////////



  41. ////////////////////// 子函聲明 /////////////////////////////
  42. uchar SPIRead(char reg_ad);
  43. void SPIWrite(char reg_ad,char reg_data);
  44. void Write_FIFO(uchar count, uchar  *buff);
  45. uchar Clear_FIFO(void);
  46. uchar Judge_Req(uchar  *buff);
  47. uchar Command_Send(uchar count, uchar *buff, uchar Comm_Set);
  48. uchar Request(uchar mode);
  49. void delay(uint x);
  50. uchar Read_FIFO(uchar *buff);
  51. //void Save_UID(uchar row, uchar col, uchar length);
  52. uchar AntiColl();
  53. uchar Check_UID();
  54. //void Set_BitFraming(uchar row, uchar col);
  55. uchar Select_Card();
  56. char M500HostCodeKey(  uchar *uncoded, uchar *coded);
  57. uchar Load_key_CPY(uchar *buff);
  58. void keyto();
  59. uchar block_numset(uchar block_num);
  60. uchar MIF_Write(uchar *buff, uchar Block_Adr);
  61. uchar Read_E2(uchar lsb, uchar msb, uchar count, uchar *buff);
  62. uchar CRCrdadandset(uchar * buff,uchar RW);

  63. void initial_LCD();
  64. void DispalyLcd();
  65. void LCD_Data(uchar LCDbyte );
  66. void WriteCommand(uchar a);
  67. void displayUid();
  68. void displaymun(uchar temp1,uchar temp2,uchar temp3,uchar temp5,uchar buff1,uchar buff2,uchar buff3);

  69. void dis_Request1();
  70. void dis_Request2();
  71. void dis_Request3();
  72. void LCD_PutString(unsigned char x,unsigned char y,uchar *s);

  73. ////////////////////////////////////////////////////////////////////
  74. ////////////////////////////////////////////////////////////////////

  75. void Init_FM1702()
  76. {       
  77.         uchar temp;
  78.         uint        i;
  79.         sck = 1;
  80.         so = 1;
  81.         si = 1;
  82.         rst = 1;                                    /* FM1702復位 */
  83.         for(i = 0; i < 0xff; i++)
  84.         {
  85.                 _nop_();                     /*等待約140ms, 11.0592*/
  86.         }
  87.         rst = 0;
  88.         for(i = 0; i < 0xff; i++)      
  89.         {
  90.                 _nop_();
  91.         }
  92.      ///////////  init_spi  ///////////////////////////////////////////////       
  93.         while(temp = SPIRead(Command) != 0)        /* 等待Command = 0,FM1702復位成功 */
  94.         {
  95.                 _nop_();
  96.         }
  97. ////////////////////////////////////////////////////////////////////////////
  98.     SPIWrite(Page_Sel,0x80);                 //往PAG里面寫0X80初始化SPI接口
  99.         for(i = 0; i < 0xff; i++) /* 延時 */
  100.         {
  101.                 if(temp=SPIRead(Command) == 0x00)        //如果Command為0表示初始化SPI接口成功
  102.                 {
  103.                         SPIWrite(Page_Sel,0x00);        //往PAG里面寫0開使用SPI接口
  104.                 }
  105.         }
  106.      ////////// init_FM1702 ///////////////////////////////////////
  107.         SPIWrite(InterruptEn,0x7f);        //address 06H  /* 中斷使能/禁止寄存器 */off
  108.         SPIWrite(Int_Req,0x7f);     //address 07H    /* 中斷請求標識寄存器 */清0
  109.         SPIWrite(TxControl,0x5b);        //address 11H    /* 發送控制寄存器 */
  110.         SPIWrite(RxControl2,0x01);  //address 1EH    設置接收控制寄存器
  111.         SPIWrite(RxWait,0x07);                //address 21H    設置接收和發送之間的時間間隔
  112.     SPIWrite(TypeSH,0x00);      //0:TYPEA模式*//* 1:TYPEB模式*//* 2:上海模式*/
  113. }       
  114. ////////////////////////////////////////////////////////////////////////////



  115. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  116. //名稱: spi_byte_transceive                                                    //
  117. //功能: 該函數實現SPI通訊的數據收發                                            //
  118. //                                                                               //
  119. //輸入:                                                                        //
  120. //      發送數據                                                               //
  121. //                                                                             //
  122. //輸出:                                                                        //
  123. //      接收數據                                                               //
  124. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  125. char spi_byte_transceive(char sendbyte)
  126. {
  127.   char i,temp;
  128.   for(i=0;i<8;i++)
  129.    {  
  130.             sck=0;
  131.             if(sendbyte & 0x80)                //位運算,判斷最高位是否為1
  132.              {
  133.                       si=1;
  134.              }
  135.             else
  136.              {
  137.                       si=0;
  138.              }
  139.             sendbyte <<= 1;   
  140.             sck=1;
  141.             temp <<= 1;
  142.             if(so)
  143.             temp |= 0x01;
  144.    }
  145.             sck=0;
  146.              _nop_();
  147.          _nop_();
  148.             si=0;
  149.             return (temp);
  150. }


  151. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  152. //名稱: rc531_register_write                                                   //
  153. //功能: 該函數實現通過SPI接口對RC531中一個寄存器寫入值                         //
  154. //                                                                             //
  155. //輸入:                                                                        //
  156. //     RC531目標寄存器地址和寫入值                                             //
  157. //                                                                             //
  158. //輸出:                                                                        //
  159. //     N/A                                                                     //
  160. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  161. void SPIWrite(char reg_ad,char reg_data)
  162. {   
  163.     sck=0;                               //時鐘
  164.     reg_ad <<= 1;
  165.     cs=0;                              //接口選通
  166.     reg_ad &= 0x7F;                      //最高位為0表示寫
  167.     spi_byte_transceive(reg_ad);     //寫地址
  168.     spi_byte_transceive(reg_data);  //寫數據
  169.     cs=1;
  170.     return;
  171. }

  172. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  173. //名稱: rc531_register_read                                                    //
  174. //功能: 該函數實現通過SPI接口讀取RC531中一個寄存器的值                         //
  175. //                                                                             //
  176. //輸入:                                                                        //
  177. //     RC531目標寄存器地址                                                     //
  178. //                                                                             //
  179. //輸出:                                                                        //
  180. //     目標寄存器的值                                                          //
  181. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  182. uchar SPIRead(char reg_ad)
  183. {   char temp;
  184.     sck=0;       //時鐘
  185.      _nop_();
  186.      _nop_();
  187.     cs=0;      //接口選通開
  188.     reg_ad <<= 1;                          //reg_ad左移一位付值給reg_ad
  189.     reg_ad |= 0x80;                        //reg_ad跟“0X80”或運算后付值給reg_ad   最高位為1表示讀
  190.    
  191. ……………………

  192. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
讀卡器程序.zip (91.34 KB, 下載次數: 118)
回復

使用道具 舉報

ID:143486 發表于 2017-12-26 15:52 | 顯示全部樓層
很好刷刷刷
回復

使用道具 舉報

ID:271657 發表于 2018-1-4 21:42 | 顯示全部樓層
支持下樓主 小弟剛來 多給幾分讓我好試試程序
回復

使用道具 舉報

ID:276348 發表于 2018-1-21 22:38 | 顯示全部樓層
單片機要學習的內容還是比較多的。
回復

使用道具 舉報

ID:191710 發表于 2018-6-14 16:14 | 顯示全部樓層
不錯不錯。。。
回復

使用道具 舉報

ID:383818 發表于 2018-8-7 14:57 | 顯示全部樓層
需要多交流學習啊
回復

使用道具 舉報

ID:593106 發表于 2020-5-10 21:24 | 顯示全部樓層
感謝分享,正需要
回復

使用道具 舉報

ID:23844 發表于 2021-10-10 15:14 | 顯示全部樓層
感謝分享,下載一份研究研究
回復

使用道具 舉報

ID:29579 發表于 2022-8-19 14:13 | 顯示全部樓層
謝謝分享!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一二区视频 | 免费一级网站 | 视频一区二区在线观看 | 日韩欧美国产一区二区 | 亚洲第一女人av | 欧美一区成人 | 亚州精品天堂中文字幕 | 日韩一区二区三区在线视频 | 懂色一区二区三区免费观看 | 欧美福利在线 | 看片wwwwwwwwwww| 亚洲成av人片在线观看无码 | 在线不卡av | 男人天堂av网 | 中文字幕亚洲免费 | 九九久久久 | 欧美成人a | 欧美日一区二区 | 最新国产精品 | 红色av社区 | 视频一区 亚洲 | 国产精品久久久久婷婷二区次 | 久久久精品视频一区二区三区 | 色综合久久久久 | 久久婷婷国产香蕉 | 日韩av啪啪网站大全免费观看 | 欧美视频精品 | 欧美成人一区二免费视频软件 | 午夜影视大全 | 黄色毛片一级 | 男女视频在线免费观看 | 久久色视频| 在线观看av网站永久 | 亚洲高清视频在线观看 | av一级久久 | 一级大片 | 中文字幕成人av | 伊人久久综合 | 久久国产精品一区 | 免费看a | 国产福利在线免费观看 |