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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

請大神看看這程序那里有問題,編譯通不過!

[復制鏈接]
跳轉到指定樓層
樓主
ID:272625 發表于 2018-1-24 07:01 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include <reg52.h>
  2. //宏定義
  3. #define uc unsigned char
  4. #define ui unsigned int

  5. void display();  //聲明顯示函數
  6. uc code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; //數字對應顯示碼表
  7. uc code tab1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//帶小數點的數字碼表
  8. uc code index[]={0xef,0xdf,0xbf,0x7f};  //每位數字對應數碼管顯示位置
  9. uc num[8];     //num【0】-num【3】是計時用數組,4-7是范圍計時用(設置10s,計時到10秒報警)
  10. uc val[10][4]; //存儲的記錄 [10]為記錄序列,[4]為每組記錄中的數字
  11. char val_index;//記錄序列標志位  
  12. uc set_index,ok_flag,timing; //set_index:設置的位。ok_flag:設置狀態標志,=0時是正常狀態,=1是設置狀態。timing:顯示狀態標志:=0正常顯示,=1閃爍設置位
  13. bit mode=1;//運行模式,1為正向計數,0為反向計數。
  14. bit fin_flag=0;//完成標志位,當反向計數結束時,此位為高電平,觸發蜂鳴器      
  15. bit set_shan;

  16. sbit beep=P3^2;         //蜂鳴器
  17. sbit key1=P3^3;         //開始停止計時數據
  18. sbit key2=P3^4;         //記錄按鈕/設置位置加
  19. sbit key3=P3^5;         //復位
  20. sbit key4=P3^6;         //模式切換
  21. sbit key5=P3^7;        //設置按鈕

  22. void delay(ui z)                //延時函數,大約延時z ms
  23. {
  24.         ui i,j;
  25.         for(i=0;i<z;i++)
  26.         for(j=0;j<121;j++);
  27. }

  28. void init()                                //初始化
  29. {
  30.         TMOD=0x11;                        //工作方式
  31.         TH0=0x3c;
  32.         TL0=0xb0;                   //定時器0賦初值
  33.         TH1=0x3c;
  34.         TL1=0xb0;                   //定時器1賦初值
  35.         ET1=1;                           //允許中斷
  36.         TR1=1;                           //定時開關
  37.         ET0=1;
  38.         TR0=0;
  39.         EA=1;                           //中斷總開關

  40.         val_index=0;           //清零
  41. }

  42. void clr()                                //清除函數
  43. {
  44.         uc i;
  45.         for(i=0;i<8;i++)        //將存儲的數據清零        for循環8次
  46.         num[i]=0;
  47. }

  48. void setup()                        //設置函數
  49. {
  50.         ok_flag=0xff;                //ok_flag賦值1
  51.         set_index=0;                //設置位置0
  52.         while (ok_flag)                //進入設置后,循環,直到ok_flag為0
  53.         {
  54.                  display();                //調用顯示函數
  55.                 if(key1==0)          //按動KEY1設置值加1   
  56.                 {
  57.                         delay(5); //延時去抖
  58.                         if(key1==0)//再次判斷按鍵是否按下
  59.                         {
  60.                                 if ((set_index==0)|(set_index==2)|(set_index==4)|(set_index==6))//設置個位數據時
  61.                                 {
  62.                                         num[set_index]++;                                         //數據加
  63.                                         if(num[set_index]==10)                                        //加到10
  64.                                         num[set_index]=0;                                                 //清零
  65.                                 }
  66.                                 else if((set_index==1)|(set_index==3)|(set_index==5)|(set_index==7))//設置十位數據時
  67.                                 {
  68.                                         num[set_index]++;                                                //數據加
  69.                                         if(num[set_index]==6)                                        //加到6時
  70.                                         num[set_index]=0;                                                //清零
  71.                                 }
  72.                                 while(!key1) display();                                                //按鍵釋放
  73.                         }
  74.                 }

  75.                 if(key2==0)         //按動KEY2設置位置加1   
  76.                 {
  77.                         delay(5);//延時去抖
  78.                         if(key2==0)//再次按下按鍵
  79.                         {
  80.                                 set_index++;              //設置位置加
  81.                                 if(set_index==8)           //設置位置加到最后一位時
  82.                                 {
  83.                                         set_index=0;         //設置位置到0
  84.                                 }
  85.                                 while(!key2) display();      //按鍵釋放
  86.                         }
  87.                 }
  88.                 if(key5==0)         //按動KEY5設置結束   
  89.                 {
  90.                         delay(5);//延時去抖
  91.                         if(key5==0)//再次判斷按鍵是否按下
  92.                         {
  93.                                 ok_flag=0x00;        //ok_flag清零
  94.                                 if((num[4]!=0)||(num[5]!=0)||(num[6]!=0)||(num[7]!=0)) //如果計時時間上限設置數據不都為0時
  95.                                 {
  96.                                 num[0]=0;num[1]=0;num[2]=0;num[3]=0;mode=1;//將正計時時間清零,Mode置1,正計時
  97.                                 }
  98.                                 else if((num[4]==0)&&(num[5]==0)&&(num[6]==0)&&(num[7]==0))//如果計時時間上限設置數據都為0時
  99.                                 {
  100.                                 if((num[0]==0)&&(num[1]==0)&&(num[2]==0)&&(num[3]==0))//判斷計時時間都為0
  101.                                 mode=1;                                                                          //正計時模式
  102.                                 else if((num[0]!=0)||(num[1]!=0)||(num[2]!=0)||(num[3]!=0))//判斷計時時間有不為0
  103.                                 mode=0;                                                                       //倒計時模式
  104.                                 }
  105.                                 while(!key5) display();         //按鍵去抖
  106.                         }  
  107.                 }
  108.         }
  109. }

  110. void display()
  111. {
  112.         uc i;
  113.         if(ok_flag!=0xff)                   //不是設置狀態時
  114.         {
  115.                 if(timing==0)                  
  116.                 {
  117.                         for(i=0;i<4;i++)
  118.                         {
  119.                                 P0=0xff;                    //清顯示
  120.                                 P2=index[i];            //選中位
  121.                                 if(i==2)                    //如果是第二位時
  122.                                 P0=tab1[num[i]];  //顯示有小數點的數據
  123.                                 else                            //不是第二位時
  124.                                 P0=tab[num[i]];   //正常顯示數據
  125.                                  delay(2);                   //修改此參數可修改刷新頻率   
  126.                         }
  127.                 }
  128.                 else                                           //設置時 閃爍相應位
  129.                 {
  130.                         if(set_shan==0)
  131.                         {
  132.                                 for(i=0;i<4;i++)
  133.                                 {
  134.                                         P0=0xff;
  135.                                         P2=index[i];
  136.                                         P0=tab[10];                 //熄滅
  137.                                          delay(2);                     //修改此參數可修改刷新頻率  
  138.                                 }
  139.                         }
  140.                         else if(set_shan==1)
  141.                         {                                                           //點亮顯示
  142.                                 for(i=0;i<4;i++)
  143.                                 {
  144.                                         P0=0xff;
  145.                                         P2=index[i];
  146.                                         if(i==2)
  147.                                         P0=tab1[num[i]];
  148.                                         else
  149.                                         P0=tab[num[i]];
  150.                                          delay(2);                   //修改此參數可修改刷新頻率   
  151.                                 }
  152.                         }
  153.                 }
  154.         }
  155.         else        //設置時
  156.         {
  157.                 if(set_shan==0)
  158.                 {
  159.                         if(set_index==0)                        //設置不同位時,閃爍相應位
  160.                         {
  161.                                 for(i=0;i<4;i++)
  162.                                 {
  163.                                         if(i==0)
  164.                                         {
  165.                                                 P2=index[0];
  166.                                                 P0=tab[10];
  167.                                                  delay(2);                  //修改此參數可修改刷新頻率  
  168.                                                 P0=0xff;
  169.                                         }
  170.                                         else
  171.                                         {
  172.                                                 P2=index[i];
  173.                                                 if(i==2)
  174.                                                 P0=tab1[num[i]];
  175.                                                 else
  176.                                                 P0=tab[num[i]];
  177.                                                  delay(2);                  //修改此參數可修改刷新頻率  
  178.                                                 P0=0xff;
  179.                                         }
  180.                                 }
  181.                         }
  182.                         else if(set_index==1)
  183.                         {
  184.                                 for (i=0;i<4;i++)
  185.                                 {
  186.                                         if(i==1)
  187.                                         {
  188.                                                 P2=index[1];
  189.                                                 P0=tab[10];
  190.                                                  delay(2);                  //修改此參數可修改刷新頻率  
  191.                                                 P0=0xff;
  192.                                         }
  193.                                         else
  194.                                         {
  195.                                                 P2=index[i];
  196.                                                 P0=tab[num[i]];
  197.                                                  delay(2);                  //修改此參數可修改刷新頻率  
  198.                                                 P0=0xff;
  199.                                         }
  200.                                 }
  201.                         }
  202.                         else if(set_index==2)
  203.                         {
  204.                                 for (i=0;i<4;i++)
  205.                                 {
  206.                                         if(i==2)
  207.                                         {
  208.                                                 P2=index[2];
  209.                                                 P0=tab[10];
  210.                                                  delay(2);                  //修改此參數可修改刷新頻率  
  211.                                                 P0=0xff;
  212.                                         }
  213.                                         else
  214.                                         {
  215.                                                 P2=index[i];
  216.                                                 if(i==2)
  217.                                                 P0=tab1[num[i]];
  218.                                                 else
  219.                                                 P0=tab[num[i]];
  220.                                                  delay(2);                  //修改此參數可修改刷新頻率  
  221.                                                 P0=0xff;
  222.                                         }
  223.                                 }
  224.                         }
  225.                         else if(set_index==3)
  226.                         {
  227.                                 for (i=0;i<4;i++)
  228.                                 {
  229.                                         if(i==3)
  230.                                         {
  231.                                                 P2=index[3];
  232.                                                 P0=tab[10];
  233.                                                  delay(2);                  //修改此參數可修改刷新頻率  
  234.                                                 P0=0xff;
  235.                                         }
  236.                                         else
  237.                                         {
  238.                                                 P2=index[i];
  239.                                                 if(i==2)
  240.                                                 P0=tab1[num[i]];
  241.                                                 else
  242.                                                 P0=tab[num[i]];
  243.                                                  delay(2);                  //修改此參數可修改刷新頻率  
  244.                                                 P0=0xff;
  245.                                         }
  246.                                 }
  247.                         }
  248.                         else if(set_index==4)
  249.                         {
  250.                                 for (i=4;i<8;i++)
  251.                                 {
  252.                                         if(i==4)
  253.                                         {
  254.                                                 P2=index[0];
  255.                                                 P0=tab[10];
  256.                                                  delay(2);                  //修改此參數可修改刷新頻率  
  257.                                                 P0=0xff;
  258.                                         }
  259.                                         else
  260.                                         {
  261.                                                 P2=index[i-4];
  262.                                                 if(i==6)
  263.                                                 P0=tab1[num[i]];
  264.                                                 else
  265.                                                 P0=tab[num[i]];
  266.                                                  delay(2);                  //修改此參數可修改刷新頻率  
  267.                                                 P0=0xff;
  268.                                         }
  269.                                 }
  270.                         }
  271.                         else if(set_index==5)
  272.                         {
  273.                                 for (i=4;i<8;i++)
  274.                                 {
  275.                                         if(i==5)
  276.                                         {
  277.                                                 P2=index[1];
  278.                                                 P0=tab[10];
  279.                                                  delay(2);                  //修改此參數可修改刷新頻率  
  280.                                                 P0=0xff;
  281.                                         }
  282.                                         else
  283.                                         {
  284.                                                 P2=index[i-4];
  285.                                                 if(i==6)
  286.                                                 P0=tab1[num[i]];
  287.                                                 else
  288.                                                 P0=tab[num[i]];
  289.                                                  delay(2);                  //修改此參數可修改刷新頻率   
  290.                                                 P0=0xff;
  291.                                         }
  292.                                 }
  293.                         }
  294.                         else if(set_index==6)
  295.                         {
  296.                                 for (i=4;i<8;i++)
  297.                                 {
  298.                                         if(i==6)
  299.                                         {
  300.                                                 P2=index[2];
  301.                                                 P0=tab[10];
  302.                                                  delay(2);                  //修改此參數可修改刷新頻率  
  303.                                                 P0=0xff;
  304.                                         }
  305.                                         else
  306.                                         {
  307.                                                 P2=index[i-4];
  308.                                                 if(i==6)
  309.                                                 P0=tab1[num[i]];
  310.                                                 else
  311.                                                 P0=tab[num[i]];
  312.                                                  delay(2);                  //修改此參數可修改刷新頻率  
  313.                                                 P0=0xff;
  314.                                         }
  315.                                 }
  316.                         }
  317.                         else if(set_index==7)
  318.                         {
  319.                                 for (i=4;i<8;i++)
  320.                                 {
  321.                                         if(i==7)
  322.                                         {
  323.                                                 P2=index[3];
  324.                                                 P0=tab[10];
  325.                                                  delay(2);                  //修改此參數可修改刷新頻率  
  326.                                                 P0=0xff;
  327.                                         }
  328.                                         else
  329.                                         {
  330.                                                 P2=index[i-4];
  331.                                                 if(i==6)
  332.                                                 P0=tab1[num[i]];
  333.                                                 else
  334.                                                 P0=tab[num[i]];
  335.                                                  delay(2);                  //修改此參數可修改刷新頻率  
  336.                                                 P0=0xff;
  337.                                         }
  338.                                 }
  339.                         }
  340.                 }
  341.                 else
  342.                 {
  343.                         if(set_index<4)
  344.                         {
  345.                                 for (i=0;i<4;i++)
  346.                                 {
  347.                                         P2=index[i];
  348.                                         if(i==2)
  349.                                         P0=tab1[num[i]];
  350.                                         else
  351.                                         P0=tab[num[i]];
  352.                                          delay(2);                   //修改此參數可修改刷新頻率  
  353.                                         P0=0xff;
  354.                                 }
  355.                         }
  356.                         else
  357.                         {
  358.                                 for (i=4;i<8;i++)
  359.                                 {
  360.                                         P2=index[i-4];
  361.                                         if(i==6)
  362.                                         P0=tab1[num[i]];
  363.                                         else
  364.                                         P0=tab[num[i]];
  365.                                          delay(2);                   //修改此參數可修改刷新頻率  
  366.                                         P0=0xff;
  367.                                 }
  368.                         }
  369.                 }
  370.         }
  371. }

  372. void alarm()
  373. {
  374.         if((num[4]==0)&&(num[5]==0)&&(num[6]==0)&&(num[7]==0))                  //計時時間到0時
  375.         {timing=0;}                                                                                          //開始報警
  376.         else
  377.         {
  378.             if((num[4]==num[0])&&(num[6]==num[2])&&(num[5]==num[1])&&(num[7]==num[3])) //設置上限模式時,計時時間到
  379.                 {timing=1;TR0=0;}                                                        //停止計時,并閃爍顯示
  380.         }
  381. }

  382. void main()
  383. {
  384.         uc h,g,k;
  385.         init();
  386.         clr();
  387.         while(1)
  388.         {
  389.                  display();                 //刷屏顯示數碼管  
  390.                 alarm();
  391.                 if(key1==0)             //開始/暫停按鈕
  392.                 {
  393.                         delay(5);
  394.                         if(key1==0)
  395.                         {
  396.                                 TR0=~TR0;
  397.                                 while(!key1) display();
  398.                         }
  399.                 }
  400.                 if(key2==0)                   //記錄按鈕
  401.                 {
  402.                         delay(5);
  403.                         if(key2==0)
  404.                         {
  405.                                 if(TR0==1)       //當在運行中按下記錄鍵則存儲記錄   
  406.                                 {
  407.                                         for(g=1;g<10;g++)
  408.                                         {
  409.                                                 for(k=0;k<4;k++)
  410.                                                 {
  411.                                                         val[g-1][k]=val[g][k];           //低位存儲的數據向高位移一位
  412.                                                 }
  413.                                         }
  414.                                         for(h=0;h<4;h++)
  415.                                         {
  416.                                                 val[9][h]=num[h];      //將當前時間存儲  
  417.                                         }
  418.                                 }
  419.                         else //在停止狀態下按下記錄鍵查看記錄,按動一次序列遞減一次,即查看上一次記錄   
  420.                                 {
  421.                                         for(h=0;h<4;h++)
  422.                                         num[h]=val[val_index][h];   //將當前時間存儲
  423.                                         val_index--;
  424.                                         if(val_index<0)
  425.                                         val_index=9;
  426.                                 }
  427.                                 while(!key2) display();                //按鍵釋放
  428.                         }
  429.                 }
  430.                 if(key3==0)          //復位按鈕
  431.                 {
  432.                         delay(5);
  433.                         if(key3==0)
  434.                         {
  435.                                 clr();                                         //將數據清零
  436.                                 while(!key3) display();              //按鍵釋放
  437.                         }  
  438.                 }
  439.                 if((key4==0)&&(TR0==0))          /    /模式選擇按鈕,僅在停止狀態下有效   
  440.                 {
  441.                         delay(5);
  442.                         if(key4==0)
  443.                         {
  444.                                 mode=~mode;                                 //正計時倒計時切換
  445.                                 while(!key4) display();
  446.                         }  
  447.                 }
  448.                 if((key5==0)&&(TR0==0))            //時間設置,僅在停止狀態下有效
  449.                 {
  450.                         delay(5);
  451.                         if(key5==0)
  452.                         {
  453.                                 while(!key5)
  454.                                 display();
  455.                                 setup();                   //調用設置函數
  456.                         }
  457.                 }
  458.         }
  459. }  

  460. void T0_time() interrupt 1
  461. {
  462.         uc m;
  463.         TH0=0x3c;                                  //12M晶振定時器定時時間為50ms
  464.         TL0=0xb0;
  465.         m++;
  466.         if(m==20)
  467.         {
  468.                 m=0;
  469.                 if(mode==1)                        //正向計數
  470.                 {
  471.                         num[0]++;                                  //秒個位加
  472.                         if(num[0]==10)                          //秒個位加到10時
  473.                         {
  474.                                 num[0]=0;                          //個位清零
  475.                                 num[1]++;                          //秒十位加
  476.                                 if(num[1]==6)                  //秒十位加到6時
  477.                                 {
  478.                                         num[1]=0;                  //秒十位清零
  479.                                         num[2]++;                  //分個位加
  480.                                         if(num[2]==10)          //分個位加到10時
  481.                                         {
  482.                                                  num[2]=0;          //分個位清零
  483.                                                 num[3]++;          //分十位加
  484.                                                 if(num[3]==10)//分十位加到10時
  485.                                                 num[3]=0;          //分十位清零
  486.                                         }
  487.                                 }
  488.                         }
  489.                 }
  490.                 else
  491.                 {
  492.                         num[0]--;                                 //秒個位減
  493.                         if(num[0]>9)         //小于0時,該數字的最高位會變1,所以判斷是否大于9        下同
  494.                         {
  495.                                 num[0]=9;
  496.                                 num[1]--;
  497.                                 if(num[1]>5)
  498.                                 {
  499.                                         num[1]=5;
  500.                                         num[2]--;
  501.                                         if(num[2]>9)
  502.                                         {
  503.                                                  num[2]=9;
  504.                                                 num[3]--;
  505.                                                 if(num[3]>9)
  506.                                                 {
  507.                                                         num[3]=0;
  508.                                                         TR0=0;
  509.                                                         fin_flag=1;
  510.                                                         clr();
  511.                                                 }
  512.                                         }
  513.                                 }
  514.                         }
  515.                 }
  516.         }
  517. }

  518. void T1_time() interrupt 3                                  //定時器1的工作函數
  519. {
  520.         uc shan,beep_stop;
  521.         TH1=0x3c;
  522.         TL1=0xb0;                                                          //重新賦初值
  523.         shan++;                                                         //閃爍變量加
  524.         if(shan==10)                                                  //加到10時(500ms)
  525.         {
  526.                 shan=0;                                                          //清零
  527.                 set_shan=~set_shan;                                  //設置的閃爍變量取反
  528.                 if((fin_flag)||(timing))               //當反向計數完成時  或計時時間到時   
  529.                 {
  530.                         beep_stop++;                        
  531.                         beep=~beep;                                     //蜂鳴器閃爍響
  532.                         if(beep_stop==10)                          //蜂鳴器響五聲停止
  533.                         {
  534.                                 fin_flag=0;
  535.                                 timing=0;
  536.                                 num[4]=0;num[5]=0;num[6]=0;num[7]=0;
  537.                                 beep_stop=0;
  538.                                 beep=1;
  539.                         }
  540.                 }
  541.         }
  542. }

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

使用道具 舉報

沙發
ID:273292 發表于 2018-1-24 10:46 | 只看該作者
給你調試下,發現你數組沒有搞清楚,多看看書,把數組搞明白就行啦
回復

使用道具 舉報

板凳
ID:222948 發表于 2018-1-24 11:10 | 只看該作者
num是一個數組不是省略【】,就可以看成首地址,指針不是這樣用的,至少寫成num或者num【i】
回復

使用道具 舉報

地板
ID:251339 發表于 2018-1-25 15:48 | 只看該作者
經過調試程序:發現 if((key4==0)&&(TR0==0))          /    /模式選擇按鈕,僅在停止狀態下有效
                     此行(450)注釋說明這個雙斜杠沒打對,文字亂入代碼。把中間空格刪除就好了。
回復

使用道具 舉報

5#
ID:272625 發表于 2018-4-3 00:13 | 只看該作者
MYSFXY 發表于 2018-1-25 15:48
經過調試程序:發現 if((key4==0)&&(TR0==0))          /    /模式選擇按鈕,僅在停止狀態下有效
        ...

謝謝你
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区视频在线 | 精品欧美乱码久久久久久 | 日韩精品成人在线 | 黄色免费在线网址 | 亚洲欧洲精品在线 | av官网在线 | 免费不卡一区 | 久久国产婷婷国产香蕉 | 中文字幕在线一区 | 国产精品亚洲成在人线 | 中文在线一区二区 | 国产精品亚洲第一 | 成人免费av在线 | 久久高清精品 | 日日天天 | 国产成人99久久亚洲综合精品 | 亚洲天堂久久新 | 国产精品成人在线播放 | 久久久久亚洲av毛片大全 | 91看片在线观看 | 色婷婷综合久久久中字幕精品久久 | 日韩一区二区av | 九九99久久| 国产精品69毛片高清亚洲 | 国产精品一区二区三区四区五区 | 亚洲精品乱码久久久久久黑人 | 久久久女| 国产精品免费一区二区三区 | 婷婷亚洲综合 | 欧美老妇交乱视频 | 国产一区三区在线 | 美女黄视频网站 | 日韩精品一区二区三区高清免费 | yeyeav| 在线免费毛片 | 欧美日韩国产一区二区三区 | 久久久久久久久久久91 | 国产精品久久一区二区三区 | 欧美偷偷操 | 国产美女在线观看 | 国产电影一区二区在线观看 |