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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1635|回復: 7
收起左側

基于c51單片機的密碼鎖程序 編譯錯誤

[復制鏈接]
ID:655402 發表于 2019-12-13 14:50 | 顯示全部樓層 |閱讀模式
編譯時為什么顯示缺少原函數??
在        if(compare()==-1)  那個地方

  1. #include "reg51.h"

  2. //定義IO口
  3. sbit Beep=P3^6;
  4. sbit LED1=P3^7;


  5. //定義全局變量
  6. int count=-1;
  7. int count1=0;      //用于記錄輸入密碼錯誤的次數
  8. int counter;       //用于計數是定時器能夠定時1分鐘
  9. int counter1=0;
  10. int temp=99,signal=0;


  11. //初始化密碼
  12. int key_word[4]={99,99,99,99};

  13. //用于接收按鍵接收的值
  14. int   get_word[4]={0,0,0,0};
  15. char  key_buf[]={0xee,0xde,0xbe,0x7e,
  16.                                 0xed,0xdd,0xbd,0x7d,
  17.                                 0xeb,0xdb,0xbb,0x7b,
  18.                 0xe7,0xd7,0xb7,0x77};       //鍵模
  19. //LED字模
  20. char led[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9

  21. //函數聲明
  22. void set_key();
  23. void show1(int);
  24. void open_key();
  25. void input_key();
  26. void show2(int);
  27. void show3();
  28. void show4();
  29. int  get_key();

  30. //延時函數
  31. void delay(int x)
  32. {
  33.         int j=0;
  34.         for(;x>0;x--)
  35.                 for(j=0;j<125;j++);
  36. }


  37. //設定密碼功能
  38. void set_key()
  39. {
  40.         int i;
  41.         for(i=0;i<4;i++)
  42.         {        
  43.                 while(get_key()==-1)//等待按鍵按下
  44.                 {
  45.                         if(count!=0&&count!=-1)
  46.                         {
  47.                                 show1(count);//顯示設置的密碼
  48.                         }
  49.                 }
  50.                 if(signal==1)//將按鍵的值保存
  51.                 {
  52.                         key_word[i]=get_key();
  53.                         count++;
  54.                         show1(count);
  55.                         signal=0;
  56.                         temp=99;
  57.                 }
  58.                 while(temp==get_key())//一旦長時間按按鍵,就一直顯示密碼
  59.                 {        
  60.                         show1(count);
  61.                 }
  62.         }
  63. }


  64. //輸入密碼
  65. void input_key()
  66. {
  67.         int i;
  68.         for(i=0;i<4;i++)
  69.         {        
  70.                 while(get_key()==-1)//等待按鍵按下
  71.                 {
  72.                         if(count!=0&&count!=-1)
  73.                         {
  74.                                 show2(count);//顯示設置的密碼
  75.                         }
  76.                 }
  77.                 if(signal==1)//將按鍵的值保存
  78.                 {
  79.                         get_word[i]=get_key();
  80.                         count++;
  81.                         show2(count);
  82.                         signal=0;
  83.                         //temp=99;
  84.                 }
  85.                 while(temp==get_key())//一旦長時間按按鍵,就一直顯示密碼
  86.                 {        
  87.                         show2(count);
  88.                 }
  89.         }
  90. }


  91. //顯示輸入的密碼
  92. void show2(int count)
  93. {
  94.         if(count==0)//顯示1位數據
  95.         {
  96.                 P1=0x0e;
  97.                 P0=led[get_word[0]];
  98.         }
  99.         if(count==1)//顯示2位數據
  100.         {
  101.                 P1=0x0e;
  102.                 P0=led[get_word[0]];
  103.                 delay(10);
  104.                 P1=0x0d;
  105.                 P0=led[get_word[1]];
  106.                 delay(10);
  107.         }
  108.         
  109.         if(count==2)//顯示3位數據
  110.         {
  111.                 P1=0x0e;
  112.                 P0=led[get_word[0]];
  113.                 delay(10);
  114.                 P1=0x0d;
  115.                 P0=led[get_word[1]];
  116.                 delay(10);
  117.                 P1=0x0b;
  118.                 P0=led[get_word[2]];
  119.                 delay(10);
  120.         }
  121.         if(count==3)//顯示4位數據
  122.         {
  123.                         P1=0x0e;
  124.                         P0=led[get_word[0]];
  125.                         delay(10);
  126.                         P1=0x0d;
  127.                         P0=led[get_word[1]];
  128.                         delay(10);
  129.                         P1=0x0b;
  130.                         P0=led[get_word[2]];
  131.                         delay(10);
  132.                         P1=0x07;
  133.                         P0=led[get_word[3]];
  134.                         delay(10);
  135.                         P0=0;
  136.                         //count=-1;
  137.                         signal=0;
  138.         }
  139. }



  140. //顯示設置的密碼
  141. void show1(int count)
  142. {
  143.         int i;
  144.         if(count==0)//顯示一位數據
  145.         {
  146.                 P1=0x0e;
  147.                 i=key_word[0];
  148.                 P0=led[i];
  149.         }
  150.         if(count==1)//顯示兩位數據
  151.         {
  152.                 P1=0x0e;
  153.                 P0=led[key_word[0]];
  154.                 delay(10);
  155.                 P1=0x0d;
  156.                 P0=led[key_word[1]];
  157.                 delay(10);
  158.         }
  159.         
  160.         if(count==2)//顯示三位數據
  161.         {
  162.                 P1=0x0e;
  163.                 P0=led[key_word[0]];
  164.                 delay(10);
  165.                 P1=0x0d;
  166.                 P0=led[key_word[1]];
  167.                 delay(10);
  168.                 P1=0x0b;
  169.                 P0=led[key_word[2]];
  170.                 delay(10);
  171.         }
  172.         if(count==3)//顯示四位數據
  173.         {
  174.                 P1=0x0e;
  175.                 P0=led[key_word[0]];
  176.                 delay(10);
  177.                 P1=0x0d;
  178.                 P0=led[key_word[1]];
  179.                 delay(10);
  180.                 P1=0x0b;
  181.                 P0=led[key_word[2]];
  182.                 delay(10);
  183.                 P1=0x07;
  184.                 P0=led[key_word[3]];
  185.                 delay(10);
  186.                 P0=0;
  187.                 count=-1;
  188.                 signal=0;
  189.         }
  190. }


  191. //主函數
  192. void main()
  193. {        
  194.         int op;
  195.         LED1=0;
  196.         Beep=1;
  197.         while(1)
  198.         {
  199.                 op=get_key();
  200.                 switch(op)
  201.                 {
  202.                         case 13:
  203.                                         while(temp==get_key());       //等待選擇功能按鍵釋放后再進行設置密碼
  204.                                         count=-1;                     //在使用標志位時將標志位進行初始化
  205.                                         signal=1;
  206.                                         set_key();
  207.                                         break;
  208.                         
  209.                         case 14:
  210.                                         while(temp==get_key());
  211.                                         count=-1;                    //初始化標志位
  212.                                         signal=1;
  213.                                         input_key();
  214.                                         while(get_key()!=15)         //當按下登陸鍵,輸入的密碼不再顯示
  215.                                         {
  216.                                                 show2(count);
  217.                                         }
  218.                                         if(compare()==-1)
  219.                                         {
  220.                                                 count1++;
  221.                                                 while(get_key()!=14&&count1!=3)
  222.                                                 {
  223.                                                         show3();     //密碼錯誤,顯示ERR
  224.                                                 }
  225.                                                 P0=0;            //按下輸入密碼鍵后,清屏
  226.                                                 if(count1==3)
  227.                                                 {
  228.                                                         //開啟定時器中斷
  229.                                                         TMOD=0x01;
  230.                                                         TH0=0x9E;//裝載初值25ms
  231.                                                         TL0=0x58;
  232.                                                         EA=1; //開總中斷
  233.                                                         ET0=1;//開定時器0
  234.                                                         TR0=1;  //開啟定時器0
  235.                                                         while(counter1<60);//只有當蜂鳴器響完一分鐘之后,才能退出循環
  236.                                                         TR0=0;//關閉定時器
  237.                                              }
  238.                                         }
  239.                                         else
  240.                                         {        
  241.                                                 LED1=1;//當輸入密碼正確時,開啟LED燈
  242.                                                 while(get_key()!=12)//直到按下退出鍵,屏幕一直顯示on
  243.                                                 {
  244.                                                         show4();
  245.                                                 }
  246.                                                 LED1=0;//退出后關閉LED燈
  247.                                                 P0=0;//清屏
  248.                                         }
  249.                                         break;
  250.                         default:break;               
  251.                 }
  252.         }

  253. }



  254. //獲取鍵值
  255. int get_key()
  256. {
  257.         char key_scan[]={0xef,0xdf,0xbf,0x7f};
  258.         int i=0;
  259.         int j=0;
  260.         for(i=0;i<4;i++)//判斷
  261.         {
  262.                 P2=key_scan[i];
  263.                 if((P2&0x0f)!=0x0f)
  264.                 {
  265.                         for(j=0;j<16;j++)
  266.                         {
  267.                                 if(key_buf[j]==P2)
  268.                                 {
  269.                                         if(temp!=key_buf[j])//一旦長時間按鍵,將只會讀取一次按鍵的值
  270.                                         {
  271.                                                 signal=1;
  272.                                                 temp=j;
  273.                                                 return j;
  274.                                         }
  275.                                         else signal=0;
  276.                                 }
  277.                         }
  278.                 }
  279.         }
  280.         return -1;
  281. }




  282. //輸入的密碼和設定的密碼比較
  283. int compare()
  284. {
  285.         int i;
  286.         for(i=0;i<4;i++)
  287.         {
  288.                 if(get_word[i]!=key_word[i])
  289.                         return -1;     //輸入密碼不等于設定的密碼返回-1
  290.         }
  291.         return 1;     //輸入的密碼等于設定密碼返回1
  292. }

  293. void show3()//顯示ERR
  294. {
  295.         P1=0x0e;
  296.         P0=0x79;
  297.         delay(10);
  298.         P1=0x0d;
  299.         P0=0x77;
  300.         delay(10);
  301.         P1=0x0b;
  302.         delay(10);
  303. }
  304. void show4()//顯示on
  305. {
  306.         P1=0x0e;
  307.         P0=0x5c;
  308.         delay(10);
  309.         P1=0x0d;
  310.         P0=0x54;
  311.         delay(10);
  312. }



  313. //定時器中斷函數,定時1分鐘
  314. call_police() interrupt 1
  315. {
  316.         counter++;
  317.         if(counter==39)
  318.         {        
  319.                 counter=0;
  320.                 Beep=~Beep;
  321.                 counter1++;
  322.                 if(counter1==60)//定時一分鐘
  323.                 {
  324.                         count1=0;
  325.                         Beep=1;//關閉定時器
  326.                 }
  327.         }
  328.         else
  329.         {
  330.                 TH0=0x9E;
  331.                 TL0=0x58;
  332.         }
  333. }
復制代碼


回復

使用道具 舉報

ID:235200 發表于 2019-12-13 15:33 | 顯示全部樓層
該函數在main函數后,main程序前的聲明中未聲明
回復

使用道具 舉報

ID:606366 發表于 2019-12-13 16:07 | 顯示全部樓層
函數聲明要在main函數之前
回復

使用道具 舉報

ID:525068 發表于 2019-12-14 13:13 | 顯示全部樓層
compare函數沒聲明
回復

使用道具 舉報

ID:663844 發表于 2019-12-14 17:44 | 顯示全部樓層
main前沒有函數申明
回復

使用道具 舉報

ID:655402 發表于 2019-12-14 21:28 | 顯示全部樓層
csmyldl 發表于 2019-12-13 15:33
該函數在main函數后,main程序前的聲明中未聲明

好了哈哈,謝謝謝謝
回復

使用道具 舉報

ID:655402 發表于 2019-12-14 21:29 | 顯示全部樓層
無敵的UUZ大人 發表于 2019-12-13 16:07
函數聲明要在main函數之前

解決了,謝謝
回復

使用道具 舉報

ID:655402 發表于 2019-12-14 21:30 | 顯示全部樓層
1255230 發表于 2019-12-14 13:13
compare函數沒聲明

好了,感謝
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产日韩欧美激情 | 最新一级毛片 | 综合色影院 | 久久久久久国产精品免费免费狐狸 | 久久综合伊人 | 国产九九精品 | 女人牲交视频一级毛片 | 亚洲不卡在线观看 | 日韩成人在线播放 | 日韩免费av网站 | 久久久夜 | 国产日韩欧美在线观看 | www.青青草 | 欧美一级片 | 91亚洲精品国偷拍自产在线观看 | 欧美一区二区三区在线看 | 最新中文字幕在线 | 欧美精品久久一区 | 午夜精品91| 欧美国产日韩在线观看 | 成人一区在线观看 | 高清亚洲 | 午夜精品久久久久久久久久久久 | 高清久久久 | 国产精品久久久久久吹潮 | 欧美久久一区二区三区 | 成人三级av | 美日韩免费视频 | 日本成人午夜影院 | 欧美成人免费在线视频 | 色欧美日韩 | 国产成人精品999在线观看 | 91在线 | 国产精品免费小视频 | 色站综合| 91精品国产综合久久国产大片 | 成人国产综合 | 国产高清视频在线观看 | 欧美一区二区三区在线观看视频 | 精品久久久久久亚洲综合网 | 亚洲h在线观看 |