求大神给注释

2019-07-15 15:51发布

#include<reg51.h>#define uchar unsigned char#define uint unsigned int#define delay_time 3uchar k,dat[]={0,0,0,0,0,0,0,0};uint tcount,t,u;uchar dat1[]={0,0,0,0,0,0,0,0};uchar dat2[]={0,0,0,0,0,0,0,0};uchar alARMs[]={0,0,0,0,0,0,0,0};uchardis_bit[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};unsigned char  code SEG7[11]={0xC0,/*0*/                                    0xF9,/*1*/                                    0xA4,/*2*/                               0xB0,/*3*/                               0x99,/*4*/                               0x92,/*5*/                               0x82,/*6*/                               0xF8,/*7*/                               0x80,/*8*/                               0x90,/*9*/                                        0xBF,/*-*/                                       };sbit miaobiao1=P1^0;sbit tminute=P1^1;sbit thour=P1^2;sbit miaobiao2=P1^3;sbit alarm=P1^4;sbit P0_0=P0^0;sbit P1_5=P1^5;sbit P1_6=P1^6;sbit P1_7=P1^7;uchar ms=0;uchar flag=0;uchar sec=0;uchar minit=0;struct time{uchar second;uchar minute;ucharhour;}time1; uchar n,i;void delay(n)  {   while(n--)       {       for(i=120;i>0;i--);    }  }


voidmodify(void){  EA=0;  if(thour==0)  {     if(flag==0)    {    dat1[6]++;delay(180);    if(dat1[6]>9)        {           dat1[6]=0;dat1[7]++;              if(dat1[7]>2)              {                dat1[7]=0;              }        }       }        if(flag==1)        {          alarms[6]++;delay(200);          if(alarms[6]>9)          {             alarms[6]=0;alarms[7]++;                if(alarms[7]>2)                {                   alarms[7]=0;                }          }      dat[6]=alarms[6];          dat[7]=alarms[7];        }   }  if(tminute==0)   {    if(flag==0)    {    dat1[3]++;delay(180);        if(dat[3]>=10)        {           dat1[4]++;dat1[3]=0;              if(dat1[4]>5)              {                 dat1[4]=0;              }        }    }        if(flag==1)        {          alarms[3]++;    delay(200);          if(alarms[3]>9)          {             alarms[4]++;alarms[3]=0;                if(alarms[4]>5)                {                   alarms[4]=0;                }          }          dat[3]=alarms[3];          dat[4]=alarms[4];        }   }  if(miaobiao1==0)   {     TR0=0;ET0=0;TR1=1;ET1=1;   }   if(miaobiao2==0)        {           TR0=1;ET0=1;TR1=0;ET1=0;          dat2[0]=0;          dat2[1]=0;          dat2[3]=0;          dat2[4]=0;          dat2[6]=0;          dat2[7]=0;          ms=0;          sec=0;          minit=0;
        }        if(P1_5==0)        {          TR0=0;ET0=0;TR1=0;ET1=0;         }       if(alarm==0)       {        TR0=0;ET0=0;TR1=0;ET1=0;flag=1;   dat[0]=0;   dat[1]=0;       dat[2]=10;   dat[3]=0;       dat[4]=0;       dat[5]=10;       dat[6]=0;       dat[7]=0;    }  EA=1;
}

void init(void){
       TMOD= 0x11;        TH0= 0xDB;       TL0=0xFF;       TH1=0xDB;       TL1=0xFF;   ET0 = 1;                       //10ms       ET1=1;//     TR1=1;   TR0=1;   tcount=0;       ms=0;       sec=0;       minit=0;       EA= 1;
}

void test(void)       {          for(k=0;k<8;k++)          {             P3=dis_bit[k];P2=SEG7[dat[k]];delay(1);P3=0X00;          }
    }

void main()   {     init();
     delay(10);     while(1)     {       modify();       test();     }}
void diplay() interrupt 1{    ET0=0;  TR0=0;  TH0 = 0xDB;  TL0 = 0xff;  TR0=1;  tcount++;  if(tcount==100)    {   time1.second++;   tcount=0;       dat1[0]=(time1.second)%10;       dat1[1]=(time1.second)/10;   }  if(time1.second==60)   {    time1.second=0;    time1.minute++;   dat1[3]=(time1.minute)%10;       dat1[4]=(time1.minute)/10;   }   if(time1.minute==60)   {    time1.minute=0;    time1.hour++;    dat1[6]=time1.hour%10;       dat1[7]=time1.hour/10;   } if(time1.hour>23)   {    time1.hour=0;    }  dat[5]=10;  dat[2]=10;  dat[0]=dat1[0];  dat[1]=dat1[1];  dat[3]=dat1[3];  dat[4]=dat1[4];  dat[6]=dat1[6];  dat[7]=dat1[7];  flag=0;  P0=0x00;   if((alarms[7]==dat1[7])&&(alarms[6]==dat1[6])&&(alarms[4]==dat1[4])&&(alarms[3]==dat1[3]))   {     P0=0x01;   }
       ET0=1;
}
void time_2(void)interrupt 3{  EA=0;   TR0=0;  TH1=0xDB;  TL1=0xFF;  TR1=1;  ms++;  dat2[0]=ms%10;  dat2[1]=ms/10;  if(ms>=100)   {    ms=0;    sec++;    dat2[3]=sec%10;    dat2[4]=sec/10;    if(sec>=60)       {               sec=0;        minit++;        dat2[6]=minit%10;        dat2[7]=minit/10;        }   }  dat[5]=10;  dat[2]=10;  dat[0]=dat2[0];  dat[1]=dat2[1];  dat[3]=dat2[3];  dat[4]=dat2[4];  dat[6]=dat2[6];  dat[7]=dat2[7];  EA=1; }
这是一个数码管电子时钟的程序,用一片AT89C51A单片机通过编程去驱动8个数码管实现的。通过6个开关控制,从上到下6个开关KEY1~KEY6的功能分别为:KEY1,切换至秒表;KEY2,调节时间,每调一次时加1KEY3, 调节时间,每调一次分加1KEY4,从其它状态切换至时钟状态;KEY5,切换至闹钟设置状态,也可以对秒表清零;KEY6,秒表暂停.控制键分别与P1.0~P1.5口连接.其中:A.通过P2口和P3口去控制数码管的显示如图所示P2口接数码管的a——g端,是控制输出编码,P3口接数码管的1——8端,是控制动态扫描输出.B.从P0.0输出一个信号使二极管发光,二极管在设置的闹钟时间到了时候发光,若有乐曲可以去驱动扬声器实现。
功能说明:1.各个控制键的功能:可对时间进行校准调节(只能加1);按下设置键数字时钟进入闹钟设置状态,设置闹钟的时间;时加1、分加1键是在校准时间时或设置闹钟时间对小时数或分钟数调节而设置的;按下秒切换键就可以进入秒表模式,同时秒表也开始计时,按下秒表暂停、复位键就暂停、归零,如果要重新对秒计时则可以按秒表开始、复位;清零键可以对闹钟清零。2. AT89C51单片机,通过编写程序对数码显示进行控制。3.八个7段数码管显示时钟和秒表信号。希望能详细一些,这个程序用的AT89C51A仿真,我用STC90C516RD+可以不 - -
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。