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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

stc89c51 `1602液晶 4*4矩陣,電子密碼鎖,按鍵沒反應

[復制鏈接]
跳轉到指定樓層
樓主
大家好,我畢設做了電子密碼鎖,都做壞兩塊板了,但是還沒實現功能.
我是照著別人之前做成功的板的做的,程序也是現成的,檢查電路好多遍了,是照著焊的,也沒短路,但是一通電后,顯示屏就顯示了圖一,按鍵怎么按都沒反應,求各位大神指導啊

P50507-195827.jpg (2.61 MB, 下載次數: 132)

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

使用道具 舉報

沙發
ID:79247 發表于 2015-5-7 22:50 | 只看該作者
  1. #include <REG51.h>
  2. #include<intrins.h>
  3. #define LCM_Data  P0
  4. #define uchar unsigned char
  5. #define uint  unsigned int
  6. #define w 6                                //定義密碼位數
  7. sbit lcd1602_rs=P2^7;
  8. sbit lcd1602_rw=P2^6;
  9. sbit lcd1602_en=P2^5;

  10. sbit Scl=P3^4;                        //24C02串行時鐘
  11. sbit Sda=P3^5;                        //24C02串行數據

  12. sbit ALAM = P2^1;                //報警       
  13. sbit KEY = P3^6;                //開鎖

  14. sbit open_led=P2^2;                //開鎖指示燈

  15. bit  operation=0;                //操作標志位
  16. bit  pass=0;                        //密碼正確標志
  17. bit  ReInputEn=0;                //重置輸入充許標志       
  18. bit  s3_keydown=0;                //3秒按鍵標志位
  19. bit  key_disable=0;                //鎖定鍵盤標志

  20. unsigned char countt0,second;        //t0中斷計數器,秒計數器

  21. void Delay5Ms(void);

  22. unsigned char code a[]={0xFE,0xFD,0xFB,0xF7};                                                                                         //控盤掃描控制表

  23. unsigned char code start_line[]        = {"password:       "};
  24. unsigned char code name[]                  = {"===Coded Lock==="};                                                                                                //顯示名稱
  25. unsigned char code Correct[]         = {"     correct    "};                                                                                         //輸入正確
  26. unsigned char code Error[]           = {"      error     "};                                                                                          //輸入錯誤
  27. unsigned char code codepass[]        = {"      pass      "};
  28. unsigned char code LockOpen[]        = {"      open      "};                                                                                                //OPEN
  29. unsigned char code SetNew[]         = {"SetNewWordEnable"};
  30. unsigned char code Input[]           = {"input:          "};                                                                                                //INPUT
  31. unsigned char code ResetOK[]         = {"ResetPasswordOK "};
  32. unsigned char code initword[]        = {"Init password..."};
  33. unsigned char code Er_try[]                = {"error,try again!"};
  34. unsigned char code again[]                = {"input again     "};

  35. unsigned char InputData[6];                                                                                                                                //輸入密碼暫存區
  36. unsigned char CurrentPassword[6]={1,3,1,4,2,0};                                                                                                                 //當前密碼值
  37. unsigned char TempPassword[6];
  38. unsigned char N=0;                                //密碼輸入位數記數
  39. unsigned char ErrorCont;                        //錯誤次數計數
  40. unsigned char CorrectCont;                        //正確輸入計數
  41. unsigned char ReInputCont;                         //重新輸入計數
  42. unsigned char code initpassword[6]={0,0,0,0,0,0};


  43. //=====================5ms延時==============================
  44. void Delay5Ms(void)
  45. {
  46.         unsigned int TempCyc = 5552;
  47.         while(TempCyc--);
  48. }

  49. //===================400ms延時==============================
  50. void Delay400Ms(void)
  51. {
  52. unsigned char TempCycA = 5;
  53. unsigned int TempCycB;
  54. while(TempCycA--)
  55. {
  56.   TempCycB=7269;
  57.   while(TempCycB--);
  58. }
  59. }

  60. //=============================================================================================
  61. //================================24C02========================================================
  62. //=============================================================================================

  63. void mDelay(uint t) //延時
  64. {
  65.         uchar i;
  66.            while(t--)
  67.            {
  68.                    for(i=0;i<125;i++)
  69.                    {;}
  70.            }
  71. }
  72.    

  73. void Nop(void)                  //空操作
  74. {
  75.         _nop_();
  76.         _nop_();
  77.         _nop_();
  78.         _nop_();
  79. }


  80. /*起始條件*/

  81. void Start(void)
  82. {
  83.         Sda=1;
  84.         Scl=1;
  85.         Nop();
  86.         Sda=0;
  87.         Nop();
  88. }


  89. /*停止條件*/
  90. void Stop(void)
  91. {
  92.         Sda=0;
  93.         Scl=1;
  94.         Nop();
  95.         Sda=1;
  96.         Nop();
  97. }

  98. /*應答位*/
  99. void Ack(void)
  100. {
  101.         Sda=0;
  102.         Nop();
  103.         Scl=1;
  104.         Nop();
  105.         Scl=0;
  106. }

  107. /*反向應答位*/
  108. void NoAck(void)
  109. {
  110.         Sda=1;
  111.         Nop();
  112.         Scl=1;
  113.         Nop();
  114.         Scl=0;
  115. }

  116. /*發送數據子程序,Data為要求發送的數據*/
  117. void Send(uchar Data)
  118. {
  119.            uchar BitCounter=8;
  120.            uchar temp;
  121.            do
  122.            {
  123.                    temp=Data;
  124.                    Scl=0;
  125.                    Nop();
  126.                    if((temp&0x80)==0x80)
  127.                    Sda=1;
  128.                    else
  129.                    Sda=0;
  130.                    Scl=1;
  131.                    temp=Data<<1;
  132.                    Data=temp;
  133.                    BitCounter--;
  134.            }
  135.            while(BitCounter);
  136.            Scl=0;
  137. }

  138. /*讀一字節的數據,并返回該字節值*/
  139. uchar Read(void)
  140. {
  141.     uchar temp=0;
  142.         uchar temp1=0;
  143.         uchar BitCounter=8;
  144.         Sda=1;
  145.         do{
  146.         Scl=0;
  147.         Nop();
  148.         Scl=1;
  149.         Nop();
  150.         if(Sda)
  151.         temp=temp|0x01;
  152.         else
  153.         temp=temp&0xfe;
  154.         if(BitCounter-1)
  155.         {
  156.         temp1=temp<<1;
  157.         temp=temp1;
  158.         }
  159.         BitCounter--;
  160.         }
  161.         while(BitCounter);
  162.         return(temp);
  163.         }

  164. void WrToROM(uchar Data[],uchar Address,uchar Num)
  165. {
  166.   uchar i;
  167.   uchar *PData;
  168.   PData=Data;
  169.   for(i=0;i<Num;i++)
  170.   {
  171.   Start();
  172.   Send(0xa0);
  173.   Ack();
  174.   Send(Address+i);
  175.   Ack();
  176.   Send(*(PData+i));
  177.   Ack();
  178.   Stop();
  179.   mDelay(20);
  180.   }
  181. }

  182. void RdFromROM(uchar Data[],uchar Address,uchar Num)
  183. {
  184.   uchar i;
  185.   uchar *PData;
  186.   PData=Data;
  187.   for(i=0;i<Num;i++)
  188.   {
  189.   Start();
  190.   Send(0xa0);
  191.   Ack();
  192.   Send(Address+i);
  193.   Ack();
  194.   Start();
  195.   Send(0xa1);
  196.   Ack();
  197.   *(PData+i)=Read();
  198.   Scl=0;
  199.   NoAck();
  200.   Stop();
  201.   }
  202. }


  203. //==================================================================================================
  204. //=======================================LCD1602====================================================
  205. //==================================================================================================

  206. #define yi 0x80 //LCD第一行的初始位置,因為LCD1602字符地址首位D7恒定為1(100000000=80)
  207. #define er 0x80+0x40 //LCD第二行初始位置(因為第二行第一個字符位置地址是0x40)


  208. //----------------延時函數,后面經常調用----------------------
  209. void delay(uint xms)//延時函數,有參函數
  210. {
  211.         uint x,y;
  212.         for(x=xms;x>0;x--)
  213.          for(y=110;y>0;y--);
  214. }

  215. //--------------------------寫指令---------------------------
  216. write_1602com(uchar com)//****液晶寫入指令函數****
  217. {
  218.         lcd1602_rs=0;//數據/指令選擇置為指令
  219.         lcd1602_rw=0; //讀寫選擇置為寫
  220.         P0=com;//送入數據
  221.         delay(1);
  222.         lcd1602_en=1;//拉高使能端,為制造有效的下降沿做準備
  223.         delay(1);
  224.         lcd1602_en=0;//en由高變低,產生下降沿,液晶執行命令
  225. }

  226. //-------------------------寫數據-----------------------------
  227. write_1602dat(uchar dat)//***液晶寫入數據函數****
  228. {
  229.         lcd1602_rs=1;//數據/指令選擇置為數據
  230.         lcd1602_rw=0; //讀寫選擇置為寫
  231.         P0=dat;//送入數據
  232.         delay(1);
  233.         lcd1602_en=1; //en置高電平,為制造下降沿做準備
  234.         delay(1);
  235.         lcd1602_en=0; //en由高變低,產生下降沿,液晶執行命令
  236. }

  237. //-------------------------初始化-------------------------
  238. void lcd_init(void)
  239. {
  240.         write_1602com(0x38);//設置液晶工作模式,意思:16*2行顯示,5*7點陣,8位數據
  241.         write_1602com(0x0c);//開顯示不顯示光標
  242.         write_1602com(0x06);//整屏不移動,光標自動右移
  243.         write_1602com(0x01);//清顯示
  244. }
  245. //========================================================================================
  246. //=========================================================================================




  247. //==============將按鍵值編碼為數值=========================
  248. unsigned char coding(unsigned char m)         
  249. {
  250.         unsigned char k;
  251.        
  252.         switch(m)
  253.         {
  254.                 case (0x11): k=1;break;
  255.                 case (0x21): k=2;break;
  256.                 case (0x41): k=3;break;
  257.                 case (0x81): k='A';break;
  258.                 case (0x12): k=4;break;
  259.                 case (0x22): k=5;break;
  260.                 case (0x42): k=6;break;
  261.                 case (0x82): k='B';break;
  262.                 case (0x14): k=7;break;
  263.                 case (0x24): k=8;break;
  264.                 case (0x44): k=9;break;
  265.                 case (0x84): k='C';break;
  266.                 case (0x18): k='*';break;
  267.                 case (0x28): k=0;break;
  268.                 case (0x48): k='#';break;
  269.                 case (0x88): k='D';break;
  270.         }
  271.         return(k);
  272. }


  273. //=====================按鍵檢測并返回按鍵值===============================
  274. unsigned char keynum(void)
  275. {
  276.         unsigned char row,col,i;
  277.         P1=0xf0;
  278.         if((P1&0xf0)!=0xf0)
  279.         {
  280.                    Delay5Ms();
  281.         Delay5Ms();
  282.                    if((P1&0xf0)!=0xf0)
  283.                 {
  284.                     row=P1^0xf0;          //確定行線
  285.                         i=0;
  286.                         P1=a[i];                  //精確定位
  287.                         while(i<4)
  288.                         {
  289.                                  if((P1&0xf0)!=0xf0)
  290.                                   {
  291.                                            col=~(P1&0xff);          //確定列線
  292.                                            break;            //已定位后提前退出   
  293.                                   }
  294.                                 else
  295.                                   {
  296.                                            i++;
  297.                                            P1=a[i];
  298.                                   }
  299.                         }
  300.                 }
  301.                 else
  302.                 {
  303.                         return 0;
  304.                 }
  305.        
  306.                 while((P1&0xf0)!=0xf0);

  307.                 return (row|col);                         //行線與列線組合后返回
  308.         }
  309.         else return 0;                                 //無鍵按下時返回0
  310. }




  311. //=======================一聲提示音,表示有效輸入========================
  312. void OneAlam(void)
  313. {
  314.         ALAM=0;
  315.         Delay5Ms();
  316.     ALAM=1;
  317. }

  318. //========================二聲提示音,表示操作成功========================
  319. void TwoAlam(void)
  320. {
  321.         ALAM=0;
  322.         Delay5Ms();
  323.     ALAM=1;
  324.     Delay5Ms();
  325.         ALAM=0;
  326.         Delay5Ms();
  327.     ALAM=1;
  328. }

  329. //========================三聲提示音,表示錯誤========================
  330. void ThreeAlam(void)
  331. {
  332.         ALAM=0;
  333.         Delay5Ms();
  334.     ALAM=1;
  335.     Delay5Ms();
  336.         ALAM=0;
  337.         Delay5Ms();
  338.     ALAM=1;
  339.     Delay5Ms();
  340.         ALAM=0;
  341.         Delay5Ms();
  342.     ALAM=1;

  343. }

  344. //=====================顯示輸入的N個數字,用H代替以便隱藏============================
  345. void DisplayOne(void)
  346. {
  347. //        DisplayOneChar(9+N,1,'*');
  348.         write_1602com(yi+5+N);
  349.         write_1602dat('*');
  350. }

  351. //=======================顯示提示輸入=========================
  352. void DisplayChar(void)
  353. {
  354.         unsigned char i;
  355.         if(pass==1)
  356.         {
  357.                 //DisplayListChar(0,1,LockOpen);
  358.                 write_1602com(er);
  359.                 for(i=0;i<16;i++)
  360.                 {
  361.                         write_1602dat(LockOpen[i]);       
  362.                 }
  363.         }
  364.         else
  365.         {
  366.                 if(N==0)
  367.                 {
  368.                         //DisplayListChar(0,1,Error);
  369.                         write_1602com(er);
  370.                         for(i=0;i<16;i++)
  371.                         {
  372.                                 write_1602dat(Error[i]);       
  373.                         }
  374.                 }
  375.                 else
  376.                 {
  377.                         //DisplayListChar(0,1,start_line);       
  378.                         write_1602com(er);
  379.                         for(i=0;i<16;i++)
  380.                         {
  381.                                 write_1602dat(start_line[i]);       
  382.                         }
  383.                 }
  384.         }
  385. }

  386. void DisplayInput(void)
  387. {
  388.         unsigned char i;
  389.         if(CorrectCont==1)
  390.         {
  391.                 //DisplayListChar(0,0,Input);
  392.                 write_1602com(er);
  393.                 for(i=0;i<16;i++)
  394.                 {
  395.                         write_1602dat(Input[i]);       
  396.                 }
  397.         }
  398. }


  399. //========================重置密碼==================================================
  400. //==================================================================================
  401. void ResetPassword(void)
  402. {
  403.         unsigned char i;       
  404.         unsigned char j;
  405.         if(pass==0)
  406.         {
  407.                 pass=0;
  408.                 DisplayChar();
  409.                 ThreeAlam();
  410.         }
  411.         else
  412.         {
  413.             if(ReInputEn==1)
  414.                 {
  415.                         if(N==6)
  416.                         {
  417.                                 ReInputCont++;                               
  418.                                 if(ReInputCont==2)
  419.                                 {
  420.                                         for(i=0;i<6;)
  421.                                         {
  422.                                                 if(TempPassword[i]==InputData[i])        //將兩次輸入的新密碼作對比
  423.                                                         i++;
  424.                                                 else
  425.                                                 {
  426.                                                         //DisplayListChar(0,1,Error);
  427.                                                         write_1602com(er);
  428.                                                         for(j=0;j<16;j++)
  429.                                                         {
  430.                                                                 write_1602dat(Error[j]);       
  431.                                                         }
  432.                                                         ThreeAlam();                        //錯誤提示       
  433.                                                         pass=0;
  434.                                                         ReInputEn=0;                        //關閉重置功能,
  435.                                                         ReInputCont=0;
  436.                                                         DisplayChar();
  437.                                                         break;
  438.                                                 }
  439.                                         }
  440.                                         if(i==6)
  441.                                         {
  442.                                                 //DisplayListChar(0,1,ResetOK);
  443.                                                 write_1602com(er);
  444.                                                 for(j=0;j<16;j++)
  445.                                                 {
  446.                                                         write_1602dat(ResetOK[j]);       
  447.                                                 }

  448.                                                 TwoAlam();                                //操作成功提示
  449.                                                  WrToROM(TempPassword,0,6);                //將新密碼寫入24C02存儲
  450.                                                 ReInputEn=0;
  451.                                         }
  452.                                         ReInputCont=0;
  453.                                         CorrectCont=0;
  454.                                 }
  455.                                 else
  456.                                 {
  457.                                         OneAlam();
  458.                                         //DisplayListChar(0, 1, again);                 //顯示再次輸入一次
  459.                                         write_1602com(er);
  460.                                         for(j=0;j<16;j++)
  461.                                         {
  462.                                                 write_1602dat(again[j]);       
  463.                                         }                                       
  464.                                         for(i=0;i<6;i++)
  465.                                         {
  466.                                                 TempPassword[i]=InputData[i];                //將第一次輸入的數據暫存起來                                               
  467.                                         }
  468.                                 }

  469.                         N=0;                                                //輸入數據位數計數器清零
  470.                    }
  471.             }
  472.         }

  473. }



  474. //=======================輸入密碼錯誤超過三過,報警并鎖死鍵盤======================
  475. void Alam_KeyUnable(void)
  476. {
  477.         P1=0x00;
  478.         {
  479.                 ALAM=~ALAM;
  480.                 Delay5Ms();
  481.         }
  482. }


  483. //=======================取消所有操作============================================
  484. void Cancel(void)
  485. {       
  486.         unsigned char i;
  487.         unsigned char j;
  488.         //DisplayListChar(0, 1, start_line);
  489.         write_1602com(er);
  490.         for(j=0;j<16;j++)
  491.         {
  492.                 write_1602dat(start_line[j]);       
  493.         }
  494.         TwoAlam();                                //提示音
  495.         for(i=0;i<6;i++)
  496.         {
  497.                 InputData[i]=0;
  498.         }
  499.         KEY=1;                                        //關閉鎖
  500.         ALAM=1;                                        //報警關
  501.         operation=0;                        //操作標志位清零
  502.         pass=0;                                        //密碼正確標志清零
  503.         ReInputEn=0;                        //重置輸入充許標志清零
  504.         ErrorCont=0;                        //密碼錯誤輸入次數清零
  505.         CorrectCont=0;                        //密碼正確輸入次數清零
  506.         ReInputCont=0;                        //重置密碼輸入次數清零
  507.         open_led=1;
  508.         s3_keydown=0;
  509.         key_disable=0;
  510.         N=0;                                        //輸入位數計數器清零
  511. }


  512. //==========================確認鍵,并通過相應標志位執行相應功能===============================
  513. void Ensure(void)
  514. {       
  515.         unsigned char i,j;
  516.         RdFromROM(CurrentPassword,0,6);                                         //從24C02里讀出存儲密碼
  517.     if(N==6)
  518.         {
  519.             if(ReInputEn==0)                                                        //重置密碼功能未開啟
  520.                 {
  521.                         for(i=0;i<6;)
  522.                            {                                       
  523.                                 if(CurrentPassword[i]==InputData[i])
  524.                                 {
  525.                                         i++;
  526.                                 }
  527.                                 else
  528.                                 {                       
  529.                                         ErrorCont++;
  530.                                         if(ErrorCont==3)                        //錯誤輸入計數達三次時,報警并鎖定鍵盤
  531.                                         {
  532.                                                 write_1602com(er);
  533.                                                 for(i=0;i<16;i++)
  534.                                                 {
  535.                                                         write_1602dat(Error[i]);       
  536.                                                 }
  537.                                                 do
  538.                                                 Alam_KeyUnable();
  539.                                                 while(1);
  540.                                         }
  541.                                         else
  542.                                         {
  543.                                                 TR0=1;                                //開啟定時
  544.                                                 key_disable=1;                        //鎖定鍵盤
  545.                                                 pass=0;
  546.                                                 break;
  547.                                         }
  548.                                 }
  549.                         }

  550.                         if(i==6)
  551.                         {
  552.                                 CorrectCont++;
  553.                                 if(CorrectCont==1)                                //正確輸入計數,當只有一次正確輸入時,開鎖,
  554.                                 {
  555.                                         //DisplayListChar(0,1,LockOpen);
  556.                                         write_1602com(er);
  557.                                         for(j=0;j<16;j++)
  558.                                         {
  559.                                                 write_1602dat(LockOpen[j]);       
  560.                                         }
  561.                                         TwoAlam();                        //操作成功提示音
  562.                                         KEY=0;                                                                                        //開鎖
  563.                                         pass=1;                                                                                        //置正確標志位
  564.                                         TR0=1;                                                                                        //開啟定時
  565.                                         open_led=0;                                                                                //開鎖指示燈亮
  566.                                         for(j=0;j<6;j++)                                                                //將輸入清除
  567.                                         {
  568.                                                 InputData[i]=0;
  569.                                         }
  570.                                 }       
  571.                                 else                                                                                                //當兩次正確輸入時,開啟重置密碼功能
  572.                                 {
  573.                                         //DisplayListChar(0,1,SetNew);
  574.                                         write_1602com(er);
  575.                                         for(j=0;j<16;j++)
  576.                                         {
  577.                                                 write_1602dat(SetNew[j]);       
  578.                                         }
  579.                                         TwoAlam();                                                                            //操作成功提示
  580.                                         ReInputEn=1;                                                                        //允許重置密碼輸入
  581.                                         CorrectCont=0;                                                                        //正確計數器清零
  582.                                 }
  583.                           }
  584.        
  585.                         else                        //=========================當第一次使用或忘記密碼時可以用131420對其密碼初始化============
  586.                         {
  587.                                 if((InputData[0]==1)&&(InputData[1]==3)&&(InputData[2]==1)&&(InputData[3]==4)&&(InputData[4]==2)&&(InputData[5]==0))
  588.                                    {
  589.                                         WrToROM(initpassword,0,6);                                 //強制將初始密碼寫入24C02存儲
  590.                                         //DisplayListChar(0,1,initword);                        //顯示初始化密碼
  591.                                         write_1602com(er);
  592.                                         for(j=0;j<16;j++)
  593.                                         {
  594.                                                 write_1602dat(initword[j]);       
  595.                                         }
  596.                                         TwoAlam();
  597.                                         Delay400Ms();
  598.                                         TwoAlam();
  599.                                         N=0;
  600.                                 }
  601.                                 else
  602.                                 {
  603.                                         //DisplayListChar(0,1,Error);
  604.                                         write_1602com(er);
  605.                                         for(j=0;j<16;j++)
  606.                                         {
  607.                                                 write_1602dat(Error[j]);       
  608.                                         }
  609.                                         ThreeAlam();                                                                                //錯誤提示音
  610.                                         pass=0;       
  611.                                 }
  612.                         }
  613.                 }

  614.                 else                                                                                        //當已經開啟重置密碼功能時,而按下開鎖鍵,
  615.                 {
  616.                         //DisplayListChar(0,1,Er_try);
  617.                         write_1602com(er);
  618.                         for(j=0;j<16;j++)
  619.                         {
  620.                                 write_1602dat(Er_try[j]);       
  621.                         }
  622.                         ThreeAlam();
  623.                 }
  624.         }

  625.         else
  626.         {
  627.                 //DisplayListChar(0,1,Error);
  628.                 write_1602com(er);
  629.                 for(j=0;j<16;j++)
  630.                 {
  631.                         write_1602dat(Error[j]);       
  632.                 }

  633.                 ThreeAlam();                                                                                //錯誤提示音
  634.                 pass=0;       
  635.         }
  636.        
  637.         N=0;                                                                                                        //將輸入數據計數器清零,為下一次輸入作準備

  638.         operation=1;
  639. }


  640. //==============================主函數===============================
  641. void main(void)
  642. {
  643.         unsigned char KEY,NUM;
  644.         unsigned char i,j;
  645.         P1=0xFF;
  646.         TMOD=0x11;
  647.         TL0=0xB0;
  648.         TH0=0x3C;
  649.         EA=1;
  650.         ET0=1;       
  651.         TR0=0;
  652.         Delay400Ms();         //啟動等待,等LCM講入工作狀態
  653.         lcd_init();         //LCD初始化
  654.         write_1602com(yi);//日歷顯示固定符號從第一行第0個位置之后開始顯示
  655.         for(i=0;i<16;i++)
  656.         {
  657.                 write_1602dat(name[i]);//向液晶屏寫日歷顯示的固定符號部分
  658.         }
  659.         write_1602com(er);//時間顯示固定符號寫入位置,從第2個位置后開始顯示
  660.         for(i=0;i<16;i++)
  661.         {
  662.                 write_1602dat(start_line[i]);//寫顯示時間固定符號,兩個冒號
  663.         }
  664.         write_1602com(er+9);        //設置光標位置
  665.         write_1602com(0x0f);        //設置光標為閃爍
  666.         Delay5Ms(); //延時片刻(可不要)

  667.         N=0;                                                                                                                //初始化數據輸入位數
  668.         while(1)
  669.         {
  670.                 if(key_disable==1)
  671.                         Alam_KeyUnable();
  672.                 else
  673.                         ALAM=1;                                                                //關報警

  674.                 KEY=keynum();
  675.                 if(KEY!=0)
  676.                 {       
  677.                         if(key_disable==1)
  678.                         {
  679.                                 second=0;
  680.                         }
  681.                         else
  682.                         {
  683.                                 NUM=coding(KEY);
  684.                                 {
  685.                                         switch(NUM)
  686.                                         {
  687.                                                 case ('A'):         ;                                         break;
  688.                                                 case ('B'):                ;                                     break;
  689.                                                 case ('C'):         ;                                         break;
  690.                                                 case ('D'): ResetPassword();                break;      //重新設置密碼
  691.                                                 case ('*'): Cancel();                                break;      //取消當前輸入
  692.                                                 case ('#'): Ensure();                                 break;           //確認鍵,
  693.                                                 default:
  694.                                                 {       
  695.                                                         //DisplayListChar(0,1,Input);
  696.                                                         write_1602com(er);
  697.                                                         for(i=0;i<16;i++)
  698.                                                         {
  699.                                                                 write_1602dat(Input[i]);
  700.                                                         }
  701.                                                     operation=0;
  702.                                                         if(N<6)                                                           //當輸入的密碼少于6位時,接受輸入并保存,大于6位時則無效。
  703.                                                         {  
  704.                                                                 OneAlam();                                                                //按鍵提示音                                               
  705.                                                                 //DisplayOneChar(6+N,1,'*');
  706.                                                                  for(j=0;j<=N;j++)
  707.                                                                 {
  708.                                                                         write_1602com(er+6+j);
  709.                                                                         write_1602dat('*');
  710.                                                                 }
  711.                                                                 InputData[N]=NUM;
  712.                                                                 N++;
  713.                                                         }
  714.                                                         else                                                                                //輸入數據位數大于6后,忽略輸入
  715.                                                         {
  716.                                                                 N=6;
  717.                                                                  break;
  718.                                                         }
  719.                                                 }
  720.                                         }
  721.                                 }
  722.                         }
  723.                  }
  724.         }
  725. }

  726. //*********************************中斷服務函數**************************************
  727. void  time0_int(void) interrupt 1
  728. {
  729.         TL0=0xB0;
  730.         TH0=0x3C;
  731.         //TR0=1;
  732.         countt0++;
  733.           if(countt0==20)
  734.            {
  735.                 countt0=0;
  736.                 second++;
  737.                 if(pass==1)
  738.                 {
  739.                         if(second==1)
  740.                         {
  741.                                 open_led=1;                        //關指示燈
  742.                                 TR0=0;                                //關定時器
  743.                                 TL0=0xB0;
  744.                                 TH0=0x3C;
  745.                                 second=0;
  746.                         }
  747.                 }
  748.                 else
  749.                 {
  750.                         if(second==3)
  751.                         {
  752.                                 TR0=0;
  753.                                 second=0;
  754.                                 key_disable=0;       
  755.                                 s3_keydown=0;       
  756.                                 TL0=0xB0;
  757.                                 TH0=0x3C;
  758.                         }
  759.                         else
  760.                             TR0=1;
  761.                 }
  762.                        
  763.            }
  764. }
復制代碼
回復

使用道具 舉報

板凳
ID:74484 發表于 2015-5-8 00:38 | 只看該作者
程序與焊接都沒問題的話,只能想到一點,按鍵的線路連接和程序定義的引腳的是否一樣。

評分

參與人數 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:79309 發表于 2015-5-8 14:58 | 只看該作者
 發表于 2015-5-8 00:38
程序與焊接都沒問題的話,只能想到一點,按鍵的線路連接和程序定義的引腳的是否一樣。

行掃開放,列線檢測對否

評分

參與人數 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

5#
ID:79309 發表于 2015-5-8 15:18 | 只看該作者
檢查線路是否虛焊

評分

參與人數 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

6#
ID:99459 發表于 2015-12-12 22:23 | 只看該作者
你編譯通過了嗎
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧洲一区二区三区 | 久久精品免费观看 | 国产一区成人 | www日本高清 | 看a网站| 亚洲成人一区二区 | 四虎永久免费地址 | 天天色天天色 | 国产成人综合网 | 亚洲视频一区在线 | a黄视频 | 另类专区亚洲 | 精品伊人| 先锋av资源在线 | 91精品国产欧美一区二区 | 精品亚洲一区二区三区四区五区高 | 久草在线在线精品观看 | 国产精品毛片av一区 | 国产综合精品一区二区三区 | 亚洲国产第一页 | 青青草原精品99久久精品66 | 欧美成人精品激情在线观看 | 在线日韩 | 精品日韩一区二区 | 狠狠综合网 | 又爽又黄axxx片免费观看 | 免费三级网 | 日韩免费在线观看视频 | 国内精品99 | 琪琪午夜伦伦电影福利片 | 999精品视频 | 成人三级av | 免费99精品国产自在在线 | 国产精品欧美一区二区 | 国产精品亚洲综合 | 国产精品伦理一区二区三区 | 国产高清精品一区 | www.久久 | 综合久久久 | 欧美精品欧美精品系列 | 日韩欧美在线一区二区 |