ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

单片机:按秒计时 进入程序自动开始计时 K2暂停 K1继续 K3重新开始

2021-08-04 20:33:46  阅读:200  来源: 互联网

标签:void sbit unsigned K3 K2 second 计时 smg tt


#include<reg51.h>
#define uchar unsigned char;
#define uint unsigned int;
uchar position;           
uchar tt;             
uint second;       
uchar minute;
uchar hour;    
uint bz=0,bza=0;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//?--9
sbit smg_q = P2^0;  //数码管?
sbit smg_b = P2^1; 
sbit smg_s = P2^2;
sbit smg_g = P2^3;
sbit key1=P3^2; //开关
sbit key2=P3^3;
sbit key3=P3^4;
sbit key4=P3^5;
void keyscan(); //检查是否按键,开启 暂停 K1继续 K2暂停  K3 重新开始
void display(unsigned int second);//显示时分
void delay(unsigned int timer);//延时
void init();  //初始化
void main()
{
    tt=0;
    init();                                    
  while(1)
  {
   if(tt==20)
    {                          
      tt=0;
            second++;
            
      

      }
    keyscan();
    display(second);      
    delay(1);
  }
}

void keyscan()
{ if(key1==0) //如果按键1
   {
     //TR0=0;
     TR0=1;
   }
  if(key2==0)                 // ???
   {
     TR0=0;
     //TR0=1;
   }
  if(key3==0)                 // ???
   {
     tt=0;
         init();
         TR0=1;
     //TR0=1;
   }
}
void init()
{
  //tt=0;
  position=0;               
  second=0; 
  minute=0;        
  hour=0;   
  smg_q=1;
  smg_b=1;
  smg_s=1;
  smg_g=1;
  key1=1;
  key2=1;
  TMOD=0X01;  
  TH0=0x4c;        
  TL0=0x00;
  EA=1;                
  ET0=1;              
  TR0=1;              
}

void t0() interrupt 1//中断服务程序:0为外部中  0 ,1定时器0,2外部中断1,3定时器1,4串行中断
{
    TH0=0x4c;        
  TL0=0x00;
    //TH0=(65536-50000)/256; //定时器T0重新赋值:0X3C
  //TL0=(65536-50000)%256;//0XB0 15536转成16进制为:3CB0
  tt++; 
    
}
void display(unsigned int second)
{
    P0=0XFF;                             
  switch(position)
  {
   case 0:              
          smg_g=1;
          smg_q=0;
          P0=table[second/1000]; 
          break;
   case 1:
          smg_q=1;        
          smg_b=0;        
          P0=table[(second-second/1000*1000)/100];
          //if(tt>=10)
             //P0&=0xff; //第二数码管右下角的点(0x7f)
          break;
   case 2:    
         smg_b=1;                  
         smg_s=0;                  
         P0=table[(second-second/100*100)/10];
         break;
  case 3:                       
        smg_s=1;
        smg_g=0;
                
        P0=table[(second-second/100*100)%10];
                
                
                 if(tt>=10)
             P0&=0x7f; //第二数码管右下角的点(0x7f)
        break;
 }
  position++;               
 if(position>3)
   position=0;      
}
void delay(unsigned int time)
{                
   unsigned int x,y;
   for(x=time;x>0;x--)
     for(y=110;y>0;y--);
}

 

标签:void,sbit,unsigned,K3,K2,second,计时,smg,tt
来源: https://www.cnblogs.com/xkdn/p/15100638.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有