找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1655|回复: 1
打印 上一主题 下一主题
收起左侧

关于上一次单片机电子时钟的进一步补充(含按键程序,可调时间,程序简单)

[复制链接]
跳转到指定楼层
楼主
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


具体程序如下:
#include <reg52.h>
void delay(unsigned int t)
{
while (--t);
}
sbit led1wei=P2^7;
sbit led2wei=P2^6;
sbit led3wei=P2^4;
sbit led4wei=P2^3;
sbit led5wei=P2^1;
sbit led6wei=P2^0;
sbit led7wei=P2^5;
sbit led8wei=P2^2;
sbit key1=P3^0;
sbit key2=P3^2;
char m,n;
unsigned char hour,sec,min;
void button();
char a[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0,1,2,3,4,5,6,7,8,9//  
/*********定时器初始化子程序********/
void time0(void)
{
TMOD|=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
EX0=1;
IT0=1;
}
/************数码管显示*************/
void display()
{
if(n==0)                                                                  
{
led1wei=0;
P0=a[hour/10];
delay(100);
led1wei=1;

led2wei=0;
P0=a[hour%10];
delay(100);
led2wei=1;                                                                                         

led3wei=0;
P0=a[min/10];
delay(100);
led3wei=1;

led4wei=0;
P0=a[min%10];
delay(100);
led4wei=1;

led5wei=0;
P0=a[sec/10];
delay(100);
led5wei=1;

led6wei=0;
P0=a[sec%10];
delay(100);
led6wei=1;

}
if(n==1)
  {
   led1wei=0;
   P0=a[hour/10];
   delay(100);
   led1wei=1;

   led2wei=0;
   P0=a[hour%10];
   delay(100);
   led2wei=1;                                                                                         

  }
if(n==2)
  {
   led3wei=0;
   P0=a[min/10];
   delay(100);
   led3wei=1;

   led4wei=0;
   P0=a[min%10];
   delay(100);
   led4wei=1;

  }
  if(n==3)
  {
   led5wei=0;
   P0=a[sec/10];
   delay(100);
   led5wei=1;

   led6wei=0;
   P0=a[sec%10];
   delay(100);
   led6wei=1;

  }
}
void main()
{
time0();
led7wei=0;   
led8wei=0;  
while(1)
{
display();
button();
if(m==20)
{
  m=0;
  sec++;
  if (sec==60)
  {
   sec=0;
   min++;

   if (min==60)
   {
           min=0;
        hour++;

        if (hour==24)
        {
         sec=0;
         hour=0;        
        }
   }
  }
}
}

}
/**********按键控制***********/
/**********位控************/
void button()
{
         if (key1==0)
         {
          delay(10); //xiaodou
          if (key1==0)
                  {
                 while(key1==0)
                {display();}
                   n++;
                TR0=0;
                   if(n==4)
                         {
                          n=0;
                        TR0=1;
                         }   
                  }
         }
        }

void WBZD0(void) interrupt 0
{
if(key2==0)
{
  delay(10);
  if(key2==0)
  {
          while(key2==0)
                {display();}
  /********时段控*******/
   if(n==1)
   {
         hour++;
          if(hour==24)
           {
            hour=0;
           }
   }
/********分段控*******/
        if(n==2)
   {
         min++;            
     if(min==60)
            {
            min=0;
            }
        }
   /********秒段控*******/
  if(n==3)
   {         
         sec++;
   if(sec==60)
           {
            sec=0;
           }
   }      
  }
}
}
/***********定时器实现24小时循环*******/
void time1() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
m++;
}
仿真图如下: DZSZ.rar (143.21 KB, 下载次数: 18)
所有文件如下:包括程序,电路板设计,仿真

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:649067 发表于 2021-7-8 17:29 | 只看该作者
纯手工制作,如要搬用请注明出处
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表