微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 简单的秒表程序,大家多多指导

简单的秒表程序,大家多多指导

时间:10-02 整理:3721RD 点击:
#include<reg52.h>
sbit dula=P2^6;
sbit wela=P2^7;
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
unsigned char code table[]={
                              0x3f,0x06,0x5b,0x4f,
                              0x66,0x6d,0x7d,0x07,
                              0x7f,0x6f,0x77,0x7c,
                              0x39,0x5e,0x79,0x71
                              };
unsigned char bai,shi,ge,tt,flag_key;
unsigned int num;
void keyscan();
void init();
void display(bai,shi,ge);
void delay(unsigned int z);
/*无问题程序,实现了key2按键锁死后只有key3才能解锁的功能
四个按键,暂停键,停止键,开始键,清零键
按键之间功能互不干扰*/
void main()
{   
  init();
  while(1);
}  
/*********************************
初始化程序,通过定时器进入中断
*********************************/
void init()
{
  key1=1;  
  num=0;
  flag_key=0;
  TMOD=0x01;
  TH0=(65536-10000)/256;
  TL0=(65536-10000)%256;
  EA=1;
  ET0=1;
  TR0=1;
}
/************
进入中断,执行中断程序,在中断中执行按键扫描程序
*********************************/
void timer0() interrupt 1
{
  TH0=(65536-10000)/256;
  TL0=(65536-10000)%256;
  tt++;
  if(tt==10)
   {
     tt=0;
     num++;
     bai=num/100;
     shi=num%100/10;
     ge=num%10;
     if(num ==1000) num=0;
   }
   display(bai,shi,ge);
   keyscan();  
}
/************
键盘扫描程序
*********************************/
void keyscan()
{

  /*key1按键被按下时*/
  if(key1!=1)
     {
        delay(10);
        if(key1!=1)
         {
           TR0=0;  
         }
        while(key1!=1) display(bai,shi,ge);
        if(key1 == 1) TR0=1;
     }
  /*key2按键按下时,就进入了key3
  键盘检测的死循环中,只有按了key3才能跳出死循环*/
  if(key2!=1)
   {
      delay(10);
       if(key2!=1)
        {
          TR0=0;
          flag_key=1;
        }
      while(flag_key==1)
       {
         display(bai,shi,ge);
         if(key3!=1)
          delay(10);
         if(key3!=1)
          {
            TR0=1;
            flag_key=0;
          }   
       }
   }
  if(key4!=1)
  {
    delay(10);
    if(key4!=1)
     {
       num=0;
       bai=num/100;
       shi=num%100/10;
       ge=num%10;
       display(bai,shi,ge);
       TH0=(65536-10000)/256;
       TL0=(65536-10000)%256;
     }
  }
}
/*****************
LED动态扫描
******************/
void display(bai,shi,ge)
{
  wela=1;
  P0=0xf7;
  wela=0;
  dula=1;
  P0=table[bai];
  dula=0;
  P0=0xff;
  delay(1);
   
  wela=1;
  P0=0xef;
  wela=0;
  dula=1;
  P0=table[shi];
  dula=0;
  P0=0xff;
  delay(1);
   wela=1;
  P0=0xdf;
  wela=0;
  dula=1;
  P0=table[ge];
  dula=0;
  P0=0xff;
  delay(1);
}
/***********
延时程序
**************/
void delay(unsigned int z)
{
  unsigned int x,y;
  for(x=z;x>0;x--)
   for(y=110;y>0;y--);
}

很不错

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

网站地图

Top