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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4810|回復: 2
收起左側

用數碼管顯示電子鐘,程序簡單,適合初學者(內含代碼及注解及仿真)

[復制鏈接]
ID:644560 發表于 2019-12-8 19:04 | 顯示全部樓層 |閱讀模式
  1. #include <reg51.h>

  2. unsigned char code smg[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,

  3.                           0x77,0x7C,0x39,0x5E,0x79,0x71,0x40,0x00};        //字形代碼,分別為0-9,a-f,-,全滅



  4. unsigned char num[8]={0,0,16,0,0,16,0,0};       //顯示緩沖區

  5. unsigned char w;// 移位控制

  6. unsigned char miao,fen,shi;    //時間

  7. unsigned char t,i;// 記錄定時器中斷次數

  8. bit qd=1;     //時鐘啟?刂莆

  9. sbit wei =P3^0;     //定義P3.0端口為移位按鍵

  10. sbit tiao=P3^1;     //定義P.1端口為調整按鍵

  11. void delay(unsigned int T)   //延時子函數

  12. {

  13.     unsigned char b,c;

  14.     for(c=T;c>0;c--)

  15.         for(b=90;b>0;b--);

  16. }

  17. /*=======================================================

  18.                           ------- 主程序 ------

  19. =======================================================*/

  20. void main()

  21. {                   // 定時器1,外部中斷0的初始化

  22.         TMOD=0x10;      //設置定時器T1為方式1模式

  23.         ET1=1;          //允許定時器T1中斷

  24.         TL1=0xE0;      //設定定時器T1初值

  25.         TH1=0xB1;      //設定定時器T1初值

  26.         EX0=1;         //使能外部中斷

  27.         IT0=1;         //指定外部中斷0下降沿觸發

  28.         EX1=1;         //開外部中斷1

  29.         IT1=1;         //外部中斷1下降沿觸發方式

  30.         PT1=1;

  31.         EA=1;                //總中斷允許                          

  32.         TR1=1;      //啟動定時器T1

  33.         

  34.         miao=0,fen=0,shi=0;

  35.         num[0]=shi/10;//時高位

  36.         num[1]=shi%10;//時低位

  37.         num[3]=fen/10;//分高位

  38.         num[4]=fen%10;//分地位

  39.         num[6]=miao/10;//秒高位

  40.         num[7]=miao%10;//秒地位

  41.         t=0;    //定時器中斷次數初始化

  42.         w=0;    //閃爍控制位,初始無閃爍位

  43.         qd=1;   //時鐘啟停標志位

  44.         while(1)

  45.         {        if(t==50)     // 時間的控制

  46.                 {        t=0;      

  47.                    miao++;    //秒自增

  48.                    if(miao==60)  //如果秒等于60

  49.                    {miao=0;fen++;   //0賦值給秒,分自增

  50.                             if(fen==60)   //如果分等于60

  51.                               {fen=0;shi++;    //把0賦值給分,時自增

  52.                                      if(shi==24) shi=0;}   //如果時等于24,把0賦值給時

  53.                    }       // 下面是顯示緩沖區內容的計算

  54.                    num[0]=shi/10;num[1]=shi%10;

  55.                    num[3]=fen/10;num[4]=fen%10;

  56.                    num[6]=miao/10;num[7]=miao%10;

  57.                 }

  58.         }

  59. }

  60. /*=======================================================

  61.                 ------- 定時器1中斷程序 ------

  62. =======================================================*/

  63. void timer1() interrupt 3

  64. {        static unsigned char ss,g;

  65.         TL1=0xE0;

  66.         TH1=0xB1;         //定時20Ms          循環

  67.   if(qd) t++;//-----時鐘計時         

  68.         if(w==1||w==2||w==3||w==4||w==5||w==6)

  69.         {        ss++;//調位閃爍

  70.           if(ss<30)//顯示滅

  71.                           {

  72.                                   switch(w)        //選擇滅的顯示位

  73.                                   {

  74.                                   case 1:g=0;break;//時高位

  75.                                         case 2:g=1;break;//時地位

  76.                                         case 3:g=3;break;//分高位

  77.                                         case 4:g=4;break;//分低位

  78.                                         case 5:g=6;break;//秒高位

  79.                                         case 6:g=7;break;//秒低位

  80.                                   }

  81.                                 for(i=0;i<8;i++)//輸出顯示

  82.                                 {

  83.                                         P2=i;

  84.                                         if(i==g)P0=0X00;//需要調整的位滅

  85.                                         else  P0=smg[num[i]];//正常顯示

  86.                                         delay(4);

  87.                                 }

  88.                    }

  89.                           else if(ss>=30)//+++++++++++++亮

  90.                           {

  91.                                  for(i=0;i<8;i++)

  92.                                   {

  93.                                         P2=i;

  94.                                         P0=smg[num[i]];//正常顯示

  95.                                         delay(3);

  96.                                   }

  97.                                   if(ss==60) ss=0;

  98.                     }

  99.         }

  100.         else//-------不調整時正常顯示

  101.         {

  102.                 for(i=0;i<8;i++)

  103.                 {

  104.                         P2=i; //把i賦值給P2

  105.                     P0=smg[num[i]];//正常顯示

  106.                         delay(3);

  107.                 }         

  108.         }

  109. }


  110. /*=======================================================

  111.                         ------- 外部中斷1中斷程序 ------

  112. 說明:調整時分秒的每一位

  113. =======================================================*/

  114. void  shezhi() interrupt  2

  115. { if(wei==0) //調整位的按鍵按下了

  116.   {w++;

  117.           if(w==7)  //如果w等于7

  118.                   w=0;   //把0賦值給w

  119.           if(w==0) qd=1;  //如果w等于0,把1賦值給qd

  120.            else     qd=0;  //否則把0賦值給qd

  121.   }

  122.   else if(tiao==0&& w!=0)//調整數據的按鍵按下了

  123.   {

  124.         if(w==1) //如果w等于1,調整時的十位

  125.         {

  126.                 num[0]++;   //時高位增加

  127.                 if(num[0]==3) num[0]=0;

  128.         }

  129.         else if (w==2)//如果w等于2,調整時的個位

  130.         {

  131.                 num[1]++;   //時低位增加

  132.                 if( (num[0]==2 && num[1]==4 ) ||

  133.                     (num[0]==1 && num[1]==10) ||

  134.                         (num[0]==0 && num[1]==10)   )

  135.                 num[1]=0;         

  136.         }

  137.         else if (w==3)//如果w等于3,調整分的十位

  138.         {

  139.             num[3]++;   //分高位增加

  140.                 if(num[3]==6) num[3]=0;     //分高位等于6,把0賦值給分高位

  141.         }

  142.         else if (w==4)//如果w等于4,調整分的個位

  143.         {

  144.             num[4]++;    //分低位增加

  145.                 if(num[4]==10) num[4]=0;   //分低位等于10,把0賦值給分低位

  146.         }

  147.         else if (w==5)//如果w等于5,調整秒的十位

  148.         {

  149.             num[6]++;    //秒高位增加

  150.                 if(num[6]==6) num[6]=0;   //秒高位等于6,把0賦值給秒高位

  151.         }

  152.         else if (w==6)//如果w等于6,調整秒的個位

  153.         {

  154.             num[7]++;    //秒低位增加

  155.                 if(num[7]==10) num[7]=0;  //秒低位等于10,把0賦值給秒低位

  156.         }



  157.         miao=num[7]+num[6]*10;

  158.         fen =num[4]+num[3]*10;

  159.         shi =num[1]+num[0]*10;

  160.   }

  161. }
復制代碼

Desktop.zip (70.58 KB, 下載次數: 48)
回復

使用道具 舉報

ID:489282 發表于 2021-11-11 15:53 | 顯示全部樓層
原理圖在哪
回復

使用道具 舉報

ID:262 發表于 2021-11-11 16:25 | 顯示全部樓層

在下載的壓縮包里面有仿真原理圖
51hei.gif
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本不卡一区 | 国产在线观看一区二区 | 欧美一区二区三区在线观看 | 97免费在线视频 | 精品国产一区二区国模嫣然 | 国产69精品久久久久777 | 欧美啪啪 | 日韩一区二区在线观看视频 | 午夜男人视频 | 毛片免费观看 | 天天草视频 | 在线欧美激情 | 亚洲国产成人精品女人久久久野战 | 日韩欧美国产一区二区三区 | www.国产| 成人黄在线观看 | 91观看| 日韩欧美专区 | 91成人精品视频 | 国产免费自拍 | 日韩欧美在线观看 | 涩涩鲁亚洲精品一区二区 | 日韩中文字幕在线观看视频 | 欧美日韩综合精品 | 成人久久| 成人在线观看免费 | 米奇狠狠鲁 | 欧美在线免费 | 91免费视频观看 | 日韩专区中文字幕 | 国产午夜在线观看 | 天天插天天操 | 久久国产一区二区三区 | 亚洲国产精品久久久 | 成人国产精品久久久 | 亚洲精品国产成人 | 日韩一级黄色片 | 激情亚洲 | 国产高清久久 | 四虎影院免费在线播放 | 精品videossex高潮汇编 |