欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 基于c51單片機(jī)的密碼鎖程序 編譯錯(cuò)誤 [打印本頁(yè)]

作者: kikokkk    時(shí)間: 2019-12-13 14:50
標(biāo)題: 基于c51單片機(jī)的密碼鎖程序 編譯錯(cuò)誤
編譯時(shí)為什么顯示缺少原函數(shù)??
在        if(compare()==-1)  那個(gè)地方

  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;      //用于記錄輸入密碼錯(cuò)誤的次數(shù)
  8. int counter;       //用于計(jì)數(shù)是定時(shí)器能夠定時(shí)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. //函數(shù)聲明
  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. //延時(shí)函數(shù)
  31. void delay(int x)
  32. {
  33.         int j=0;
  34.         for(;x>0;x--)
  35.                 for(j=0;j<125;j++);
  36. }


  37. //設(shè)定密碼功能
  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);//顯示設(shè)置的密碼
  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())//一旦長(zhǎng)時(shí)間按按鍵,就一直顯示密碼
  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);//顯示設(shè)置的密碼
  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())//一旦長(zhǎng)時(shí)間按按鍵,就一直顯示密碼
  86.                 {        
  87.                         show2(count);
  88.                 }
  89.         }
  90. }


  91. //顯示輸入的密碼
  92. void show2(int count)
  93. {
  94.         if(count==0)//顯示1位數(shù)據(jù)
  95.         {
  96.                 P1=0x0e;
  97.                 P0=led[get_word[0]];
  98.         }
  99.         if(count==1)//顯示2位數(shù)據(jù)
  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位數(shù)據(jù)
  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位數(shù)據(jù)
  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. //顯示設(shè)置的密碼
  141. void show1(int count)
  142. {
  143.         int i;
  144.         if(count==0)//顯示一位數(shù)據(jù)
  145.         {
  146.                 P1=0x0e;
  147.                 i=key_word[0];
  148.                 P0=led[i];
  149.         }
  150.         if(count==1)//顯示兩位數(shù)據(jù)
  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)//顯示三位數(shù)據(jù)
  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)//顯示四位數(shù)據(jù)
  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. //主函數(shù)
  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());       //等待選擇功能按鍵釋放后再進(jìn)行設(shè)置密碼
  204.                                         count=-1;                     //在使用標(biāo)志位時(shí)將標(biāo)志位進(jìn)行初始化
  205.                                         signal=1;
  206.                                         set_key();
  207.                                         break;
  208.                         
  209.                         case 14:
  210.                                         while(temp==get_key());
  211.                                         count=-1;                    //初始化標(biāo)志位
  212.                                         signal=1;
  213.                                         input_key();
  214.                                         while(get_key()!=15)         //當(dāng)按下登陸鍵,輸入的密碼不再顯示
  215.                                         {
  216.                                                 show2(count);
  217.                                         }
  218.                                         if(compare()==-1)
  219.                                         {
  220.                                                 count1++;
  221.                                                 while(get_key()!=14&&count1!=3)
  222.                                                 {
  223.                                                         show3();     //密碼錯(cuò)誤,顯示ERR
  224.                                                 }
  225.                                                 P0=0;            //按下輸入密碼鍵后,清屏
  226.                                                 if(count1==3)
  227.                                                 {
  228.                                                         //開啟定時(shí)器中斷
  229.                                                         TMOD=0x01;
  230.                                                         TH0=0x9E;//裝載初值25ms
  231.                                                         TL0=0x58;
  232.                                                         EA=1; //開總中斷
  233.                                                         ET0=1;//開定時(shí)器0
  234.                                                         TR0=1;  //開啟定時(shí)器0
  235.                                                         while(counter1<60);//只有當(dāng)蜂鳴器響完一分鐘之后,才能退出循環(huán)
  236.                                                         TR0=0;//關(guān)閉定時(shí)器
  237.                                              }
  238.                                         }
  239.                                         else
  240.                                         {        
  241.                                                 LED1=1;//當(dāng)輸入密碼正確時(shí),開啟LED燈
  242.                                                 while(get_key()!=12)//直到按下退出鍵,屏幕一直顯示on
  243.                                                 {
  244.                                                         show4();
  245.                                                 }
  246.                                                 LED1=0;//退出后關(guān)閉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])//一旦長(zhǎng)時(shí)間按鍵,將只會(huì)讀取一次按鍵的值
  270.                                         {
  271.                                                 signal=1;
  272.                                                 temp=j;
  273.                                                 return j;
  274.                                         }
  275.                                         else signal=0;
  276.                                 }
  277.                         }
  278.                 }
  279.         }
  280.         return -1;
  281. }




  282. //輸入的密碼和設(shè)定的密碼比較
  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;     //輸入密碼不等于設(shè)定的密碼返回-1
  290.         }
  291.         return 1;     //輸入的密碼等于設(shè)定密碼返回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. //定時(shí)器中斷函數(shù),定時(shí)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)//定時(shí)一分鐘
  323.                 {
  324.                         count1=0;
  325.                         Beep=1;//關(guān)閉定時(shí)器
  326.                 }
  327.         }
  328.         else
  329.         {
  330.                 TH0=0x9E;
  331.                 TL0=0x58;
  332.         }
  333. }
復(fù)制代碼



作者: csmyldl    時(shí)間: 2019-12-13 15:33
該函數(shù)在main函數(shù)后,main程序前的聲明中未聲明
作者: 無(wú)敵的UUZ大人    時(shí)間: 2019-12-13 16:07
函數(shù)聲明要在main函數(shù)之前
作者: 1255230    時(shí)間: 2019-12-14 13:13
compare函數(shù)沒(méi)聲明
作者: w59704    時(shí)間: 2019-12-14 17:44
main前沒(méi)有函數(shù)申明
作者: kikokkk    時(shí)間: 2019-12-14 21:28
csmyldl 發(fā)表于 2019-12-13 15:33
該函數(shù)在main函數(shù)后,main程序前的聲明中未聲明

好了哈哈,謝謝謝謝
作者: kikokkk    時(shí)間: 2019-12-14 21:29
無(wú)敵的UUZ大人 發(fā)表于 2019-12-13 16:07
函數(shù)聲明要在main函數(shù)之前

解決了,謝謝
作者: kikokkk    時(shí)間: 2019-12-14 21:30
1255230 發(fā)表于 2019-12-14 13:13
compare函數(shù)沒(méi)聲明

好了,感謝




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1