单片机/MCU论坛
直播中

小鹏

12年用户 63经验值
擅长:数字及可编程逻辑
私信 关注
[文章]

一个简单的数码管电子表可调时程序

isis 仿真.png 初学者,请大家不要喷哦,,,,,
#include
#define uchar unsigned char
#define uint  unsigned int
uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uint sz,fz,mz,tt,ss,sg,fs,fg,ms,mg,k;  
***it key1=P1^0;  // 单独的启停按钮   
***it key2=P1^1;  // 置位清零
***it key3=P1^3;   //调时,指向时分秒
***it key4=P1^6;    //时间加
***it key5=P1^7;    //时间减
void delay (uint z)//延时函数
{
while(--z);
}
void keyscan()   //键值函数
{
  if(key1==0)  //启停功能
  {
   delay(200);
   if(key1==0)
   {
   while(!key1) ;
   delay(200);
   while(!key1) ;
   k++;
   if(k==1)
   {
    EA=0;
TR0=0;
   }
   if(k==2)   
   {
    k=0;
    EA=1;
TR0=1;
   }
   }
  }
     if(key2==0) //置位清零
  {
   delay(200);
   if(key2==0)
   {
   while(!key2) ;
   delay(200);
   while(!key2) ;
   TR0=0;
   mz=0;
   fz=0;
   sz=0;
   }
  }
  if(key3==0) //调时选择时分秒
  {
   delay(200);
   if(key3==0)
   {
   while(!key3) ;
   delay(200);
   while(!key3) ;
   TR0=0;
   k++;
if(k==4)
k=0;
//TR0=1;
}
}
    if(key4==0&&TR0==0)   //加时间            
    delay(10);
    if(key4==0&&TR0==0)
  {
   while(!key4&&TR0==0);
    switch(k)
   {
   case 1:mz++; if(mz==60) mz=0;
   break;
   case 2:fz++;if(fz==60)fz=0;
   break;
   case 3:sz++;if(sz==24)sz=0;break;  
      
  //default :;           
}                                      
}
   if(key5==0&&TR0==0)   //减时间            
    delay(10);
    if(key5==0&&TR0==0)
  {
   while(!key5&&TR0==0);
   switch(k)
   {
   case 1:mz--; if(mz==0) mz=59;
   break;
   case 2:fz--;if(fz==0)fz=59;
   break;
   case 3:sz--;if(sz==0)sz=23;break;  
  }
}                                      
}
  

void init()  //初始化
{
EA=1;   //开总中断
ET0=1;   //选中断/定时
TR0=1;    //开定时器
TMOD=0X01; //选择定时器工作方式1
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
sz=23;  //时间初值
fz=59;
mz=50;
}
void display() //显示函数
{
while(1)
{
ss=sz/10;  
sg=sz%10;
fs=fz/10;
fg=fz%10;
ms=mz/10;
mg=mz%10;
P2=0;  //数码管扫描
P0=table[ss];
delay(300);
P2=1;
P0=table[sg];
delay(300);
P2=2;
P0=0x40;
delay(300);
P2=3;
P0=table[fs];
delay(300);
P2=4;
P0=table[fg];
delay(300);
P2=5;
P0=0x40;
delay(300);
P2=6;
P0=table[ms];
delay(300);
P2=7;
P0=table[mg];
delay(300);
if(mz==60)  //时间近位
    { mz=0;
   fz++;}
   if(fz==60)
     { fz=0;
   sz++;
   }
   if(sz==24)
   sz=0;
     keyscan();调时函数
    }
}
void main() //主函数
{
while(1)
{
init();
display();
}
}
void exter0() interrupt 1  //中断函数
{
  TH0=(65530-50000)/256;
  TL0=(65535-50000)%256 ;
  tt++;
  if(tt==20)
  {
   tt=0;
   mz++;
  }
}

回帖(3)

lstcspring

2012-11-28 20:17:27
也不给个简单的功能使用说明
举报

快乐之神

2013-5-14 07:22:39
详细一点的好方便我们学习
举报

包能胜

2014-8-6 19:35:02
不简单呀 给个简单的说明
举报

更多回帖

发帖
×
20
完善资料,
赚取积分