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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于51單片機的電子秒表按鍵失效的問題求大家分析程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:463956 發表于 2019-1-7 17:10 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
求助,本萌新想設計一個在普通開始,暫停,清零三個功能鍵上擴展存儲和讀取功能的電子秒表,無奈遇到了一點問題,讀取第一個數據之后無法讀下一個數據,并且清零,開始按鍵都開始失效,只能重新啟動。
想了半天都沒有想出問題出在哪,希望大佬們能幫忙給點意見,謝謝!

下面是我的C語言程序:
  1. #include <reg52.h>                 //包含頭文件

  2. char code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};        //數字對應顯示碼表
  3. char code tab1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//小數點
  4. char code index[]={0xef,0xdf,0xbf,0x7f};  //每位數字對應數碼管顯示位置

  5. unsigned char num[4];                   //定義數組用于顯示
  6. int sec_fei=0;                                   //飛秒變量
  7. int debate[5];
  8. int datainfor;
  9. int readinfor;




  10. sbit key1=P3^0;                  //開始
  11. sbit key2=P3^1;                  //停止
  12. sbit key3=P3^2;                  //清零
  13. sbit store=P3^3;
  14. sbit read=P3^4;
  15. sbit restart=P3^5;

  16. void delay(unsigned int z)        //延時函數,大約延時1ms,不精確
  17. {
  18.         unsigned int i,j;
  19.         for(i=0;i<z;i++)
  20.         for(j=0;j<121;j++);
  21. }

  22. void debateread()
  23. {                           switch(readinfor)
  24.                              {
  25.                              case 1:sec_fei=debate[0];break;
  26.                              case 2:sec_fei=debate[1];break;
  27.                              case 3:sec_fei=debate[2];break;
  28.                              case 4:sec_fei=debate[3];break;
  29.                              case 5:sec_fei=debate[4];break;
  30.                              }
  31. }

  32. void debatestore()
  33. {                 switch(datainfor)
  34.                             {
  35.                              case 1:debate[0]=sec_fei;break;
  36.                              case 2:debate[1]=sec_fei;break;
  37.                              case 3:debate[2]=sec_fei;break;
  38.                              case 4:debate[3]=sec_fei;break;
  39.                              case 5:debate[4]=sec_fei;break;
  40.                             }
  41. }

  42. void init()                                         //定時器初始化函數
  43. {        readinfor=0;
  44.     sec_fei=0;
  45.     datainfor=0;
  46.         TMOD=0x01;                           //定時器0
  47.         TH0=0xd8;                           //初值高8位
  48.         TL0=0xf0;                  //定時10ms
  49.         ET0=1;                                //打開中斷允許開關
  50.         TR0=0;                                //關閉定時器
  51.         EA=1;                                //打開中斷總開關
  52. }

  53. void display()                          //顯示函數
  54. {
  55.         unsigned char i;                        //定義循環變量,循環4次,掃描4位數碼管
  56.         num[0]=sec_fei%10;                        //飛秒取余10,就是除以10之后的余數
  57.         num[1]=sec_fei%100/10;                //飛秒取余100再除以10
  58.         num[2]=sec_fei%1000/100;
  59.         num[3]=sec_fei/1000;
  60.         for(i=0;i<4;i++)                        //循環4次掃描數碼管
  61.         {
  62.                 P2=index[i];                        //位選
  63.                 if(i==2)                                //如果是第二位
  64.                 P0=tab1[num[i]];                //顯示數字加小數點
  65.                 else                                        //不是第二位
  66.                 P0=tab[num[i]];                        //正常顯示數字
  67.                  delay(1);                //修改此參數可修改刷新頻率  
  68.                 P0=0x00;                                //關閉顯示
  69.         }
  70. }
  71. void main()                                                //主函數
  72. {
  73.         init();                                                //調用定時器初始化
  74.         while(1)                                         //進入循環
  75.         {
  76.                  display();                 //刷屏顯示數碼管
  77.                 if(restart==0)
  78.                   {
  79.                      init();
  80.                      }
  81.                 if(key1==0)          //開始按鈕
  82.                   {
  83.                   TR0=1;
  84.                   }                  //打開定時器開始定時
  85.                 if(key2==0)         //停止按鈕
  86.                   {
  87.                   TR0=0;        
  88.                   }           //關閉定時器
  89.             if(key3==0)          //復位按鈕,需要停止定時時有效
  90.           {
  91.                      sec_fei=0;
  92.                   }         //秒清零
  93.         if(store==0)
  94.          {
  95.                  delay(1);
  96.                  while(store==0)
  97.                    {
  98.              datainfor ++;
  99.              debatestore();   
  100.                      if(datainfor==5)
  101.                           {
  102.                                  datainfor=0;
  103.                               }
  104.                      while(store==0)
  105.                               {
  106.                               display();
  107.                               }
  108.                    }
  109.           }         
  110.          if(TR0==0&&read==0)
  111.             {
  112.                     delay(1);
  113.                     while(read==0)
  114.                       {
  115.                readinfor++;
  116.                debateread();
  117.                             if(readinfor==5)
  118.                                  {
  119.                                  readinfor=0;
  120.                                  }
  121.                               while(read==0)
  122.                                         {
  123.                                          display()  ;
  124.                                          }
  125.                         
  126.                }
  127.              }                  

  128.         }
  129. }  



  130. void T0_time() interrupt 1
  131. {
  132.         TH0=0xd8;          //定時器定時時間為10ms
  133.         TL0=0xf0;

  134.         sec_fei++;                          //飛秒加1
  135.         if(sec_fei>=10000)          //加10000次
  136.         sec_fei=0;                          //清零
  137. }
復制代碼

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品乱码久久久久久按摩观 | 狠狠天天| 欧美日韩视频一区二区 | 国产伦精品 | 伊人狠狠 | 日韩aⅴ片 | 91玖玖 | 久久综合激情 | 精品国产不卡一区二区三区 | 91天堂网 | 日韩在线精品强乱中文字幕 | 亚洲欧美日韩精品 | 成人欧美一区二区三区视频xxx | 国产情侣激情 | 国产精品久久 | 先锋资源网| 亚洲日韩中文字幕一区 | 天天搞天天搞 | 久久久精品久 | 日日碰狠狠躁久久躁婷婷 | 性色av香蕉一区二区 | 国产综合久久 | 亚洲3级 | 人人99 | 成人av高清 | 欧美日一区二区 | 五月激情六月婷婷 | 毛片a级毛片免费播放100 | 亚洲精品乱码久久久久久蜜桃91 | 国产在线aa| 亚洲福利一区二区 | 欧美aaa一级片 | 午夜午夜精品一区二区三区文 | 欧美日韩中 | 天天操天天干天天曰 | 一级欧美| 欧美一区二区免费视频 | 色成人免费网站 | 国产精品综合视频 | 91社区在线观看 | 久久综合爱 |