找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 840|回复: 2
收起左侧

单片机代码寻求注释,新学看不懂,求指教

[复制链接]
ID:1051883 发表于 2022-11-18 15:42 | 显示全部楼层 |阅读模式
  1. #include<reg51.h>
  2. unsigned charnum[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  3. //定义一个数组,来表示数码管对应的数字
  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的状态下T0工作处于模式1的状态下
  42.                  TH0=(65536-time)/256; //高八位的值  载入初值
  43.                  TL0=(65536-time)%256; //低八位的值
  44.                  TR0=1;               //打开定时器的管脚
  45.                  EA=1;  // 把总开关闭合
  46.                  ET0=1;   //允许中断发生  打开中断T0
  47.                  while(1);  //两个都打开允许输出信号  等待中断
  48.        }
复制代码


回复

使用道具 举报

ID:648281 发表于 2022-11-18 20:12 | 显示全部楼层
定时器时钟,先弄明白原理,然后逐句的去理解吧
回复

使用道具 举报

ID:230742 发表于 2022-11-20 01:04 | 显示全部楼层
void clockl()interrupt 1   //中断处理程序
{
      static unsigned  char i=0;    创建一个静态变量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)                下面是刷新数码管的6位。
       {
    case 0:P2=0x08;P0=num[hour/10];i++;break;        开始i=0运行这行给数码管的断码引脚和位码引脚送数据,送完了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;
                            }
                     }

也不知道准确不准确,反正我是这么理解的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表