微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 希望大侠帮忙注释一下这个程序

希望大侠帮忙注释一下这个程序

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

#include<at89x51.h>

#define uncharunsigned char

#define unintunsigned int

unsigned char codedispcode[]={0xc0,0xf9,0xa4,0xb0,

0x99,0x92,0x82,0xf8,

0x80,0x90,0x88,0x83,

0xc6,0xa1,0x86,0x84,0xff,0xbf};//显示代码

unsigned chardispbitcode[]={0xfe,0xfd,0xfb,0xf7};      //位选口

unsigned chardispbuf[4]={0,0,0,0};

unsigned chardispbitcnt;

unint mstcnt;

unint i;

unint count=0;

unchar tp=0;

void ledshow();

void keyscan();

void delay();

void just();

void turn();

void motorstop();

void speedup();

void speeddown();

void main(void)

{

P3_0=1;

P3_1=0;

dispbuf[0]=16;

TMOD=0x02;

TH0=0x06;

TL0=0x06;

TR0=1;

ET0=1;

EA=1;

while(1)

       {

              ledshow();//数码管显示

              keyscan();//键盘扫描

       }

}

//延时10ms程序

void delay()

{

unsigned char i,j;

for(i=20;i>0;i--)

for(j=248;j>0;j--);

}

//键盘扫描程序

void keyscan()

{

       unchar temp=0;

       P1=0xff;

       if((P1&0x1f)!=0x1f)

       {

              delay();

              if((P1&0x1f)!=0x1f)

              {

                     temp=P1&0x1f;

                     switch(temp)

                     {

                     case 0x1e:

                            just();break;

                     case 0x1d:

                            turn();break;

                     case 0x1b:

                            motorstop();break;

                     case 0x17:

                            speedup();break;

       case 0x0f:

                            speeddown();break;

                     }

              }

       }

       while((P1&0x1f)!=0x1f);   

}

//数码管显示程序

void ledshow()

{

/*  

P0=dispcode[dispbuf[dispbitcnt]];

P2=dispbitcode[dispbitcnt];

dispbitcnt++;

if(dispbitcnt==4)

{

dispbitcnt=0;

}     

*/

P2=0x01;P0=dispcode[dispbuf[0]];

for(i=0;i<700;i++);

P2=0x02;P0=dispcode[dispbuf[1]];

for(i=0;i<700;i++);

P2=0x04;P0=dispcode[dispbuf[2]];

for(i=0;i<700;i++);

P2=0x08;P0=dispcode[dispbuf[3]];

for(i=0;i<700;i++);

  

       dispbuf[1]=tp/100;

       dispbuf[2]=(tp%100)/10;

       dispbuf[3]=tp%10;

}

//中断服务程序

void t0(void)interrupt 1 using 0

{

/*

mstcnt++;

if(mstcnt==8)

{

mstcnt=0;

P0=dispcode[dispbuf[dispbitcnt]];

P2=dispbitcode[dispbitcnt];

dispbitcnt++;

if(dispbitcnt==4)

{

dispbitcnt=0;

}

}  

*/

  if(count>100)

    count=0;

  if(count>tp)

     P3_7=0;

  else P3_7=1;

   count++;

}

void just()

{

       P3_0=1;

       P3_1=0;

       dispbuf[0]=16;

}

void turn()

{

       P3_0=0;

       P3_1=1;

       dispbuf[0]=17;

}

void motorstop()

{

       tp=0;

}

void speedup()

{

       if(tp>99)

        tp=100;

       else tp++;

}

void speeddown()

{

       if(tp<1)

        tp=0;

        else tp--;

}

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

网站地图

Top