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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機多功能電子時鐘程序 按鍵的嵌套問題

[復制鏈接]
跳轉到指定樓層
樓主
不知道為什么按鍵S2在按鍵S1包含里面不起作用,本來是想用按鍵S2設定鬧鐘模式,按下S1,進入調時模式,再按下S2會小時加1,之后再按第二次S1,會回到顯示時間模式。求大佬解答,主要是搞不懂按鍵的嵌套

單片機源程序如下:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4.          sbit s1=P0^0;
  5. sbit s2=P0^1;
  6. uchar code duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  7. uchar  xiao[8];
  8. uchar  weima[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  9. uint cnt=0,shi,fen,miao,knum;
  10. unsigned  long sec=0;
  11. void anjian();
  12. void delayms(int x);
  13. void displayo(uchar miao,uchar fen,uchar shi);
  14. void display();

  15. void anjian()
  16. {
  17.         static  uchar smiao,sfen,sshi,press;
  18.                         
  19.                   if(!s2)
  20.          {
  21.                  delayms(10);
  22.                  if(!s2)
  23.                  {
  24.                         
  25.                          press++;
  26.                          if(press==1)
  27.                          {
  28.                           smiao=miao,sfen=fen,sshi=shi;
  29.                           TR0=0;
  30.                  displayo(smiao,sfen,sshi);
  31.                  display();
  32.                                   if(!s1)
  33.          {
  34.                 delayms(5);
  35.                  if(!s1)
  36.                  {
  37.                         while(!s1)
  38.                         {
  39.                                         knum++;
  40.                                 delayms(5);
  41.                                 if(knum==100)
  42.                                 {
  43.                                                 knum=0;
  44.                                         while(!s1)
  45.                                         {
  46.                                                 
  47.                                                         if(sshi<23)
  48.                                                         {
  49.                                                                         sshi++;
  50.                                                 displayo(smiao,sfen,sshi);
  51.                                                                 display();
  52.                                                                 delayms(70);
  53.                                                         }
  54.                                                 
  55.                                                 else
  56.                                                         sshi=0;
  57.                                                                
  58.                                   }
  59.                           }
  60.                    }
  61.                         

  62.                         knum=0;
  63.                         if(sshi<23)
  64.                                 sshi++;
  65.                         else
  66.                                 sshi=0;
  67.                  }
  68.                  }
  69.                          }

  70.                          if(press==2)
  71.                          {
  72.                                  press=0;
  73.                                  miao=smiao,fen=sfen,shi=sshi;
  74.                          TR0=1;
  75.          
  76.                          }
  77.     }
  78. }
  79.          displayo(miao,fen,shi);
  80. display();
  81. }

  82.          
  83.          
  84.          
  85.         void displayo(uchar miao,uchar fen,uchar shi)
  86.         
  87.         {
  88.                  xiao[0]=duanma[shi/10];
  89.                  xiao[1]=duanma[shi%10];
  90.                  xiao[2]=0x40;         
  91.      xiao[3]=duanma[fen/10];
  92.                  xiao[4]=duanma[fen%10];
  93.                  xiao[5]=0x40;
  94.                  xiao[6]=duanma[miao/10];
  95.                  xiao[7]=duanma[miao%10];
  96.         }               
  97.         
  98.         void display()
  99.         {
  100.                  uchar i;
  101.                         for(i=0;i<8;i++)
  102.                  {
  103.                    P1=weima[i];
  104.                    P2=xiao[i];
  105.                    delayms(1);
  106.                
  107.                   }
  108.         }
  109. void delayms(uint x)  
  110. {
  111.       uint i,  j;
  112.       for(j=0;j<x;j++)
  113.            for(i=0;i<120;i++);
  114. }
  115. void main()
  116. {
  117.   
  118.    EA=1;
  119.    TMOD=0x01;
  120.    TH0=15536/256;
  121.    TL0=15536%256;
  122.    ET0=1;
  123.    TR0=1;
  124.   while(1)
  125.    {

  126.                 display();
  127.                  anjian();
  128.                  }
  129.                  }
  130. void time() interrupt 1
  131. {
  132.          TH0=15536/256;
  133.            TL0=15536%256;
  134.            cnt++;

  135.            if(cnt==20)
  136.            {
  137.              cnt=0;
  138.                    miao++;
  139.                          if(miao==60)
  140.                          {
  141.                                         miao=0;
  142.                                  fen++;
  143.                                  if(fen==60)
  144.                                  {
  145.                                                 fen=0;
  146.                                          shi++;
  147.                                          if(shi==24)
  148.                                          {
  149.                                                         shi=0;
  150.                                          }
  151.                                  }
  152.                          }
  153.                
  154.           }
  155.                 displayo(miao,fen,shi);
  156. }
  157.    
  158.   
復制代碼
全部資料51hei下載地址:
電子時鐘.zip (131.76 KB, 下載次數: 11)

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

使用道具 舉報

沙發
ID:332444 發表于 2020-6-16 11:55 | 只看該作者
回復

使用道具 舉報

板凳
ID:213173 發表于 2020-6-16 21:13 | 只看該作者
按鍵程序改這樣試試
  1. char shi,fen,miao,sshi,sfen;
  2. void anjian()
  3. {
  4.         static  uchar press;
  5.         if(!s1||!s2||!s3)
  6.         {
  7.                 delayms(10);
  8.                 if(!s1||!s2||!s3)
  9.                 {
  10.                         if(!s1)
  11.                         {
  12.                                 press++;
  13.                                 if(press==6)
  14.                                 {
  15.                                         press=0;
  16.                                 }
  17.                         }
  18.                         if(!s2 && press!=0)
  19.                         {
  20.                                 if(press==1)
  21.                                 {
  22.                                         shi++;
  23.                                         if(shi>23)shi=0;
  24.                                 }
  25.                                 if(press==2)
  26.                                 {
  27.                                         fen++;
  28.                                         if(fen>59)fen=0;
  29.                                 }
  30.                                 if(press==3)
  31.                                 {
  32.                                         miao++;
  33.                                         if(miao>59)miao=0;
  34.                                 }
  35.                                 if(press==4)
  36.                                 {
  37.                                         sshi++;
  38.                                         if(sshi>23)sshi=0;
  39.                                 }
  40.                                 if(press==5)
  41.                                 {
  42.                                         sfen++;
  43.                                         if(sfen>59)sfen=0;
  44.                                 }
  45.                         }
  46.                         if(!s3 && press!=0)
  47.                         {
  48.                                 if(press==1)
  49.                                 {
  50.                                         shi--;
  51.                                         if(shi<0)shi=23;
  52.                                 }
  53.                                 if(press==2)
  54.                                 {
  55.                                         fen--;
  56.                                         if(fen<0)fen=59;
  57.                                 }
  58.                                 if(press==3)
  59.                                 {
  60.                                         miao--;
  61.                                         if(miao<0)miao=59;
  62.                                 }
  63.                                 if(press==4)
  64.                                 {
  65.                                         sshi--;
  66.                                         if(sshi<0)sshi=23;
  67.                                 }
  68.                                 if(press==5)
  69.                                 {
  70.                                         sfen--;
  71.                                         if(sfen<0)sfen=59;
  72.                                 }
  73.                         }
  74.                         while(!s1&&!s2&&!s3);
  75.                 }
  76.         }
  77. }
復制代碼
回復

使用道具 舉報

地板
ID:702201 發表于 2020-6-17 11:06 | 只看該作者
wulin 發表于 2020-6-16 21:13
按鍵程序改這樣試試

大佬,請問你這個按鍵短按一下會跳數,不能設置成短按加1,長按跳數,在不加等待按鍵釋放的情況下?因為數碼管調時時會閃爍
回復

使用道具 舉報

5#
ID:702201 發表于 2020-6-17 11:07 | 只看該作者
xianfajushi 發表于 2020-6-16 11:55
可參https://ask.csdn.net/questions/1078609

這個按鍵加了等待釋放,調時時數碼管會閃爍的,還有沒有讓它在不閃爍的情況下調整時間
回復

使用道具 舉報

6#
ID:213173 發表于 2020-6-17 15:01 | 只看該作者
hhhjjjj 發表于 2020-6-17 11:06
大佬,請問你這個按鍵短按一下會跳數,不能設置成短按加1,長按跳數,在不加等待按鍵釋放的情況下?因為 ...

要想短按+/-1,長按連+/-并且不干擾數碼管必須去掉delayms阻滯延時和while(xxx)松手等待,改為計數法消抖。
  1. #define key_S 20                                //宏定義短按(約15ms)
  2. #define key_L key_S*35                        //宏定義長按(約500ms)
  3. #define key_I key_S*27                        //宏定義長按連+/-間隔(約120ms)
  4. char shi,fen,miao,sshi,sfen;
  5. uchar press;
  6. void anjian()
  7. {
  8.         static unsigned int time=0;
  9.         if(!s1||!s2||!s3)
  10.         {
  11.                 time++;
  12.                 if(time>key_L)//長按有效
  13.                         time=key_I;//連+/-間隔
  14.                 if(time==key_S)//短按消抖
  15.                 {
  16.                         if(!s1)
  17.                         {
  18.                                 press++;
  19.                                 if(press==6)
  20.                                 {
  21.                                         press=0;
  22.                                 }
  23.                         }
  24.                 }
  25.                 if(time==key_S||time==key_L)//短按消抖或長按連+/-
  26.                 {
  27.                         if(!s2 && press!=0)
  28.                         {
  29.                                 if(press==1)
  30.                                 {
  31.                                         shi++;
  32.                                         if(shi>23)shi=0;
  33.                                 }
  34.                                 if(press==2)
  35.                                 {
  36.                                         fen++;
  37.                                         if(fen>59)fen=0;
  38.                                 }
  39.                                 if(press==3)
  40.                                 {
  41.                                         miao++;
  42.                                         if(miao>59)miao=0;
  43.                                 }
  44.                                 if(press==4)
  45.                                 {
  46.                                         sshi++;
  47.                                         if(sshi>23)sshi=0;
  48.                                 }
  49.                                 if(press==5)
  50.                                 {
  51.                                         sfen++;
  52.                                         if(sfen>59)sfen=0;
  53.                                 }
  54.                         }
  55.                         if(!s3 && press!=0)
  56.                         {
  57.                                 if(press==1)
  58.                                 {
  59.                                         shi--;
  60.                                         if(shi<0)shi=23;
  61.                                 }
  62.                                 if(press==2)
  63.                                 {
  64.                                         fen--;
  65.                                         if(fen<0)fen=59;
  66.                                 }
  67.                                 if(press==3)
  68.                                 {
  69.                                         miao--;
  70.                                         if(miao<0)miao=59;
  71.                                 }
  72.                                 if(press==4)
  73.                                 {
  74.                                         sshi--;
  75.                                         if(sshi<0)sshi=23;
  76.                                 }
  77.                                 if(press==5)
  78.                                 {
  79.                                         sfen--;
  80.                                         if(sfen<0)sfen=59;
  81.                                 }
  82.                         }
  83.                 }
  84.         }
  85.         else time=0;
  86. }
復制代碼
回復

使用道具 舉報

7#
ID:702201 發表于 2020-6-17 15:31 | 只看該作者
wulin 發表于 2020-6-17 15:01
要想短按+/-1,長按連+/-并且不干擾數碼管必須去掉delayms阻滯延時和while(xxx)松手等待,改為計數法消抖 ...

(按S1  到數碼管為4再按S4進入鬧鐘設置模式,)還有就是為什么我按S4進入鬧鐘模式時,displayo(smiao,sfen,sshi),顯示不出來。還有就是想問一下display(uchar miao,uchar fen, uchar shi)適用于display(smiao,sfen,sshi)嗎?還是說我要寫兩個display(),?



  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4.          sbit s1=P0^0;
  5. sbit s2=P0^1;
  6. sbit s3=P0^2;
  7. sbit s4=P0^3;
  8. uchar code duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  9. uchar  xiao[8];
  10. uchar  weima[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  11. uint cnt=0,shi,fen,miao,knum,smiao,sshi,sfen;
  12. uchar k;
  13. unsigned  long sec=0;
  14. void anjian();
  15. void delayms(int x);
  16. void displayo(uchar miao,uchar fen,uchar shi);
  17. void display();

  18. void anjian()
  19. {

  20.                                  
  21. static  uchar press,press1;
  22.           //tiao shizhong
  23.         if(!s1||!s2||!s3)
  24.         {
  25.                 delayms(10);
  26.                 if(!s1||!s2||!s3)
  27.                 {
  28.                         if(!s1)
  29.                         {
  30.                                 press++;
  31.                                                                                                              k++;
  32.                                                                                                         delayms(200);
  33.                                                                                                         if(k==7)
  34.                                                                                                                 k=0;
  35.                                                                                                
  36.                                 if(press==4)
  37.                                 {
  38.                                         press=0;
  39.                                 }
  40.                                                                                                                                 while(!s1);
  41.                         }
  42.                         if(!s2 && press!=0)
  43.                         {
  44.                                 if(press==1)
  45.                                 {
  46.                                                                                                                                        
  47.                                         shi++;
  48.                                         if(shi>23)
  49.                                                                                                                                                                         shi=0;
  50.                                                                                                                                                                
  51.                                                                                                                                                        
  52.                                        
  53.                                                                                                                         }
  54.                                 if(press==2)
  55.                                 {
  56.                                         fen++;
  57.                                         if(fen>59)fen=0;
  58.                                 }
  59.                                 if(press==3)
  60.                                 {
  61.                                         miao++;
  62.                                         if(miao>59)miao=0;
  63.                                 }
  64.                               
  65.                                                                                                                                 while(!s2)        ;
  66.                         }
  67.                         if(!s3 && press!=0)
  68.                         {
  69.                                 if(press==1)
  70.                                 {
  71.                                         shi--;
  72.                                         if(shi<0)shi=23;
  73.                                 }
  74.                                 if(press==2)
  75.                                 {
  76.                                         fen--;
  77.                                         if(fen<0)fen=59;
  78.                                 }
  79.                                 if(press==3)
  80.                                 {
  81.                                         miao--;
  82.                                         if(miao<0)miao=59;
  83.                                 }
  84.                                 
  85.                                                                                                                                 while(!s3);
  86.                         }
  87.                                                                                                  while(!s1&&!s2&&!s3);
  88.                                                                                         }
  89.                                                                                
  90.                                                                                                
  91.                                                                                 }       
  92.                                                                                                
  93.                                                                                                 //tiao naozhong
  94.                                                                                                
  95.                                                                                                        
  96.                                                                                                   if(!s4||!s2||!s3)
  97.                                                                 {
  98.                                                                                 delayms(10);               
  99.                 if(!s4||!s2||!s3)
  100.                 {
  101.                                                                                
  102.                         if(!s4)
  103.                         {
  104.                                                                                                                                        
  105.                                                                                                
  106.                                                                                                
  107.                                                                                                         delayms(10);
  108.                                                                                                        
  109.                                 press1++;
  110.                                                                                                              TR0=0;
  111.                                                                                                         displayo(smiao,sfen,sshi);
  112.                                                                                                               display();
  113.                                                                                                
  114.                                                                                                        
  115.                                                                                                
  116.                                 if(press1==4)
  117.                                 {
  118.                                         press1=0;
  119.                                                                                                                                               TR0=1;
  120.                                 }
  121.                                                                                                                                 while(!s4);
  122.                                                                                                                                
  123.                                                                                                                                                
  124.                                                                                                                                
  125.                         }
  126.                         if(!s2 && press1!=0)
  127.                         {
  128.                                                                                                                
  129.                                 if(press1==1)
  130.                                 {
  131.                                                                                                                                        
  132.                                         sshi++;
  133.                                         if(sshi>23)
  134.                                                                                                                                                                         sshi=0;
  135.                                                                                                                                                                
  136.                                                                                                                                                        
  137.                                        
  138.                                                                                                                         }
  139.                                 if(press1==2)
  140.                                 {
  141.                                         sfen++;
  142.                                         if(sfen>59)
  143.                                                                                                                                                                         sfen=0;
  144.                                 }
  145.                                 if(press1==3)
  146.                                 {
  147.                                         smiao++;
  148.                                         if(smiao>59)
  149.                                                                                                                                                                         smiao=0;
  150.                                 }
  151.                            
  152.                                                                                                                                
  153.                                                                                                                                          displayo(smiao,sfen,sshi);
  154.                                                                                                               display();
  155.                                                                                                                                
  156.                                                                                                                                 while(!s2)        ;
  157.                         }
  158.                         if(!s3 && press1!=0)
  159.                         {
  160.                                                                                                                
  161.                                 if(press1==1)
  162.                                 {
  163.                                         sshi--;
  164.                                         if(sshi<0)
  165.                                                                                                                                                                         sshi=23;
  166.                                                                                                                                                                        
  167.                                 }
  168.                                 if(press1==2)
  169.                                 {
  170.                                         sfen--;
  171.                                         if(sfen<0)
  172.                                                                                                                                                                         sfen=59;
  173.                                                                                                                                                                                
  174.                                 }
  175.                                 if(press1==3)
  176.                                 {
  177.                                         smiao--;
  178.                                         if(smiao<0)
  179.                                                                                                                                                                         smiao=59;
  180.                                                                                                                                                                        
  181.                                 }
  182.                               
  183.                                                                                                                                 displayo(smiao,sfen,sshi);
  184.                                                                                                               display();
  185.                                                                                                                                 while(!s3);
  186.                         }
  187.                                                                                                
  188.                                                                                                
  189.                                                                                                
  190.                                                                                                
  191.                         while(!s4&&!s2&&!s3);
  192.                 }
  193.         
  194. }
  195.        
  196. }

  197.          
  198.          
  199.          
  200.         void displayo(uchar miao,uchar fen,uchar shi)
  201.        
  202.         {
  203.                  xiao[0]=duanma[shi/10];
  204.                  xiao[1]=duanma[shi%10];
  205.                  xiao[2]=0x40;         
  206.      xiao[3]=duanma[fen/10];
  207.                  xiao[4]=duanma[fen%10];
  208.                  xiao[5]=0x40;
  209.                  xiao[6]=duanma[miao/10];
  210.                  xiao[7]=duanma[miao%10];
  211.         }               
  212.        
  213.         void display()
  214.         {
  215.                  uchar i;
  216.                         for(i=0;i<8;i++)
  217.                  {
  218.                    P1=weima[i];
  219.                    P2=xiao[i];
  220.                    delayms(1);
  221.                          P3=duanma[k];
  222.                          delayms(5);
  223.                          
  224.                
  225.                  }
  226.         }
  227. void delayms(uint x)  
  228. {
  229.       uint i,  j;
  230.       for(j=0;j<x;j++)
  231.            for(i=0;i<120;i++);
  232. }
  233. void main()
  234. {
  235.   
  236.    EA=1;
  237.    TMOD=0x01;
  238.    TH0=15536/256;
  239.    TL0=15536%256;
  240.    ET0=1;
  241.    TR0=1;
  242.   while(1)
  243.    {

  244.                 display();
  245.                  anjian();
  246.                         
  247.                  }
  248.                  }
  249. void time() interrupt 1
  250. {
  251.          TH0=15536/256;
  252.            TL0=15536%256;
  253.            cnt++;

  254.            if(cnt==20)
  255.            {
  256.              cnt=0;
  257.                    miao++;
  258.                          if(miao==60)
  259.                          {
  260.                                         miao=0;
  261.                                  fen++;
  262.                                  if(fen==60)
  263.                                  {
  264.                                                 fen=0;
  265.                                          shi++;
  266.                                          if(shi==24)
  267.                                          {
  268.                                                         shi=0;
  269.                                          }
  270.                                  }
  271.                          }
  272.                
  273.           }
  274.                 displayo(miao,fen,shi);
  275. }
  276.    
  277.   
復制代碼
回復

使用道具 舉報

8#
ID:213173 發表于 2020-6-17 23:19 | 只看該作者
hhhjjjj 發表于 2020-6-17 15:31
(按S1  到數碼管為4再按S4進入鬧鐘設置模式,)還有就是為什么我按S4進入鬧鐘模式時,displayo(smiao,sf ...

給你寫的示例,有詳細注釋,你看明白了就能解決你目前所有問題。 按鍵長短按時鐘 鬧鐘仿真.zip (139.41 KB, 下載次數: 11)



回復

使用道具 舉報

9#
ID:702201 發表于 2020-6-18 11:18 | 只看該作者
wulin 發表于 2020-6-17 23:19
給你寫的示例,有詳細注釋,你看明白了就能解決你目前所有問題。

進入鬧鐘模式,為什么秒位不顯示?

回復

使用道具 舉報

10#
ID:702201 發表于 2020-6-20 21:40 | 只看該作者
wulin 發表于 2020-6-17 23:19
給你寫的示例,有詳細注釋,你看明白了就能解決你目前所有問題。
  1. 為什么改為鎖存器就沒有用了?
復制代碼
  1. #include<reg52.h>
  2. #define key_S 20     
  3. #define key_L key_S*35      
  4. #define key_I key_S*27   

  5. sbit s1=P3^0;
  6. sbit s2=P3^1;
  7. sbit s3=P3^2;
  8. sbit LED=P3^3;
  9. sbit buzzer=P3^4;

  10. sbit scduan=P2^2;
  11. sbit scwei=P2^3;
  12. sbit xian=P1;

  13. unsigned char code table[]={//12ÑôêyÂë1ü¶ÎÂë"0~f-."
  14.                 0xc0,0xf9,0xa4,0xb0,
  15.                 0x99,0x92,0x82,0xf8,
  16.                 0x80,0x90,0x88,0x83,
  17.                 0xc6,0xa1,0x86,0x8e,0xbf,0x7f};
  18. unsigned char code welai[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
  19. unsigned char buf[]={0,0,0xbf,0,0,0xbf,0,0};

  20. char shi=0,fen=0,sec=0,sshi=0,sfen=0;
  21. unsigned char press;
  22. unsigned char num=0;
  23. bit bell=0;
  24. bit voice=0;
  25. //Ñóê±oˉêy
  26. void delayms(unsigned int k)        
  27. {
  28.         unsigned int i,j;
  29.         for(i=k;i>0;i--)
  30.                 for(j=110;j>0;j--);
  31. }
  32. //°′¼üé¨Ãè
  33. void keyscan()
  34. {
  35.         static unsigned int time=0;
  36.         if(!s1||!s2||!s3)
  37.         {
  38.                 time++;
  39.                 if(time>key_L)
  40.                         time=key_I;
  41.                 if(time==key_S)
  42.                 {
  43.                         if(!s1)
  44.                         {
  45.                                 press++;
  46.                                 if(press>6)
  47.                                 {
  48.                                         press=0;
  49.                                 }
  50.                         }
  51.                 }
  52.                 if(time==key_S||time==key_L)
  53.                 {
  54.                         if(!s2 && press!=0)
  55.                         {
  56.                                 if(press==1)
  57.                                 {
  58.                                         shi++;
  59.                                         if(shi>23)shi=0;
  60.                                 }
  61.                                 if(press==2)
  62.                                 {
  63.                                         fen++;
  64.                                         if(fen>59)fen=0;
  65.                                 }
  66.                                 if(press==3)
  67.                                 {
  68.                                         sec++;
  69.                                         if(sec>59)sec=0;
  70.                                 }
  71.                                 if(press==4)
  72.                                 {
  73.                                         sshi++;
  74.                                         if(sshi>23)sshi=0;
  75.                                 }
  76.                                 if(press==5)
  77.                                 {
  78.                                         sfen++;
  79.                                         if(sfen>59)sfen=0;
  80.                                 }
  81.                                 if(press==6)
  82.                                 {
  83.                                         bell=~bell;
  84.                                 }
  85.                         }
  86.                         if(!s3 && press!=0)
  87.                         {
  88.                                 if(press==1)
  89.                                 {
  90.                                         shi--;
  91.                                         if(shi<0)shi=23;
  92.                                 }
  93.                                 if(press==2)
  94.                                 {
  95.                                         fen--;
  96.                                         if(fen<0)fen=59;
  97.                                 }
  98.                                 if(press==3)
  99.                                 {
  100.                                         sec--;
  101.                                         if(sec<0)sec=59;
  102.                                 }
  103.                                 if(press==4)
  104.                                 {
  105.                                         sshi--;
  106.                                         if(sshi<0)sshi=23;
  107.                                 }
  108.                                 if(press==5)
  109.                                 {
  110.                                         sfen--;
  111.                                         if(sfen<0)sfen=59;
  112.                                 }
  113.                                 if(press==6)
  114.                                 {
  115.                                         bell=~bell;
  116.                                 }
  117.                         }
  118.                 }
  119.         }
  120.         else time=0;
  121. }

  122. void display()
  123. {
  124.         static unsigned char i=0;
  125.         if(press<4)//ê±Öó
  126.         {
  127.                 buf[0]=table[shi/10];
  128.                 buf[1]=table[shi%10];
  129.                 buf[3]=table[fen/10];
  130.                 buf[4]=table[fen%10];
  131.                 buf[6]=table[sec/10];
  132.                 buf[7]=table[sec%10];
  133.         }
  134.         else //ÄÖÖó
  135.         {
  136.                 buf[0]=table[sshi/10];
  137.                 buf[1]=table[sshi%10];
  138.                 buf[3]=table[sfen/10];
  139.                 buf[4]=table[sfen%10];               
  140.                 if(bell)
  141.                 {
  142.                         buf[6]=0xa3;//'OK'
  143.                         buf[7]=0x8f;
  144.                 }
  145.                 else  
  146.                 {
  147.                         buf[6]=0xab;//'NO'
  148.                         buf[7]=0xa3;   
  149.                 }
  150.         }
  151.                 xian=0x00;   
  152.         scduan=1;
  153.         scduan=0;
  154.         
  155.         
  156.         P1=welai[i];
  157.         scwei=1;
  158.         scwei=0;
  159.         

  160.         if(press==1&&i==1)
  161.                 P1=buf[i]&0x7f;
  162.         else if(press==2&&i==4)
  163.                 P1=buf[i]&0x7f;
  164.         else if(press==3&&i==7)
  165.                 P1=buf[i]&0x7f;
  166.         else if(press==4&&i==1)
  167.                 P1=buf[i]&0x7f;
  168.         else if(press==5&&i==4)
  169.                 P1=buf[i]&0x7f;
  170.         else if(press==6&&i==7)
  171.                 P1=buf[i]&0x7f;
  172.         else if(press==0&&i==7&&bell==1)
  173.                 P1=buf[i]&0x7f;
  174.         else P1=buf[i];
  175. scduan=1;
  176.         scduan=0;  
  177.         i++,i%=8;     

  178. }

  179. void InitTimer(void)
  180. {
  181.         TMOD = 0x21;
  182.         TH0 = 0x3C;
  183.         TL0 = 0xB0;
  184.         TL1 = 0x38;
  185.         TH1 = 0x38;
  186.         EA = 1;
  187.         ET0 = 1;
  188.         ET1 = 1;
  189.         TR0 = 1;
  190.         TR1 = 0;
  191. }

  192. void alarm()
  193. {
  194.         if((shi==sshi)&&(fen==sfen)&&(sec<30)&&(bell==1)&&(voice==0))
  195.         {
  196.                 TR1=1;
  197.         }
  198.         else
  199.         {
  200.                 TR1=0;
  201.                 buzzer=1;
  202.         }
  203. }

  204. void main()
  205. {
  206.         InitTimer();
  207.         while(1)
  208.         {
  209.                 keyscan();
  210.                 display();
  211.                 alarm();
  212.                 delayms(1);
  213.         }
  214. }

  215. void Timer0Interrupt() interrupt 1
  216. {
  217.         TH0 = 0x3C;
  218.         TL0 = 0xB0;
  219.         num++;
  220.         if(num%5==0)
  221.                 voice=~voice;        
  222.         if(num==20)
  223.         {
  224.                 num=0;
  225.                 sec++;
  226.                 LED=~LED;
  227.                 if(sec>59)
  228.                 {
  229.                         sec=0;
  230.                         fen++;
  231.                         if(fen>59)
  232.                         {
  233.                                 fen=0;
  234.                                 shi++;
  235.                                 if(shi>23)
  236.                                 shi=0;
  237.                         }
  238.                 }
  239.         }
  240. }

  241. void Timer1Interrupt() interrupt 3
  242. {
  243.         buzzer=~buzzer;        
  244. }
復制代碼

新建文件夾.zip (103.99 KB, 下載次數: 2)
回復

使用道具 舉報

11#
ID:702201 發表于 2020-6-21 10:44 | 只看該作者
wulin 發表于 2020-6-17 23:19
給你寫的示例,有詳細注釋,你看明白了就能解決你目前所有問題。

為什么我用鎖存器就不能正常顯示??

新建文件夾.zip

103.99 KB, 下載次數: 3

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 神马影院一区二区三区 | 免费久久久久久 | 少妇精品久久久久久久久久 | 欧美涩涩网 | 国内精品久久久久久 | 99视频 | 91成人精品 | 在线成人一区 | 国产精品久久国产精品 | 最新国产精品精品视频 | 国产精品日韩欧美一区二区三区 | 成人精品一区二区三区中文字幕 | 久久精品视频在线观看 | 国产精品国色综合久久 | 日韩电影一区二区三区 | 成人在线一区二区 | 欧美精选一区二区 | 欧美久久精品一级黑人c片 91免费在线视频 | 日韩av看片 | 久久久久久久久91 | 日韩色视频 | 国产乱码精品一品二品 | 日韩久久综合 | www.yw193.com | 欧美激情综合 | 久久久久久国产精品免费免费狐狸 | 亚洲三级在线观看 | 国产精品18久久久久久白浆动漫 | av在线播放不卡 | 日韩精品一区二区在线观看 | 天天天天操 | 亚洲电影免费 | 天天夜夜操 | 婷婷精品 | 中文字幕国产一区 | 免费观看www | 精品国产91乱码一区二区三区 | 亚洲精品一区二区在线观看 | 亚洲欧美精品国产一级在线 | 亚洲欧美在线观看 | 午夜精品一区二区三区在线观看 |