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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于AT89S52單片機芯片的電子鎖設計

[復制鏈接]
跳轉到指定樓層
樓主
                         最近的一個作業 電子鎖的設計-20171202
                               張劉清
                            學號16131422


圖一:At89S52芯片的  簡介說明



圖二:lcd160顯示顯示屏的 簡介說明




圖三:晶振電路圖 + 復位電路圖 簡介說明




圖四: at24c02存儲模塊 簡介說明 電路圖



圖五:器件簡要清單



圖六:作品的最后展示


最后是代碼的設計
單片機源程序如下:
  1. #include <reg52.h>
  2. #include <stdio.h>  
  3. #include <intrins.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. sbit scl=P3^6;  //24C02時鐘線的接口
  7. sbit sda=P3^7; //24C02數據線的接口
  8. sbit fmp=P1^7;
  9. sbit RS=P1^0;  //pin4
  10. sbit E=P1^1;  // pin6
  11. #define Data P0  //數據端口
  12. sbit Key_Data=P3^3; //d定義keyboard引腳
  13. sbit Key_CLK=P3^2;  //使用中斷
  14. bit BF;
  15. bit Shift;  //定義上檔鍵標志
  16. bit Key_up; //定義通碼斷碼標志
  17. unsigned char Keyv;
  18. unsigned char IntNum;
  19. unsigned char DisNum;
  20. char code cs[]="new mima";
  21. char code sr[]="enter mima";
  22. char code f[]="Data Error";
  23. static uchar data csmm[20];
  24. static uchar data srmm[20];
  25. static int t1=1,t2=1,t3=1,t4=1,t5=1,t6=1,num=0;

  26. //微秒延時函數
  27. void DelayUs(unsigned char us)
  28. {
  29.               unsigned char uscnt;
  30.               uscnt=us>>1;  /12mhz頻率
  31.               while(--uscnt);
  32. }

  33. //毫秒函數的聲明
  34. void DelayMs(unsigned char ms)
  35. {
  36.               while(--ms)
  37.               {
  38.                             DelayUs(250);
  39.                             DelayUs(250);
  40.                             DelayUs(250);
  41.                             DelayUs(250);
  42.               }
  43. }

  44. void delay()
  45. {
  46.    ;;
  47. }

  48. ////////存儲芯片

  49. //開始信號
  50. void start()
  51. {
  52.               sda=1;
  53.               delay();
  54.               scl=1;
  55.               delay();
  56.               sda=0;
  57.               delay();
  58. }

  59. //停止
  60. void stop()
  61. {
  62.               sda=0;
  63.               delay();
  64.               scl=1;
  65.               delay();
  66.               sda=0;
  67.               delay();
  68. }

  69. //應答信號
  70. void respons()
  71. {
  72.               uchar i;
  73.               scl=1;
  74.               delay();
  75.               while((sda==1)&&(i<50)) i++;
  76.               scl=0;
  77.               delay();
  78. }

  79. //初始化
  80. void init()
  81. {
  82.               sda=1;
  83.               delay();
  84.               scl=1;
  85.               delay();
  86. }

  87. void write_byte(uchar date)
  88. {
  89.               uchar i,temp;
  90.               temp=date;
  91.               for(i=0;i<8;i++)
  92.               {
  93.                             temp=temp<<1;
  94.                             scl=0;
  95.                             delay();
  96.                             sda=CY;
  97.                             delay();
  98.                             scl=1;
  99.                             delay();
  100.               }
  101.               scl=0;
  102.               delay(0);
  103.               sda=1;
  104.               delay();
  105. }

  106. uchar read_byte()
  107. {
  108.               uchar i, k;
  109.               scl=0;
  110.               delay();
  111.               sda=1;
  112.               delay();
  113.               for(i=0;i<8;i++)
  114.               {
  115.                             scl=1;
  116.                             delay();
  117.                             k=(k<<1) | sda;
  118.                             scl=0;
  119.                             delay();
  120.               }
  121.               return k;
  122. }

  123. void write_add(uchar address,uchar date)
  124. {
  125.               start();
  126.               write_byte(0xa0);
  127.               respons();
  128.               write_byte(address);
  129.               respons();
  130.               write_byte(date);
  131.               respons();
  132.               stop();
  133. }

  134. void read_add(uchar address)
  135. {
  136.               uchar date;
  137.               start();
  138.               write_byte(0xa0);
  139.               respons();
  140.               write_byte(address);
  141.               respons();
  142.               start();
  143.               write_byte(0xa1);
  144.               respons();
  145.               date=read_byte();
  146.               stop();
  147.               return date;
  148. }


  149. ////////液晶

  150. //寫命令函數
  151. void WriteCommand(unsigned char c)
  152. {
  153.               DelayMs(5);//保證信號穩定
  154.               E=0;
  155.               RS=0;
  156.               _nop_();
  157.               E=1;
  158.               Data=c;
  159.               E=0;
  160. }

  161. //寫數據函數
  162. void WriteData(unsigned char c)
  163. {
  164.               DelayMs(5);//保證信號穩定
  165.               E=0;
  166.               RS=1;
  167.               _nop_();
  168.               E=1;
  169.               Data=c;
  170.               E=0;
  171.               RS=0;
  172. }

  173. //寫入字節函數
  174. void ShowChar(unsigned char pos, unsigned char c)
  175. {
  176.               unsigned char p;
  177.               if(pos>=0x10)
  178.                             p=pos+0xb0; //是第二行則命令代碼高四位為0xc
  179.               else
  180.                             p=pos+0x80; //是第二行則命令代碼高四位為0x8
  181.               WriteCommand(p);  //寫命令
  182.               WriteData();               //寫數據              
  183. }

  184. //寫入字符串函數
  185. void ShowString(unsigned char line,char *ptr )
  186. {
  187.               unsigned char l,i;
  188.               l=line<<4;
  189.               for(i=0;i<16;i++)
  190.               {
  191.                             Show (l++,*(ptr+i)); //循環顯示16個字符                           
  192.               }
  193. }

  194. //初始化函數
  195. void InitLcd()
  196. {
  197.               DelayMs(15);
  198.               WriteCommand(0x38);  //display mode
  199.               WriteCommand(0x38);  //display mode
  200.               WriteCommand(0x38);  //display mode
  201.               WriteCommand(0x06);  //顯示光標移動的位置
  202.               WriteCommand(0x0f);  //顯示開及光標設置
  203.               WriteCommand(0x01);  //清屏            
  204. }

  205. ///////////鍵盤



  206. #include <reg52.h>
  207. #include <stdio.h>  
  208. #include <intrins.h>
  209. #define uchar unsigned char
  210. #define uint unsigned int
  211. sbit scl=P3^6;  //24C02時鐘線的接口
  212. sbit sda=P3^7; //24C02數據線的接口
  213. sbit fmp=P1^7;
  214. sbit RS=P1^0;  //pin4
  215. sbit E=P1^1;  // pin6
  216. #define Data P0  //數據端口
  217. sbit Key_Data=P3^3; //d定義keyboard引腳
  218. sbit Key_CLK=P3^2;  //使用中斷
  219. bit BF;
  220. bit Shift;  //定義上檔鍵標志
  221. bit Key_up; //定義通碼斷碼標志
  222. unsigned char Keyv;
  223. unsigned char IntNum;
  224. unsigned char DisNum;
  225. char code cs[]="new mima";
  226. char code sr[]="enter mima";
  227. char code f[]="Data Error";
  228. static uchar data csmm[20];
  229. static uchar data srmm[20];
  230. static int t1=1,t2=1,t3=1,t4=1,t5=1,t6=1,num=0;

  231. //微秒延時函數
  232. void DelayUs(unsigned char us)
  233. {
  234.               unsigned char uscnt;
  235.               uscnt=us>>1;  /12mhz頻率
  236.               while(--uscnt);
  237. }

  238. //毫秒函數的聲明
  239. void DelayMs(unsigned char ms)
  240. {
  241.               while(--ms)
  242.               {
  243.                             DelayUs(250);
  244.                             DelayUs(250);
  245.                             DelayUs(250);
  246.                             DelayUs(250);
  247.               }
  248. }

  249. void delay()
  250. {
  251.    ;;
  252. }

  253. ////////存儲芯片

  254. //開始信號
  255. void start()
  256. {
  257.               sda=1;
  258.               delay();
  259.               scl=1;
  260.               delay();
  261.               sda=0;
  262.               delay();
  263. }

  264. //停止
  265. void stop()
  266. {
  267.               sda=0;
  268.               delay();
  269.               scl=1;
  270.               delay();
  271.               sda=0;
  272.               delay();
  273. }

  274. //應答信號
  275. void respons()
  276. {
  277.               uchar i;
  278.               scl=1;
  279.               delay();
  280.               while((sda==1)&&(i<50)) i++;
  281.               scl=0;
  282.               delay();
  283. }

  284. //初始化
  285. void init()
  286. {
  287.               sda=1;
  288.               delay();
  289.               scl=1;
  290.               delay();
  291. }

  292. void write_byte(uchar date)
  293. {
  294.               uchar i,temp;
  295.               temp=date;
  296.               for(i=0;i<8;i++)
  297.               {
  298.                             temp=temp<<1;
  299.                             scl=0;
  300.                             delay();
  301.                             sda=CY;
  302.                             delay();
  303.                             scl=1;
  304.                             delay();
  305.               }
  306.               scl=0;
  307.               delay(0);
  308.               sda=1;
  309.               delay();
  310. }

  311. uchar read_byte()
  312. {
  313.               uchar i, k;
  314.               scl=0;
  315.               delay();
  316.               sda=1;
  317.               delay();
  318.               for(i=0;i<8;i++)
  319.               {
  320.                             scl=1;
  321.                             delay();
  322.                             k=(k<<1) | sda;
  323.                             scl=0;
  324.                             delay();
  325.               }
  326.               return k;
  327. }

  328. void write_add(uchar address,uchar date)
  329. {
  330.               start();
  331.               write_byte(0xa0);
  332.               respons();
  333.               write_byte(address);
  334.               respons();
  335.               write_byte(date);
  336.               respons();
  337.               stop();
  338. }

  339. void read_add(uchar address)
  340. {
  341.               uchar date;
  342.               start();
  343.               write_byte(0xa0);
  344.               respons();
  345.               write_byte(address);
  346.               respons();
  347.               start();
  348.               write_byte(0xa1);
  349.               respons();
  350.               date=read_byte();
  351.               stop();
  352.               return date;
  353. }


  354. ////////液晶

  355. //寫命令函數
  356. void WriteCommand(unsigned char c)
  357. {
  358.               DelayMs(5);//保證信號穩定
  359.               E=0;
  360.               RS=0;
  361.               _nop_();
  362.               E=1;
  363.               Data=c;
  364.               E=0;
  365. }

  366. //寫數據函數
  367. void WriteData(unsigned char c)
  368. {
  369.               DelayMs(5);//保證信號穩定
  370.               E=0;
  371.               RS=1;
  372.               _nop_();
  373.               E=1;
  374.               Data=c;
  375.               E=0;
  376.               RS=0;
  377. }

  378. //寫入字節函數
  379. void ShowChar(unsigned char pos, unsigned char c)
  380. {
  381.               unsigned char p;
  382.               if(pos>=0x10)
  383.                             p=pos+0xb0; //是第二行則命令代碼高四位為0xc
  384.               else
  385.                             p=pos+0x80; //是第二行則命令代碼高四位為0x8
  386.               WriteCommand(p);  //寫命令
  387.               WriteData();               //寫數據              
  388. }

  389. //寫入字符串函數
  390. void ShowString(unsigned char line,char *ptr )
  391. {
  392.               unsigned char l,i;
  393.               l=line<<4;
  394.               for(i=0;i<16;i++)
  395.               {
  396.                             Show (l++,*(ptr+i)); //循環顯示16個字符                           
  397.               }
  398. }

  399. //初始化函數
  400. void InitLcd()
  401. {
  402.               DelayMs(15);
  403.               WriteCommand(0x38);  //display mode
  404.               WriteCommand(0x38);  //display mode
  405.               WriteCommand(0x38);  //display mode
  406.               WriteCommand(0x06);  //顯示光標移動的位置
  407.               WriteCommand(0x0f);  //顯示開及光標設置
  408.               WriteCommand(0x01);  //清屏            
  409. }

  410. ///////////鍵盤







  411. #include <reg52.h>
  412. #include <stdio.h>  
  413. #include <intrins.h>
  414. #define uchar unsigned char
  415. #define uint unsigned int
  416. sbit scl=P3^6;  //24C02時鐘線的接口
  417. sbit sda=P3^7; //24C02數據線的接口
  418. sbit fmp=P1^7;
  419. sbit RS=P1^0;  //pin4
  420. sbit E=P1^1;  // pin6
  421. #define Data P0  //數據端口
  422. sbit Key_Data=P3^3; //d定義keyboard引腳
  423. sbit Key_CLK=P3^2;  //使用中斷
  424. bit BF;
  425. bit Shift;  //定義上檔鍵標志
  426. bit Key_up; //定義通碼斷碼標志
  427. unsigned char Keyv;
  428. unsigned char IntNum;
  429. unsigned char DisNum;
  430. char code cs[]="new mima";
  431. char code sr[]="enter mima";
  432. char code f[]="Data Error";
  433. static uchar data csmm[20];
  434. static uchar data srmm[20];
  435. static int t1=1,t2=1,t3=1,t4=1,t5=1,t6=1,num=0;

  436. //微秒延時函數
  437. void DelayUs(unsigned char us)
  438. {
  439.               unsigned char uscnt;
  440.               uscnt=us>>1;  /12mhz頻率
  441.               while(--uscnt);
  442. }

  443. //毫秒函數的聲明
  444. void DelayMs(unsigned char ms)
  445. {
  446.               while(--ms)
  447.               {
  448.                             DelayUs(250);
  449.                             DelayUs(250);
  450.                             DelayUs(250);
  451.                             DelayUs(250);
  452.               }
  453. }

  454. void delay()
  455. {
  456.    ;;
  457. }

  458. ////////存儲芯片

  459. //開始信號
  460. void start()
  461. {
  462.               sda=1;
  463.               delay();
  464.               scl=1;
  465.               delay();
  466.               sda=0;
  467.               delay();
  468. }

  469. //停止
  470. void stop()
  471. {
  472.               sda=0;
  473.               delay();
  474.               scl=1;
  475.               delay();
  476.               sda=0;
  477.               delay();
  478. }

  479. //應答信號
  480. void respons()
  481. {
  482.               uchar i;
  483.               scl=1;
  484.               delay();
  485.               while((sda==1)&&(i<50)) i++;
  486.               scl=0;
  487.               delay();
  488. }

  489. //初始化
  490. void init()
  491. {
  492.               sda=1;
  493.               delay();
  494.               scl=1;
  495.               delay();
  496. }

  497. void write_byte(uchar date)
  498. {
  499.               uchar i,temp;
  500.               temp=date;
  501.               for(i=0;i<8;i++)
  502.               {
  503.                             temp=temp<<1;
  504.                             scl=0;
  505.                             delay();
  506.                             sda=CY;
  507.                             delay();
  508.                             scl=1;
  509.                             delay();
  510.               }
  511.               scl=0;
  512.               delay(0);
  513.               sda=1;
  514.               delay();
  515. }

  516. uchar read_byte()
  517. {
  518.               uchar i, k;
  519.               scl=0;
  520.               delay();
  521.               sda=1;
  522.               delay();
  523.               for(i=0;i<8;i++)
  524.               {
  525.                             scl=1;
  526.                             delay();
  527.                             k=(k<<1) | sda;
  528.                             scl=0;
  529.                             delay();
  530.               }
  531.               return k;
  532. }

  533. void write_add(uchar address,uchar date)
  534. {
  535.               start();
  536.               write_byte(0xa0);
  537.               respons();
  538.               write_byte(address);
  539.               respons();
  540.               write_byte(date);
  541.               respons();
  542.               stop();
  543. }

  544. void read_add(uchar address)
  545. {
  546.               uchar date;
  547.               start();
  548.               write_byte(0xa0);
  549.               respons();
  550.               write_byte(address);
  551.               respons();
  552.               start();
  553.               write_byte(0xa1);
  554.               respons();
  555.               date=read_byte();
  556.               stop();
  557.               return date;
  558. }


  559. ////////液晶

  560. //寫命令函數
  561. void WriteCommand(unsigned char c)
  562. {
  563.               DelayMs(5);//保證信號穩定
  564.               E=0;
  565.               RS=0;
  566.               _nop_();
  567.               E=1;
  568.               Data=c;
  569.               E=0;
  570. }

  571. //寫數據函數
  572. void WriteData(unsigned char c)
  573. {
  574.               DelayMs(5);//保證信號穩定
  575.               E=0;
  576.               RS=1;
  577.               _nop_();
  578.               E=1;
  579. ……………………

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

所有資料51hei提供下載:
電子鎖的制作20171202.docx (3.52 MB, 下載次數: 16)
1205.zip (6.69 KB, 下載次數: 14)


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕精品一区二区三区精品 | 性一爱一乱一交一视频 | 成人免费视频网站在线观看 | 福利一区二区在线 | 龙珠z在线观看 | 美女天天操 | 黄色成人在线 | 国产高清在线精品一区二区三区 | 91久久久久久久久久久 | 日韩a在线| 精品96久久久久久中文字幕无 | 国产在线h | 羞羞视频在线观免费观看 | 精品国产一区二区三区性色av | 欧美一区二区三区在线观看 | 在线免费观看视频你懂的 | 性生生活大片免费看视频 | 992人人草| 精品久久久久久久久久 | 亚洲日本成人 | 中文字幕在线剧情 | 亚洲最大的黄色网址 | 亚洲欧洲在线视频 | 青青久草 | 久久久久久国产精品 | 国产91视频一区二区 | 日本在线视频一区二区 | 97视频网站| 欧美激情99| 九九九久久国产免费 | 亚洲 欧美 另类 综合 偷拍 | 亚洲国产精品福利 | 亚洲电影第1页 | 亚洲一区在线日韩在线深爱 | 国产精品高清在线 | 不卡一区二区三区四区 | 国产特级毛片 | 欧美日韩国产在线 | 亚洲一区毛片 | 久久综合一区二区三区 | 日韩免费激情视频 |