標題: 單片機代碼尋求注釋,新學看不懂,求指教 [打印本頁]

作者: 51小黑子    時間: 2022-11-18 15:42
標題: 單片機代碼尋求注釋,新學看不懂,求指教
  1. #include<reg51.h>
  2. unsigned charnum[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  3. //定義一個數(shù)組,來表示數(shù)碼管對應的數(shù)字
  4. unsigned charhour=12,minute=0,second=0;a=0;
  5. int time=8000;   //定義定時時間
  6. void clockl()interrupt 1   //中斷處理程序
  7. {
  8.       static unsigned  char i=0;
  9.       TH0=(65536-time)/256;     //重新載入T0的初值
  10.       TL0=(65536-time)%256;       //重新載入T0的初值
  11.       a++;
  12.       if(a==125)    //如果進行了125次中斷
  13.       {
  14.              a=0;
  15.              second++;
  16.              if(second==60)
  17.                {
  18.                        second=0;
  19.                        minute++;
  20.                       if(minute==60)
  21.                             {
  22.                                    minute=0;
  23.                                    hour++;
  24.                                    if(hour==24)
  25.                                           hour=0;
  26.                             }
  27.                      }
  28.               }
  29.        switch(i)
  30.        {
  31.     case 0:P2=0x08;P0=num[hour/10];i++;break;
  32.     case 1:P2=0x09;P0=num[hour%10];i++;break;
  33.     case 2:P2=0x0a;P0=num[minute/10];i++;break;
  34.     case 3:P2=0x0b;P0=num[minute%10];i++;break;
  35.     case 4:P2=0x0c;P0=num[second/10];i++;break;
  36.     case 5:P2=0x0d;P0=num[second%10];i=0;break;
  37.                             }
  38.                      }
  39.       void main()
  40.       {
  41.                  TMOD=0X01;   //工作方式寄存器T1不工作處于模式0的狀態(tài)下T0工作處于模式1的狀態(tài)下
  42.                  TH0=(65536-time)/256; //高八位的值  載入初值
  43.                  TL0=(65536-time)%256; //低八位的值
  44.                  TR0=1;               //打開定時器的管腳
  45.                  EA=1;  // 把總開關閉合
  46.                  ET0=1;   //允許中斷發(fā)生  打開中斷T0
  47.                  while(1);  //兩個都打開允許輸出信號  等待中斷
  48.        }
復制代碼



作者: 51hei**1140    時間: 2022-11-18 20:12
定時器時鐘,先弄明白原理,然后逐句的去理解吧
作者: 啤酒瓶子老大    時間: 2022-11-20 01:04
void clockl()interrupt 1   //中斷處理程序
{
      static unsigned  char i=0;    創(chuàng)建一個靜態(tài)變量i
      TH0=(65536-time)/256;     //重新載入T0的初值     中斷的初始值
      TL0=(65536-time)%256;       //重新載入T0的初值
      a++;    a+1
      if(a==125)    //如果進行了125次中斷         如果a=125
      {                                                           那么
             a=0;                  
             second++;                                  秒加1
             if(second==60)                         如果秒=60
               {                            那么
                       second=0;            秒=0
                       minute++;           分+1
                      if(minute==60)      如果分=60
                            {                       那么
                                   minute=0;    分=0
                                   hour++;          小時+1
                                   if(hour==24)     如果小時=24
                                          hour=0;    那么小時=0
                            }
                     }
              }
       switch(i)                下面是刷新數(shù)碼管的6位。
       {
    case 0:P2=0x08;P0=num[hour/10];i++;break;        開始i=0運行這行給數(shù)碼管的斷碼引腳和位碼引腳送數(shù)據(jù),送完了i+1
    case 1:P2=0x09;P0=num[hour%10];i++;break;         第二次運行到選擇的時候,i=1了,就運行這行
    case 2:P2=0x0a;P0=num[minute/10];i++;break;       以下類推
    case 3:P2=0x0b;P0=num[minute%10];i++;break;
    case 4:P2=0x0c;P0=num[second/10];i++;break;
    case 5:P2=0x0d;P0=num[second%10];i=0;break;
                            }
                     }

也不知道準確不準確,反正我是這么理解的。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1