返回列表 发帖

求单片机程程设计

你什么专业
这是一个很简单的程序
我给你一个有功能按键的程序你看哈
照着改就可以了

TOP

#include "reg52.h"

#define THCO   0xee
#define TLCO   0x0

unsigned char  code Duan[]={0x3F, 0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsigned char  Data_Buffer[4]={0,0,0,0,};


sbit P10=P1^0;     //数码管位码口定义
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;

sbit LED1=P2^3;    //LED灯的定义
sbit LED2=P2^4;
sbit LED3=P2^5;
sbit LED4=P2^6;

sbit P20=P2^0;     //按键的定义
sbit P21=P2^1;
sbit P22=P2^2;
sbit P32=P3^2;
sbit louder=P1^4;  //蜂鸣器的定义

bit  flag=0;       //标志的定义
bit  start=1;
int  f=0;

unsigned  char Msec=0;//静态变量的定义
unsigned  char Sec=0;
unsigned  char Min=0;
unsigned  char Hour=0;
unsigned  char Count=0;
unsigned  char Count1=0;
unsigned  char Bit=0;
unsigned  char mode=0;
unsigned  char record=0;
unsigned  char show=0;
unsigned  char show1=0;

unsigned char  mask[3][4];                        //子函数声明

void rember();
void display();
void stop();
void delay();      



void main()                                 //主函数
{
   louder=1;
   TMOD=0x11;                         //定时器初始化,5ms定时
   TH0=THCO;
   TL0=TLCO;

   TR0=1;                            //外部中断0,边沿触发方式
   ET0=1;
   EA=1;

  while(1)
  {  
   if(f==1)
    {
         louder=!louder;LED1=!LED1; delay(); LED1=1;  
        }
   if(f==2)
   {
    louder=!louder; delay();LED2=!LED2; delay();LED2=1;
   }
   if(f==3)
   {
    louder=!louder; LED3=!LED3;delay();  LED3=1;
   }
   if (start==1)
   if (show==0)
   {
     if(mode==0)
         {
          Data_Buffer[0]=Sec/10;
          Data_Buffer[1]=Sec%10;
          Data_Buffer[2]=Msec/10;
          Data_Buffer[3]=Msec%10;
         }
     if(mode==1)
         {
          Data_Buffer[0]=Min/10;
          Data_Buffer[1]=Min%10;
          Data_Buffer[2]=Sec/10;
          Data_Buffer[3]=Sec%10;
        }
    if(mode==2)
         {
          Data_Buffer[0]=Hour/10;
          Data_Buffer[1]=Hour%10;
          Data_Buffer[2]=Min/10;
          Data_Buffer[3]=Min%10;
        }
   }
  }
}
void timer0() interrupt 1
{
   TH0=THCO;
   TL0=TLCO;
   P1=0X1F;
   Count++;
         
   Bit++;
   if(Bit>=4)Bit=0;
         
   switch(Bit)
   {
     case 0: P10=0;break;
     case 1: P11=0;break;
     case 2: P12=0;break;
     case 3: P13=0;break;
        }

    if(Bit==1&&flag==1)
        P0=0x80|Duan[Data_Buffer[Bit]]; //小数点的输出      
    else P0=Duan[Data_Buffer[Bit]];
   
    if(Count%100==0)flag=!flag;
    if(Count%2==0)Msec++;              //跑秒计算

    if(Count==200)                     //秒计算
        {
       Count=0;
       Msec=0;
       Sec++;
        }
   if(Sec==60)                         //分的计算
   {
       Sec=0;
       Min++;
   }
   if(Min==60)                             //小时的计算
   {   
     Min=0;
     Hour++;
   }
   if(Hour==24)Hour=0;              

   if (P20==0||P21==0||P22==0||P32==0)        //判断是否有键按下
   {  

    Count1++;
        if(Count1>=60)
        {
          Count1=0;
     if(P20==0)
     {   
     mode++;   if(mode==3) mode=0;
         }
         else if (P21==0)    rember();
     else if (P22==0)    display();
     else if (P32==0)    stop();
       
   
         }

  }

}

void rember()                                          //记录子函数
{      record++;
       if(record==4)record=0;           
        else if( record==1)
           {   LED1=!LED1;LED1=1;
           mask[0][0]=Sec/10;
           mask[0][1]=Sec%10;
           mask[0][2]=Msec/10;
                   mask[0][3]=Msec%10;
           }
           else if(record==2)
          {    LED2=!LED2;LED2=1;
                   mask[1][0]=Sec/10;
           mask[1][1]=Sec%10;
           mask[1][2]=Msec/10;
                   mask[1][3]=Msec%10;
       }
           else if(record==3)
       {  LED3=!LED3;LED3=1;
                  mask[2][0]=Sec/10;
          mask[2][1]=Sec%10;
          mask[2][2]=Msec/10;
                  mask[2][3]=Msec%10;
                }

}                               
                  

void display()                                     //显示子函数
{                  
     show++;                  
     switch(show)
      {
       case 1:  Data_Buffer[0]=mask[0][0];
                Data_Buffer[1]=mask[0][1];
                Data_Buffer[2]=mask[0][2];
                            Data_Buffer[3]=mask[0][3];
                                f=1;break;

       case 2:  Data_Buffer[0]=mask[1][0];
                Data_Buffer[1]=mask[1][1];
                Data_Buffer[2]=mask[1][2];
                            Data_Buffer[3]=mask[1][3];
                            f=2;break;

          case 3:   Data_Buffer[0]=mask[2][0];
                Data_Buffer[1]=mask[2][1];
                Data_Buffer[2]=mask[2][2];
                            Data_Buffer[3]=mask[2][3];
                    f=3;break;

      case 4:   Msec=0;Sec=0;
                        Data_Buffer[0]=Sec/10;              
                            Data_Buffer[1]=Sec%10;
                            Data_Buffer[2]=Msec/10;
                            Data_Buffer[3]=Msec%10;
                                f=0;louder=0;break;
               
       }
   if(show==5)show=0;
}

void stop()
{
  start=!start;
}

void delay()
{
  int i=0;
  for(;i<=25;i++);

}

TOP

返回列表