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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

紅外電子鎖

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:85234 發(fā)表于 2015-7-21 18:14 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
自己做的,實測可用,用的是carMP3這種的21鍵的遙控器

紅外電子鎖(不復(fù)位,改密碼).zip

42.45 KB, 下載次數(shù): 37, 下載積分: 黑幣 -5

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的積分獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:1 發(fā)表于 2015-7-22 00:14 | 只看該作者
  1. #include "reg51.h"
  2. #include "intrins.h"
  3. #include"absacc.h"
  4. #include"math.h"
  5. #include"string.h"
  6. typedef unsigned char BYTE;
  7. typedef unsigned int   WORD;
  8. BYTE hdata=0x10;
  9. BYTE ldata=0x10;
  10. BYTE Ir_Buf[4]; //用于保存解碼結(jié)果
  11. BYTE temp;
  12. BYTE key=0;
  13. BYTE num;
  14. BYTE dis_buf;
  15. BYTE Userpassword[10]="123";
  16. BYTE inputpassword[10]="";
  17. BYTE RXDDATA[]={0x00,0x00,0x00,0x00};
  18. BYTE code RecvData[]={0x16,0x0C,0x18,0x5E,0x08,0x1C,0x5A,0x42,0x52,0x4A};
  19. BYTE IRCOM[7];
  20. int a;a=0;
  21. int j;j=4;
  22. int w=0;
  23. int o=4;
  24. int c=0;
  25. sbit Ir_Pin=P3^3;
  26. sbit led2=P2^2;
  27. sbit led1=P2^1;
  28. sbit beep=P2^0;
  29. /*  液晶1602口地址*/
  30. #define wr_com XBYTE[0xC000] //寫命令
  31. #define wr_data XBYTE[0xC100] //寫數(shù)據(jù)
  32. #define rd_com XBYTE[0xC200] //讀命令
  33. #define rd_data XBYTE[0xC300] //讀數(shù)據(jù)
  34. void Delay(WORD n);
  35. void Delay2(WORD n);
  36. void ShowResult(BYTE ch);
  37. void lcd_init(void); // lcd初始化
  38. void write_cmd(BYTE cmd); // lcd寫命令
  39. //void write_string(unsigned char *s); // 寫字符串
  40. void write_data(BYTE dat) ; // 寫數(shù)據(jù)
  41. void set_display_place(BYTE line,column);
  42. void write_string_lcd(BYTE line,column,unsigned char *string);
  43. /********************************************************************
  44. Function name: write_cmd
  45. Descriptions:  向lcd輸入指令
  46. ********************************************************************/
  47. void write_cmd(BYTE cmd)
  48. {
  49. BYTE dl;
  50. do {
  51. dl=rd_com;
  52. } while((dl&0x80)!=0); //判忙
  53. wr_com= cmd;
  54. Delay(1);
  55. }
  56. /*******************************************************************
  57. Function name: write_data
  58. Descriptions:  寫入數(shù)據(jù)
  59. *******************************************************************/
  60. void write_data(BYTE dat)  
  61. {
  62. BYTE dl;
  63. do {
  64. dl=rd_com;
  65. } while((dl&0x80)!=0); //判忙
  66. wr_data= dat;
  67. Delay(1);
  68. }
  69. /********************************************************************
  70. Function name: write_string
  71. Descriptions:  寫入字符串
  72. ********************************************************************/
  73. void write_string(BYTE *s)
  74. {
  75. while(*s != '\0') //'\0'為字符串結(jié)束標(biāo)志
  76. {
  77. write_data(*s);
  78. s++;
  79. }
  80. }
  81. /***************************************************************
  82. Function name: set_display_place
  83. Descriptions:  設(shè)置字符的顯示位置
  84. **************************************************************/
  85. void set_display_place(BYTE line,column)
  86. {
  87. BYTE address;
  88. if(line == 1)
  89. {
  90. address = 0x80 + column;
  91. }
  92. else if(line == 2)
  93. {
  94. address = 0xc0 + column;
  95. }
  96. write_cmd(address);
  97. }
  98. /*****************************************************************
  99. Function name:  將字符串寫到指定的位置
  100. Descriptions:  將字符串顯示在lcd的特定位置
  101. *****************************************************************/
  102. void write_string_lcd(BYTE line,column,unsigned char *string)
  103. {
  104. set_display_place(line,column);
  105. write_string(string);
  106. Delay(1);
  107. }
  108. /***************************************************
  109. ************液晶模塊初始化******************************
  110. ****************************************************/
  111. void lcd_init(void)
  112. {
  113. write_cmd(0x38);//
  114. write_cmd(0x38);//
  115. write_cmd(0x06);//
  116. write_cmd(0x0c);//
  117. write_cmd(0x01);//
  118. }
  119. void crti(unsigned long dat)  
  120. {
  121. unsigned char dhi;
  122. unsigned char dli;
  123. unsigned char ddi;
  124. unsigned char dei;
  125. unsigned long datah;
  126. unsigned long datal;
  127. datah=dat;
  128. dhi=0;
  129. if (datah>=10)
  130. {
  131. do
  132. {
  133. datah/=10;
  134. dhi++;
  135. }while(datah>=10);
  136. datah=dat;
  137. ddi=dhi;
  138. for (dli=0;dli<dhi;dli++)
  139. {
  140. datal=1;
  141. for (dei=0;dei<ddi;dei++)
  142. {
  143. datal*=10;
  144. }
  145. datah=dat/datal;
  146. dat=dat%datal;
  147. datah+=0x30;
  148. write_data(datah);
  149. ddi--;
  150. }
  151. dat+=0x30;
  152. write_data(dat);
  153. }
  154. else
  155. {
  156. dat=dat+0x30;
  157. write_data(dat);
  158. }
  159. }
  160. void Delay(WORD n)
  161. {
  162. WORD x;
  163. while(n--)
  164. {
  165. x=500;  while(x--);
  166. }
  167. }
  168. void Delay2(WORD n)
  169. {
  170. WORD x;
  171. while(n--)
  172. {
  173. x=5000;  while(x--);
  174. }
  175. }
  176. void clear()
  177. {write_string_lcd(2,4, "               ");
  178. }

  179. ////////////////////////////////////////
  180. void int1_init(void)
  181. {
  182. IT1 = 1; //下降沿有效
  183. EX1 = 1;
  184. EA = 1;
  185. TMOD = 0x01;
  186. }
  187. /*獲取低電平時間*/
  188. unsigned int Ir_Get_Low()
  189. {
  190. TL0 = 0;
  191. TH0 = 0;
  192. TR0 = 1;
  193. while (!Ir_Pin && (TH0&0x80)==0);  
  194.               
  195. TR0 = 0;           
  196. return (TH0 * 256 + TL0);
  197. }
  198. /* 獲取高電平時間*/
  199. unsigned int Ir_Get_High()
  200. {
  201. TL0 = 0;
  202. TH0 = 0;
  203. TR0 = 1;
  204. while (Ir_Pin && (TH0&0x80)==0);
  205. TR0 = 0;
  206. return (TH0 * 256 + TL0);
  207. }
  208. int fuwei()
  209. {Delay2(15);
  210. //
  211. //

  212.         if(key==16)
  213.         return 0;
  214.         else return 1;
  215.        
  216. }
  217. //*******************************************
  218. void PC838()
  219. { int1_init();

  220. }
  221. void int1_isr() interrupt 2
  222. {
  223. unsigned int temp;
  224. char i,j;


  225. temp = Ir_Get_Low();
  226. if ((temp < 7833) || (temp > 8755))  //引導(dǎo)脈沖低電平8500~9500us
  227. return;
  228. temp = Ir_Get_High();
  229. if ((temp < 3686) || (temp > 4608))  //引導(dǎo)脈沖高電平4000~5000us
  230. return;
  231. for (i=0; i<4; i++) //4個字節(jié)
  232. {
  233. for (j=0; j<8; j++) //每個字節(jié)8位
  234. {
  235. temp = Ir_Get_Low();
  236. if ((temp < 184) || (temp > 737)) //200~800us
  237. return;
  238. temp = Ir_Get_High();
  239. if ((temp < 184) || (temp > 1843)) //200~2000us
  240. return;
  241. Ir_Buf[ i] >>= 1;
  242. if (temp > 1032) //1120us
  243. Ir_Buf[ i] |= 0x80;
  244. }
  245. }
  246. if( Ir_Buf[2]=~ Ir_Buf[3])  //驗證鍵數(shù)據(jù)碼和其反碼是否相等,一般情況下不必驗證用戶碼
  247. {
  248. if(Ir_Buf[2]==0x16)  key=0; //a[0]=00h;a[1]=ffh
  249. if(Ir_Buf[2]==0x0c)  key=1; //a[0]=00h;a[1]=ffh
  250. if(Ir_Buf[2]==0x18)  key=2; //a[0]=00h;a[1]=ffh
  251. if(Ir_Buf[2]==0x5E)  key=3;
  252. if(Ir_Buf[2]==0x08)  key=4;
  253. if(Ir_Buf[2]==0x1C)  key=5;
  254. if(Ir_Buf[2]==0x5A)  key=6;
  255. if(Ir_Buf[2]==0x42)  key=7;
  256. if(Ir_Buf[2]==0x52)  key=8;
  257. if(Ir_Buf[2]==0x4A)  key=9;
  258. if(Ir_Buf[2]==0x45)  key=10; //ON/OFF
  259. if(Ir_Buf[2]==0x46)  key=11; //MODE
  260. if(Ir_Buf[2]==0x47)  key=12; //靜音
  261. if(Ir_Buf[2]==0x44)  key=13; //暫停
  262. if(Ir_Buf[2]==0x40)  key=14; //下一曲
  263. if(Ir_Buf[2]==0x43)  key=15; //上一曲
  264. if(Ir_Buf[2]==0x07)  key=16; //EQ
  265. dis_buf = key;                     //鍵值入顯示緩存
  266.      //dis_buf = dis_buf & 0x0f;
  267. if(dis_buf>9)               //轉(zhuǎn)換為ASCII碼
  268.       dis_buf = dis_buf+0x37;
  269.      else
  270.           dis_buf = dis_buf+0x30;
  271.   //  beep();        //蜂鳴器響一聲 提示解碼成功



  272. }

  273. switch(key)
  274.         {case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:
  275.         {inputpassword[a]=key+'0';
  276.         inputpassword[a+1]='\0';
  277.         a++;
  278.         set_display_place(2,o);
  279.         write_data(dis_buf);
  280.         o++;
  281.         }break;
  282.         case 10:
  283.          o++;
  284.                         if(strcmp(inputpassword,Userpassword)==0)
  285.                         {
  286.                                                         write_string_lcd(2,0, "Unlock  OK!        ");
  287.                                                         write_string_lcd(1,0, "Welcome         ");

  288.                                                         c=1;
  289.                                                         inputpassword[0]="a";                                                                       
  290.                                                         a=0;
  291.                                                         led1=0;               
  292.                                                         o=4;
  293.                                                         w=0;
  294.                                                         Delay2(200);
  295.                                                         clear();
  296.                                                         led1=1;
  297.                                                         //write_string_lcd(1,0, "hello!             ");
  298.                                                 //        write_string_lcd(2,0, "key:              ");
  299.                                                        
  300.                         }
  301.                         else {w++;
  302.                                        
  303.                                         if(w<3)
  304.                                         {        write_string_lcd(2,4, " error          ");
  305.                                         inputpassword[10]="";
  306.                                         a=0;
  307.                                         led2=0;
  308.                                         Delay2(60);clear();o=4;c=0;led2=1;}
  309.                                         else{//
  310.                                         while(fuwei()!=0)
  311.                                         //while(1)
  312.                                         {
  313.                                         write_string_lcd(2,4, " shutdown!!!          ");beep=0;
  314.                                         //
  315.                                         }                                       
  316.                                         inputpassword[10]="";
  317.                                         clear();
  318.                                         beep=1;
  319.                                         a=0;       
  320.                                         o=4;
  321.                                         w=0;
  322.                                         c=0;}
  323.                                         //Delay2(60);
  324.                                         }
  325.                                         //clear();
  326.                                         break;
  327.           case 12:
  328.                 if(c==0) {write_string_lcd(2,4, "can't change  ");Delay2(60);clear();o=4;a=0;}
  329.                 else
  330.         {       
  331.                
  332.                 Userpassword[0]=inputpassword[0];
  333.                 Userpassword[1]=inputpassword[1];
  334.                 Userpassword[2]=inputpassword[2];
  335.                         Userpassword[3]=inputpassword[3];
  336.                                 Userpassword[4]=inputpassword[4];
  337.                                         Userpassword[5]=inputpassword[5];
  338.                                                 Userpassword[6]=inputpassword[6];
  339.                                                         Userpassword[7]=inputpassword[7];
  340.                                                                 Userpassword[8]=inputpassword[8];
  341.                                                                         Userpassword[9]=inputpassword[9];
  342.                                                                                 Userpassword[10]=inputpassword[10];
  343.                 beep=1;
  344.                 o=4;
  345.                 w=0;
  346.                 c=0;
  347.                         a=0;write_string_lcd(2,4, "change ok! "); Delay2(60);clear();o=4;}
  348.                 break;
  349.         case 11:
  350.         {clear();
  351.         inputpassword[10]="";
  352.         c=0;
  353.         o=4;
  354.         a=0;}break;
  355.        

  356.         }


  357. //EX1=0;
  358. }
  359. ////////////////////////////////////////




  360. void main()
  361. {j=4;
  362. lcd_init();
  363. //SP=0x60;
  364. beep= 1;
  365. PC838();                                       //設(shè)定外部中斷1為低邊緣觸發(fā)類型
  366.                                               //總中斷開啟


  367.   while(1)
  368. {
  369. if(c==1) write_string_lcd(1,7, "C");
  370.         else write_string_lcd(1,7, " ");       
  371.         write_string_lcd(1,10, "warn:");
  372. set_display_place(1,15);
  373.         write_data(0x30+w);
  374. write_string_lcd(1,0, "hello! ");   
  375. write_string_lcd(2,0, "key:");
  376. write_string_lcd(2,o, "_");//光標(biāo)閃爍
  377. Delay2(15);
  378. write_string_lcd(2,o," ");
  379. Delay2(15);

  380. //
  381. //
  382. //
  383. //if               
  384.        
  385. //
  386.        
  387.         //write_data(ldata+0x30);
  388.         // j++;        
  389.                                
  390.        
  391.                          }
  392.                          }

復(fù)制代碼
回復(fù)

使用道具 舉報

板凳
ID:241829 發(fā)表于 2017-10-29 11:09 | 只看該作者
有沒有仿真圖?
回復(fù)

使用道具 舉報

地板
ID:221012 發(fā)表于 2017-10-31 19:31 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一本在线 | 一区二区三区欧美在线 | 黄色中文字幕 | 9久久婷婷国产综合精品性色 | 国产一区二区自拍 | 久久av一区二区 | 国产91久久久久蜜臀青青天草二 | 永久免费视频 | 91香蕉视频在线观看 | 992tv人人草 久久精品超碰 | av午夜电影 | 国产精品一区二区av | 成人免费在线播放视频 | 久久在线免费 | 91久久久久久 | 色在线免费视频 | 久久人人爽人人爽人人片av免费 | 久久精品免费观看 | 久久国色| 午夜男人的天堂 | 日韩精品 电影一区 亚洲 | 国产91久久久久久久免费 | 国产三级精品视频 | 欧美日韩中文在线 | 综合久久一区 | 91精品国产91久久久久久最新 | 精品国产欧美一区二区三区成人 | 91精品国产色综合久久不卡蜜臀 | 日韩av一区二区在线观看 | 中文字幕一区二区三区四区五区 | 99re视频这里只有精品 | 黑人一级片视频 | 欧美婷婷| 欧美激情久久久 | 妖精视频一区二区三区 | 免费在线观看黄网站 | 草久久| 国产在线一区二区 | 久久99精品国产自在现线小黄鸭 | 久久精品电影 | 亚洲成人免费网址 |