微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求大神给注释

求大神给注释

时间:10-02 整理:3721RD 点击:

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

#define delay_time 3

uchar 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,调节时间,每调一次时加1;KEY3, 调节时间,每调一次分加1;KEY4,从其它状态切换至时钟状态;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+可以不 - -


这还要注解, 罚你好好看看  郭天祥 写的通俗易懂。 不是做广告这个,真没必要求助

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top