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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1568|回復: 5
打印 上一主題 下一主題
收起左側(cè)

單片機定時計數(shù)器鬧鐘問題,keil編譯沒問題,proteus仿真出現(xiàn)問題,求助

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:530747 發(fā)表于 2019-5-16 18:26 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
以下是代碼和思路
#include <reg52.h>
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int

sbit duan = P2^6;
sbit wei = P2^7;
sbit buzzer = P2^3;
sbit buzzer_key = P3^3;
sbit key1 = P1^0;
sbit key2 = P1^1;
sbit key3 = P1^2;
sbit key4 = P1^3;

uchar code SMGduan[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40,0x00};
uchar code SMGwei[] ={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
ucharmiao,fen,shi,amiao,afen,ashi,flag,s_flag;
uint count = 0;
uint date[8];

void display();
void key();
void beep();
void delay();


void delay(int z)
{
         intx,y;
         for(x= z;x>0;x--)
           for(y=114;y>0;y--);
}
//顯示函數(shù)
void display()
{
         uinti;
         wei= 1;
         P0= 0xff;
         wei= 0;

         duan= 1;
         P0=date[ i];
         duan= 0;
         wei= 1;
         P0=SMGwei[ i];
         wei= 0;
         for(i=0;i<8;i++){                  
                   if(i==8)
                            i=0;
                   delay(1);
         }
//根據(jù)flag值來顯示:
flag=0,正常時鐘。
Flag=1,時鐘秒調(diào)整。
Flag=2,時鐘分調(diào)整。
Flag=3,時鐘時調(diào)整。
Flag=4,鬧鐘秒調(diào)整。
Flag=5,鬧鐘分調(diào)整。
Flag=6,鬧鐘時調(diào)整。
S_flag時閃爍標志位,沒1s閃爍一次。
         switch(flag){
                   case0:
                   {
                            date[0]= SMGduan[shi/10];
                            date[1]= SMGduan[shi%10];
                            date[2]= SMGduan[10];
                            date[3]= SMGduan[fen/10];
                            date[4]= SMGduan[fen%10];
                            date[5]= SMGduan[10];
                            date[6]= SMGduan[miao/10];
                            date[7]= SMGduan[miao%10];                          
                   }
                   break;
                   case1:
                   {
                            date[0]= SMGduan[shi/10];
                            date[1] = SMGduan[shi%10];
                            date[2]= SMGduan[10];
                            date[3]= SMGduan[fen/10];
                            date[4]= SMGduan[fen%10];
                            date[5]= SMGduan[10];
                            if(s_flag== 1){
                                     date[6]= SMGduan[miao/10];
                                     date[7]= SMGduan[miao%10];        
                            }
                            else{
                                     date[6]= SMGduan[10];
                                     date[7]= SMGduan[10];                              
                            }
                   }
                   break;
                   case2:
                   {
                            date[0]= SMGduan[shi/10];
                            date[1]= SMGduan[shi%10];
                            date[2]= SMGduan[10];
                            if(s_flag==1){
                                     date[3]= SMGduan[fen/10];
                                     date[4]= SMGduan[fen%10];
                            }
                            else{
                                     date[3]= SMGduan[10];
                                     date[4]= SMGduan[10];
                            }
                            date[5]= SMGduan[10];
                            date[6]= SMGduan[miao/10];
                            date[7]= SMGduan[miao%10];                          
                   }
                   break;
                   case3:
                   {
                            if(s_flag==1){
                                     date[0]= SMGduan[shi/10];
                                     date[1]= SMGduan[shi%10];
                            }
                            else{
                                     date[0]= SMGduan[10];
                                     date[1]= SMGduan[10];
                            }
                            date[2]= SMGduan[10];
                            date[3]= SMGduan[fen/10];
                            date[4]= SMGduan[fen%10];
                            date[5]= SMGduan[10];
                            date[6]= SMGduan[miao/10];
                            date[7]= SMGduan[miao%10];                          
                   }
                   break;
                   case4:
                   {
                            date[0]= SMGduan[ashi/10];
                            date[1]= SMGduan[ashi%10];
                            date[2]= SMGduan[10];
                            date[3]= SMGduan[afen/10];
                            date[4]= SMGduan[afen%10];
                            date[5]= SMGduan[10];
                            if(s_flag==1){
                                     date[6]= SMGduan[amiao/10];
                                     date[7]= SMGduan[amiao%10];
                            }
                            else{
                                     date[6]= SMGduan[10];
                                     date[7]= SMGduan[10];
                            }                                    
                   }
                   break;
                   case5:
                   {
                            date[0]= SMGduan[ashi/10];
                            date[1]= SMGduan[ashi%10];
                            date[2]= SMGduan[10];
                            if(s_flag==1){
                                     date[3]= SMGduan[afen/10];
                                     date[4]= SMGduan[afen%10];
                            }
                            else{
                                     date[3]= SMGduan[10];
                                     date[4]= SMGduan[10];                              
                            }
                            date[5]= SMGduan[10];
                            date[6]= SMGduan[amiao/10];
                            date[7]= SMGduan[amiao%10];                        
                   }
                   break;
                   case6:
                   {
                            if(s_flag==1){
                                     date[0]= SMGduan[ashi/10];
                                     date[1]= SMGduan[ashi%10];
                            }
                            else{
                                     date[0]= SMGduan[10];
                                     date[1]= SMGduan[10];
                            }
                            date[2]= SMGduan[10];
                            date[3]= SMGduan[afen/10];
                            date[4]= SMGduan[afen%10];
                            date[5]= SMGduan[10];
                            date[6]= SMGduan[amiao/10];
                            date[7]= SMGduan[amiao%10];                        
                   }
                   break;               
         }
}
//蜂鳴器
void beep()
{
         buzzer= 0;
         if(shi== ashi && fen == afen && amiao-miao <= 2)//時鐘鬧鐘時分相同,向兩秒后關閉。
                   buzzer= 1;
         else
                   buzzer= 0;
}
void jinzhi()
{
         if(count== 20)
         {
                   miao++;
                   count= 0;
                   if(miao==60){
                            fen++;
                            miao=0;
                   }
                   if(fen==60){
                            shi++;
                            fen=0;
                   }
                   while(shi==24){
                            shi= 0;
                            fen= 0;
                            miao= 0;
                            count= 0;
                   }
         }        
}
//中斷
void timer() interrupt 1
{
         uinti;
         TH0= (65536-46085)/256;
         TL0= (65536-46085)%256;
         beep();
         count++;
         jinzhi();
         if(count%20==0)
         {
                   s_flag=!s_flag;
         }        
}
//按鍵:
key1選擇模式,按一次flag加一;
flag=0:普通時鐘;
flag=1
key2:時鐘秒加一;
key3:時減一;
Flag=2:分調(diào)整;
Flag=3:時調(diào)整;
Flag=4:鬧鐘秒調(diào)整;
依次往后;
Key4重置按鍵。
void key()
{
         P1= 0xff;
         if(key1== 0){
                   delay(10);
                   if(key1== 0){
                            flag++;
                            if(flag==7){
                                     flag=0;
                            }
                   }
                   if(!key1);
         }
         if(flag!= 0){
                   switch(flag){
                            case1:
                            {
                                     if(key2== 0){
                                               delay(10);
                                               if(key2== 0){
                                                        if(miao < 60)
                                                                 miao++;
                                                        else
                                                                 miao= 0;
                                               }
                                               if(!key2);
                                     }
                                     if(key3== 0){
                                               delay(10);
                                               if(key3== 0){
                                                        if(miao> 0)
                                                                 miao--;
                                                        else
                                                                 miao= 59;
                                               }
                                               if(!key3);
                                     }                                    
                            }
                            break;
                            case2:
                            {
                                     if(key2== 0){
                                               delay(10);
                                               if(key2== 0){
                                                        if(fen< 60)
                                                                 fen++;
                                                        else
                                                                 fen= 0;
                                               }
                                               if(!key2);
                                     }
                                     if(key3== 0){
                                               delay(10);
                                               if(key3== 0){
                                                        if(fen> 0)
                                                                 fen--;
                                                        else
                                                                 fen= 59;
                                               }
                                               if(!key3);
                                     }                                    
                            }
                            break;
                            case3:
                            {
                                     if(key2== 0){
                                               delay(10);
                                               if(key2== 0){
                                                        if(shi< 24)
                                                                 shi++;
                                                        else
                                                                 shi= 0;
                                               }
                                               if(!key2);
                                     }
                                     if(key3== 0){
                                               delay(10);
                                               if(key3== 0){
                                                        if(shi> 0)
                                                                 shi--;
                                                        else
                                                                 shi= 23;
                                               }
                                               if(!key3);
                                     }                                    
                            }
                            break;
                            case4:
                            {
                                     if(key2== 0){
                                               delay(10);
                                               if(key2== 0){
                                                        if(amiao< 60)
                                                                 amiao++;
                                                        else
                                                                 amiao= 0;
                                               }
                                               if(!key2);
                                     }
                                     if(key3== 0){
                                               delay(10);
                                               if(key3== 0){
                                                        if(amiao> 0)
                                                                 amiao--;
                                                        else
                                                                 amiao= 59;
                                               }
                                               if(!key3);
                                     }                                    
                            }
                            break;
                            case5:
                            {
                                     if(key2== 0){
                                               delay(10);
                                               if(key2== 0){
                                                        if(afen< 60)
                                                                 afen++;
                                                        else
                                                                 afen= 0;
                                               }
                                               if(!key2);
                                     }
                                     if(key3== 0){
                                               delay(10);
                                               if(key3== 0){
                                                        if(afen> 0)
                                                                 afen--;
                                                        else
                                                                 afen= 59;
                                               }
                                               if(!key3);
                                     }                                    
                            }
                            break;                        
                            case6:
                            {
                                     if(key2== 0){
                                               delay(10);
                                               if(key2== 0){
                                                        if(ashi< 24)
                                                                 ashi++;
                                                        else
                                                                 ashi= 0;
                                               }
                                               if(!key2);
                                     }
                                     if(key3== 0){
                                               delay(10);
                                               if(key3== 0){
                                                        if(ashi> 0)
                                                                 ashi--;
                                                        else
                                                                 ashi= 23;
                                               }
                                               if(!key3);
                                     }                                    
                            }
                            break;
                   }
         }
         if(key4== 0){
                   delay(10);
                   if(key4==0){
                            shi= 0;
                            fen= 0;
                            miao= 0;
                            flag= 0;
                   }
                   if(!key4);
         }                 
}
void main()
{
         shi= 0;
         fen= 0;
         miao= 0;
         ashi= 0;
         afen= 0;
         amiao= 0;
         flag= 0;
         s_flag= 0;
         buzzer= 0;
         //初值全部置零。
         TMOD= 0X01;
         TH0= (65536-46082)/256;
         TL0= (65536-46082)%256;
         ET0=1;
         EA=1;
         TR0= 1;
         while(1)
         {                 
                   display();
             key();
         }
}

仿真圖。請大神們看看問題在哪里,十分感謝。!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:10947 發(fā)表于 2019-5-17 14:37 | 只看該作者
在哪里定義數(shù)碼管如何顯示出0 1 2 3這些?
回復

使用道具 舉報

板凳
ID:530747 發(fā)表于 2019-5-17 15:08 | 只看該作者
顯示問題我解決了。把display里         
for(i=0;i<8;i++){                  
     if(i==8)
      i=0;
                   delay(1);
         }
回復

使用道具 舉報

地板
ID:530747 發(fā)表于 2019-5-17 15:25 | 只看該作者
發(fā)帖者:先前沒說很抱歉。
按鍵是key1為模式按鍵按一下flag加一,key2加一鍵  key3減一鍵   :flag=0  時鐘。flag=1  時鐘調(diào)秒。flag=2
時鐘調(diào)分,flag=3  時鐘調(diào)時   flag=4 鬧鐘調(diào)秒   flag=5 鬧鐘調(diào)分    flag=6 鬧鐘調(diào)時
key4重置鍵,時鐘置零。   
回復

使用道具 舉報

5#
ID:530747 發(fā)表于 2019-5-17 15:25 | 只看該作者
顯示問題我解決了。把display里
for(i=0;i<8;i++){                  
      if(i==8)
           i=0;
       delay(1);
         }
改為
      i++;
      if(i==8)
          i=0;
就可以解決。
但是又發(fā)現(xiàn)按鍵存在問題。按一下會跳多次,好像消抖沒有作用一樣。加一減一按鍵按一次直接加19,可我代碼里都是按一次加一或減一?但是我按鍵消抖做了的啊。這是怎么回事?請大神們看看,求問題所在和解決方案。
回復

使用道具 舉報

6#
ID:93224 發(fā)表于 2019-5-17 23:35 | 只看該作者
那你這是邏輯的問題
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天天干com | 天堂资源最新在线 | 视频三区| 精品国产一区二区三区日日嗨 | 成人不卡 | 亚洲一区二区视频在线观看 | 日韩欧美在线免费观看视频 | 成人一区二区三区在线观看 | 欧美理论片在线观看 | 中文字幕一级毛片 | 亚洲不卡在线观看 | 午夜影院普通用户体验区 | 亚洲精彩免费视频 | 色视频在线播放 | 365夜爽爽欧美性午夜免费视频 | 久久久久九九九九 | 一区二区三区欧美 | 久久久久国产精品 | 精品久久电影 | 91影院 | 成人精品国产一区二区4080 | 日韩精品在线观看视频 | 亚洲国产精品一区二区三区 | h片在线看| 狠狠操婷婷 | 可以看黄的视频 | jav成人av免费播放 | 国产视频在线一区二区 | 久久一区精品 | 亚洲日韩中文字幕一区 | 99视频在线免费观看 | 国产精品视频免费看 | 欧美一级免费黄色片 | 欧洲亚洲精品久久久久 | 精品久久一区 | 欧美激情国产精品 | 99爱在线免费观看 | 波多野结衣av中文字幕 | 超碰97人人人人人蜜桃 | 午夜电影网址 | 亚洲精品九九 |