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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

為什么數字鐘數碼管顯示不出時間

[復制鏈接]
跳轉到指定樓層
樓主
ID:256724 發表于 2017-12-3 11:38 來自觸屏版 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
不知道怎不知道要怎么調 了 要交作業了 謝謝大家
//****************************頭文件********************************
#include<reg51.h>            
#include<intrins.h>
//****************************宏定義********************************
#define uchar unsigned char   
#define uint  unsigned int
//****************************位聲明********************************
sbit key1=P1^0;               
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
sbit fmq=P2^1;   
//************************數碼管顯示的數值**************************
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
//                    0     1   2    3   4    5
                    0x82,0xf8,0x80,0x90,0xbf,0x0ff};
//                      6   7   8    9    -    滅                 
//****************************函數聲明******************************
void jia();   
void jian();
//********************數組定義,數組內含有8個數值******************
uchar table1[8],table2[8],table3[8],table4[8];
//**************************時間顯示初始值**************************
uchar shi=12,fen=0,miao=0;
//**************************定義全局變量****************************
uchar shi1,fen1,miao1,shi2,fen2,miao2,shi3,fen3,miao3;
uchar shi4,fen4,miao4;
uchar flag, flag1, wss, cnt, cnt1, alm1, alm2, alm3;
//    1秒  等時  位閃 次數 校時  鬧1  鬧2  鬧3
uint flag2;
//  蜂鳴
//*********************延時函數,用于動態掃描數碼管*****************
void delay(uchar i)                                   
{  uchar x,y;
  for(x=i;x>0;x--)
    for(y=120;y>0;y--);
}
//*******************************初始化函數*************************
void init()
{ TMOD=0x01;        //工作方式1                                               
  TH0=0x3c;          //定時時間為:50ms    (65536-50000)/256
  TL0=0x0b0;        //(65536-50000)%256
  ET0=1;            //打開定時器
  EA=1;              //開總中斷
  TR0=1;            //啟動定時器
}
//********************顯示子函數,用于顯示時間數值*****************
void display()
{  uchar i,j;
  if(cnt!=10||wss==0)
    { table1[0]=miao;        //分離秒的個位與十位
      table1[1]=miao/10;
      }
    else
    { table1[0]=table1[1]=11;}
    if(cnt!=11||wss==0)
    { table1[3]=fen;        //分離分的個位與十位
      table1[4]=fen/10;
      }
    else
    { table1[3]=table1[4]=11;}
    if(cnt!=12||wss==0)
    { table1[6]=shi;        //分離時的個位與十位
      table1[7]=shi/10;
      }
    else
    { table1[6]=table1[7]=11;}
  table1[2]=table1[5]=10;
  j=0xbf;
  for(i=0;i<=7;i++)          //從秒到時的掃描
    {  P3=j;
        P0=table[table1[i]];  //顯示數值
        delay(10);
        j=_cror_(j,1);        //循環右移
      }
  }
  //*******************顯示子函數,用于顯示定時1時間*****************
void display1()
{  uchar i,j;
  if(alm1==0)
    { if(cnt!=1||wss==0)
        { table2[0]=miao1;        //以下含義同上
          table2[1]=miao1/10;
          }
      else
        { table2[0]=table2[1]=11;}
      if(cnt!=2||wss==0)
        { table2[3]=fen1;
          table2[4]=fen1/10;
          }
      else
        { table2[3]=table2[4]=11;}
      if(cnt!=3||wss==0)
        { table2[6]=shi1;
          table2[7]=shi1/10;
          }
      else
        { table2[6]=table2[7]=11;}
      }
    else
      table2[0]=table2[1]=table2[3]=table2[4]=table2[6]=table2[7]=10;
  table2[2]= table2[5]=10;
  j=0xbf;
  for(i=0;i<=7;i++)
    {  P3=j;
        P0=table[table2[i]];
        delay(10);
        j=_cror_(j,1);
      }
}
//********************顯示子函數,用于顯示定時2時間******************
void display2()
{  uchar i,j;
  if(alm2==0)
    { if(cnt!=4||wss==0)
        { table3[0]=miao2;        //以下含義同上
          table3[1]=miao2/10;
            }
      else
        { table3[0]=table3[1]=11;}
      if(cnt!=5||wss==0)
        { table3[3]=fen2;
          table3[4]=fen2/10;
          }
        else
        { table3[3]=table3[4]=11;}
        if(cnt!=6||wss==0)
        { table3[6]=shi2;
          table3[7]=shi2/10;
          }
        else
        { table3[6]=table3[7]=11;}
      }
    else
      table3[0]=table3[1]=table3[3]=table3[4]=table3[6]=table3[7]=10;
  table3[2]= table3[5]=10;
  j=0xbf;
  for(i=0;i<=7;i++)
    {  P3=j;
        P0=table[table3[i]];
        delay(10);
        j=_cror_(j,1);
      }
}
//***************顯示子函數,用于顯示定時3時間數值****************//
void display3()
{  uchar i,j;
  if(alm3==0)
    {  if(cnt!=7||wss==0)
          { table4[0]=miao3;        //分離秒的個位與十位
            table4[1]=miao3/10;
            }
        else
          { table4[0]=table4[1]=11;}
        if(cnt!=8||wss==0)
          { table4[3]=fen3;        //分離分的個位與十位
            table4[4]=fen3/10;
            }
        else
          {    table4[3]=table4[4]=11;}
        if(cnt!=9||wss==0)
          { table4[6]=shi3;        //分離時的個位與十位
            table4[7]=shi3/10;
            }
        else
          {    table4[6]=table4[7]=11;}
        }
    else
        table4[0]=table4[1]=table4[3]=table4[4]=table4[6]=table4[7]=10;
  table4[2]= table4[5]=10;
  j=0xbf;                    //從秒到時的掃描
  for(i=0;i<=7;i++)
    {  P3=j;
        P0=table[table4[i]];  //顯示數值
        delay(10);
        j=_cror_(j,1);        //循環右移
      }
  }
//***********************時間子函數 *****************************//
void shijian()         
{  if(flag>=20)              //判斷是否到一秒
    { wss=~wss;
      flag=0;                    //到了,則標志位清零
      if(cnt1!=0)
          { miao4++;          //秒加1
            if( miao4>59)    //判斷秒是否到60s
              { miao4=0;      //到了,則清零
                fen4++;      //分加1
                if(fen4>59)  //以下含義同上
                  { fen4=0;
                    shi4++;
                    if(shi4>23)
                      shi4=0;                                                         
                  }   
                }
            }
      else
      { miao++;          //秒加1
        if( miao>59)    //判斷秒是否到60s
          { miao=0;      //到了,則清零
            fen++;      //分加1
            if(fen>59)  //以下含義同上
              { fen=0;
                shi++;
                if(shi>23)
                  shi=0;                                                         
                }   
            }
          }
      }
  }
//**************************鍵盤掃描子函數************************//
void key_scan()
{  if(key1==0)
    {  while(!key1)          //防止掉顯
          {  if(cnt==1||cnt==2||cnt==3)
                { display1(); }
              if(cnt==4||cnt==5||cnt==6)
                { display2(); }
              if(cnt==7||cnt==8||cnt==9)
                { display3(); }
              if(cnt==0||cnt==10||cnt==11||cnt==12||cnt==13)
                { display(); }
            }
        cnt++;    //記下按鍵key1按下的次數              
        if(cnt==10&&cnt1==0)
          { miao4=miao;
            fen4=fen;
            shi4=shi;
            cnt1++;
            }
        if(cnt==13)
          { cnt=0;
            if(cnt1==1)
                { miao=miao4;
                  fen=fen4;
                  shi=shi4;
                  }
            cnt1=0;
            }      
      }
    if(key2==0)              //判斷key2是否按下
    {  while(!key2)          //防止掉顯
          {  if(cnt==1||cnt==2||cnt==3)
              { display1(); }
            if(cnt==4||cnt==5||cnt==6)
              { display2(); }
            if(cnt==7||cnt==8||cnt==9)
              { display3(); }
            if(cnt==0||cnt==10||cnt==11||cnt==12||cnt==13)
              { display(); }
            }
        jia();
      }
    if(key3==0)              //判斷key3是否按下
    {  while(!key3)          //防止掉顯
          {  if(cnt==1||cnt==2||cnt==3)
              { display1(); }
            if(cnt==4||cnt==5||cnt==6)
              { display2(); }
            if(cnt==7||cnt==8||cnt==9)
              { display3(); }
            if(cnt==0||cnt==10||cnt==11||cnt==12||cnt==13)
              { display(); }
            }
        jian();           //調用減1子函數         
      }
      if(key4==0)          //判斷key4是否按下
        {while(!key4)       //防止掉
          { if(cnt==1||cnt==2||cnt==3)
              {  alm1=~alm1;
                  display1();
                  }
            if(cnt==4||cnt==5||cnt==6)
              {  alm2=~alm2;
                  display2();
                  }
            if(cnt==7||cnt==8||cnt==9)
              {  alm3=~alm3;
                  display3();
                  }
            if(cnt==0||cnt==10||cnt==11||cnt==12||cnt==13)
              display();
            }
          }     
  }
//****************************加1子函數***************************
void jia()           
{ if(cnt==1)            //判斷key1按下的次數是否為1
    {  miao1++;        //是,則秒加1
        if(miao1>59)    //判斷秒是否大于60,是,則秒清零
          miao1=0;
      }
  if(cnt==2)            //以下含意同上
    {  fen1++;
        if(fen1>59)
          fen1=0;
      }
  if(cnt==3)
    {  shi1++;
        if(shi1>23)
          shi1=0;
      }
  if(cnt==4)
    {  miao2++;
        if(miao2>59)
          miao2=0;
      }
  if(cnt==5)
    {  fen2++;
        if(fen2>59)
          fen2=0;
      }
  if(cnt==6)
    {  shi2++;
        if(shi2>23)
          shi2=0;
      }
  if(cnt==7)
    {  miao3++;
        if(miao3>59)
          miao3=0;
      }
  if(cnt==8)
    {  fen3++;
        if(fen3>59)
          fen3=0;
      }
  if(cnt==9)
    {  shi3++;
        if(shi3>23)
          shi3=0;
      }
  if(cnt==10)         
    {  miao++;      
      if(miao>59)     
          miao=0;
        cnt1++;
      }
  if(cnt==11)         
    {  fen++;
        if(fen>59)
          fen=0;
        cnt1++;
      }
  if(cnt==12)
    {  shi++;
        if(shi>23)
          shi=0;
        cnt1++;
      }
}
//***************************減1子函數**************************//
void jian()   
{  if(cnt==1)            //判斷key1按下的次數是否為1,是則秒減1
    {  miao1--;
        if(miao1==255)    //判斷秒是否減到255,是,則秒置59
          miao1=59;
      }
  if(cnt==2)            //以下含意同上
    {  fen1--;
        if(fen1==255)
          fen1=59;
      }
  if(cnt==3)
    {  shi1--;
        if(shi1==255)
          shi1=23;
      }
  if(cnt==4)
    {  miao2--;
        if(miao2==255)
          miao2=59;
      }
  if(cnt==5)
    {  fen2--;
        if(fen2==255)
          fen2=59;
      }
  if(cnt==6)
    {  shi2--;
        if(shi2==255)
          shi2=23;
      }
    if(cnt==7)
      {  miao3--;
        if(miao3==255)
            miao3=59;
      }
    if(cnt==8)
      {  fen3--;
        if(fen3==255)
            fen3=59;
      }
    if(cnt==9)
      {  shi3--;
        if(shi3==255)
            shi3=23;
      }
    if(cnt==10)         
      {  miao--;
        if(miao==255)
            miao=59;
        cnt1++;
        }
    if(cnt==11)
      {  fen--;
        if(fen==255)
            fen=59;
        cnt1++;
        }
    if(cnt==12)
      {  shi--;
        if(shi==255)
            shi=23;
        cnt1++;
        }
}
//***************************鬧鈴子函數***************************//
void clock()
//判斷秒的數值是否相等         
{  if(miao==miao1&&alm1==0||miao==miao2&&alm2==0||miao==miao3&&alm3==0)
//是,在判斷分是否相等                                 
      if(fen==fen1&&alm1==0||fen==fen2&&alm2==0||fen==fen3&&alm3==0)
//是,再判斷時是否相等      
        if(shi==shi1&&alm1==0||shi==shi2&&alm2==0||shi==shi3&&alm3==0)
        { flag2=0;                      //是,則標志位,flag2清零
        while(!(flag2==1200)&&(cnt==0)) //判斷flag2是否到1200且不
                                          //            為調時狀態
        {if(key4==0)                    //沒有,則繼續驅動蜂鳴器響
                  {while(!key4)
                      flag2=1200;
                      }
                    if(flag1>1)          //等時方波驅動蜂鳴器
                      { fmq=~fmq;
                        flag1=0;
                        }
                  shijian();        //調用時間子函數
                  display();        //調用顯示子函數
                  }
            fmq=1;                  //關閉蜂鳴器
            }
}
//**************************主函數********************************//
void main()
{  
  init();                        //調用初始化子函數
  while(1)
    {  
        clock();                  //鬧鐘子函數         
        if(cnt==1||cnt==2||cnt==3) //顯示子函數
          { display1(); }
        if(cnt==4||cnt==5||cnt==6)
          { display2(); }
        if(cnt==7||cnt==8||cnt==9)
          { display3(); }
        if(cnt==0||cnt==10||cnt==11||cnt==12||cnt==13)
          { display(); }
        shijian();         //調用時間子函數
        key_scan();        //調用鍵盤掃描子函數
      }
}
//**************************定時中斷******************************//
void time0() interrupt 1         
{   TH0=0x3c;        //初值50ms (65536-50000)/256
    TL0=0x0b0;        // (65536-50000)%256
    flag++;          //標志位
    flag1++;
    flag2++;      
  }

U (43.24 KB, 下載次數: 47)

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

使用道具 舉報

沙發
ID:256754 發表于 2017-12-3 13:49 來自觸屏版 | 只看該作者
分離時,分,秒那里是個位是%10,
回復

使用道具 舉報

板凳
ID:222948 發表于 2017-12-3 15:05 | 只看該作者
  1. #include <reg51.h>
  2. unsigned char code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//áDêyÑ¡ÔñÂë
  3. unsigned char code digittab[3][8]=
  4. {
  5.         {0x40,0x40,0x44,0x44,0x44,0x44,0x40,0x00},//
  6.         {0x00,0x3c,0x42,0x81,0x81,0x81,0x42,0x3c},//
  7.         {0x00,0x18,0x24,0x42,0x81,0x42,0x24,0x18},//·Åoo×ÖμÄμØ·½
  8. };
  9. unsigned int timecount;//¶¨òåê±¼ä¼Æêy′Îêy±äá¿
  10. unsigned char cnta;//¶¨òåáD
  11. unsigned char cntb;//¶¨òåDD
  12. void main(void)
  13. {
  14.         TMOD=0x01;//ê1óö¨ê±Æ÷T0μÄ·½ê½1
  15.         TH0=(65536-5000)/256;
  16.         TL0=(65536-5000)%256;//5msÖD¶Ïò»′Î
  17.         EA=1;//ÖD¶Ï×üÔêDí
  18.         TR0=1;//Æô¶ˉ¶¨ê±Æ÷¿aê¼1¤×÷
  19.         ET0=1;//ÔêDí¶¨ê±Æ÷T0ÖD¶Ï            
  20.         while(1);//μè′yÖD¶Ï2úéú
  21. }
  22. void t0(void) interrupt 1 using 0//ÖD¶Ï·tÎñ3ìDò
  23. {
  24.         TH0=(65536-5000)/256;//ÖØD¸33õÖμ
  25.         TL0=(65536-5000)%256;        
  26.         P2=tab[cnta];                  
  27.         P1=digittab[cntb][cnta];//DDêy±£3Ö2»±ä£¬áDÿÖD¶Ïò»′μó1
  28.         cnta++;
  29.         if(cnta==8) cnta=0;//ò»DDÖ»óD8¸öêyÂ룬áD¼óμ½8Ö®oó»Øáã
  30.         timecount++;     
  31.         if(timecount==200)//200*5=1000msoóDD¼ó1£¬¿ØÖÆÃ¿¸öí¼DÎÏÔê¾μÄê±¼äÎa1000ms£¬¼′Îa1s
  32.     {
  33.                 timecount=0;
  34.                 cntb++;
  35.                 if(cntb==3) cntb=0;//Ö»óDèyDDêyÂ룬DD¼óμ½3Ö®oó»Øáã
  36.     }
  37. }
復制代碼
包含有仿真圖和取模軟件.docx (893.88 KB, 下載次數: 15)

Doc1.docx

34.08 KB, 下載次數: 6

回復

使用道具 舉報

地板
ID:256724 發表于 2017-12-3 15:07 來自觸屏版 | 只看該作者
lhg154 發表于 2017-12-3 13:49
分離時,分,秒那里是個位是%10,

謝謝 但是我改了以后還是那樣不應該顯示00-00-00格式的么
回復

使用道具 舉報

5#
ID:230826 發表于 2017-12-3 17:59 | 只看該作者
uchar code table[]={~0xc0,~0xf9,~0xa4,~0xb0,~0x99,~0x92,~0x82,~0xf8,~0x80,~0x90,~0xbf,~0x0ff}; //包行
回復

使用道具 舉報

6#
ID:256724 發表于 2017-12-3 19:54 來自觸屏版 | 只看該作者
changle11 發表于 2017-12-3 17:59
uchar code table[]={~0xc0,~0xf9,~0xa4,~0xb0,~0x99,~0x92,~0x82,~0xf8,~0x80,~0x90,~0xbf,~0x0ff}; //包 ...

解決了 謝謝!
回復

使用道具 舉報

7#
ID:250031 發表于 2017-12-3 20:21 | 只看該作者
寫程序。代碼能短就短,這樣太多重復的代碼,不好查錯誤
回復

使用道具 舉報

8#
ID:256961 發表于 2017-12-3 22:24 | 只看該作者
數碼管顯示取反就解決了,這是什么問題/
回復

使用道具 舉報

9#
ID:345662 發表于 2018-7-6 15:43 | 只看該作者
我也做了這個,也是這個程序,但是顯示的位置有問題,應該在程序哪里改。
回復

使用道具 舉報

10#
ID:111634 發表于 2018-7-7 15:41 | 只看該作者
實例94  模擬電子鐘(由80C51定時器產生秒時基)
Proteus仿真一下,確認有效。
實例94 模擬電子鐘(由80C51定時器產生秒時基).rar (43.05 KB, 下載次數: 5)

以上摘自張志良編著《80C51單片機仿真設計實例教程——基于Keil CProteus》清華大學出版社ISBN 978-7-302-41682-1,內有常用的單片機應用100案例,用于仿真實驗操作,電路與程序真實可靠可信可行。書中電路和程序設計有詳細說明,程序語句條條有注解。
回復

使用道具 舉報

11#
ID:111634 發表于 2018-7-7 15:45 | 只看該作者
實例93  具有校正功能的時鐘1302(LED數碼管顯示)
Proteus仿真一下,確認有效。
實例93 帶校正時分秒的時鐘1302(6位LED數碼管顯示).7z (24.17 KB, 下載次數: 4)

以上摘自張志良編著《80C51單片機仿真設計實例教程——基于Keil CProteus》清華大學出版社ISBN 978-7-302-41682-1,內有常用的單片機應用100案例,用于仿真實驗操作,電路與程序真實可靠可信可行。
回復

使用道具 舉報

12#
ID:313515 發表于 2018-7-7 15:59 | 只看該作者
數碼管是共陰還是共陽
回復

使用道具 舉報

13#
ID:366889 發表于 2018-7-7 16:03 | 只看該作者
zzzzhhhhaaaaz 發表于 2017-12-3 22:24
**** 作者被禁止或刪除 內容自動屏蔽 ****

電壓取反
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91视频在线观看 | 射久久 | 自拍在线 | 最新午夜综合福利视频 | 国产福利在线视频 | 日韩一级精品视频在线观看 | 国产精品日女人 | 精品视频在线播放 | 中文字幕国产在线 | 亚洲成人一区二区在线 | 成年人精品视频在线观看 | 国产精品成人一区二区三区 | 国产一区 | 国产精品乱码一二三区的特点 | 国产超碰人人爽人人做人人爱 | 亚洲欧洲在线观看视频 | 国产亚洲一区二区三区在线观看 | 久久久久久网站 | 国产精品69久久久久水密桃 | 国产一区二区三区在线 | 国产一区精品在线 | 国产在线一区二区三区 | 国产精品不卡 | 国产精品99999999 | 91精品免费视频 | 国产精品网址 | 人人干天天干 | 草草影院ccyy | 电影91久久久| 日韩高清中文字幕 | 毛片一区二区 | 国产不卡在线 | 日韩a在线观看 | 国产成人精品一区二区 | 亚洲一区成人 | 日韩有码在线播放 | 精品久久影院 | 黄色网毛片| 91久久精品国产免费一区 | 精品一区二区三区免费视频 | 龙珠z国语版在线观看 |