收藏 分销(赏)

用89C2051的最简单的电子钟(含电路图及用C51编写的源程....doc

上传人:pc****0 文档编号:7199943 上传时间:2024-12-27 格式:DOC 页数:5 大小:26.50KB 下载积分:10 金币
下载 相关 举报
用89C2051的最简单的电子钟(含电路图及用C51编写的源程....doc_第1页
第1页 / 共5页
用89C2051的最简单的电子钟(含电路图及用C51编写的源程....doc_第2页
第2页 / 共5页


点击查看更多>>
资源描述
用89C2051的最简单的电子钟(含电路图及用C51编写的源程序清单)  附:用C51编写的源程序清单(已由实验板运行通过)  #include <AT89X51.H>    /*包含器件配置文件*/  #define uchar unsigned char  #define uint unsigned int  char DATA_7SEG[10]={0xC0,0xF9,0xA4,0xB0,0x99,                      0x92,0x82,0xF8,0x80,0x90,};/*0~9的数码管段码*/  uchar hour=0,min=0,sec=0;   /*时、分、秒单元清零*/  uchar deda=0;        /*5mS计数单元清零*/  uchar t_hour=0,t_min=0;     /*闹时时、分单元清零*/  bit d_05s=0;               /*0.5秒标志*/  bit o_f=0;       /*闹时启/停标志*/  uchar set=0;      /*模式设定标志*/  uchar m=0;  uchar flag=0;      /*RAM掉电标志*/  void delay(uint k);     /*延时子函数*/  void conv();      /*走时单元转换*/  void p_out();      /*判别闹时到否子函数*/  void dirve();      /*走时时间输出驱动子函数*/  void t_dirve();      /*闹时时间输出驱动子函数*/      /*闹时启/停子函数*/  void time1_of()       {uchar m;   if(P3_7==0)delay(1);   if(P3_7==0)o_f=1;   for(m=0;m<30;m++)    {    t_dirve();    P1=DATA_7SEG[t_min/10];P3=0xfd;delay(1);    if(P3_1==0){if(o_f==1)P1_7=0;}else P1_7=1;    delay(1);    }       if(P3_5==0)delay(1);   if(P3_5==0) o_f=0;   for(m=0;m<30;m++)    {    t_dirve();    P1=DATA_7SEG[t_min/10];P3=0xfd;delay(1);    if(P3_1==0){if(o_f==1)P1_7=0;else P1_7=1;}    delay(1);    }  }    /*走时函数*/  void time()  {  conv();       /*走时单元转换*/  dirve();       /*走时时间输出驱动子函数*/  p_out();       /*判别闹时到否子函数*/  }      /*定时器T0  5mS初始化*/  void init_timer()  {  TMOD=0x01;  TH0=-(4800/256);  TL0=-(4800%256);  IE=0x82;  TR0=1;  }    /*扫描按键子函数*/  void scan_key()  {  delay(1);  if(P3_4==0)set++;  if(set>=4)set=0;  if(set==1)flag=0x55;  F0:if(P3_4==0)goto F0;    /*按键未释放,在此等候*/  }      /*延时子函数*/  void delay(uint k)  {  uint i,j;  for(i=0;i<k;i++){  for(j=0;j<121;j++)  {;}}  }    /*5mS定时中断服务子函数*/  void zd(void) interrupt 1  {  TH0=-(4800/256);  TL0=-(4800%256);  deda++;  }    /*调整走时时间*/  void time_adj()  {uchar m;   if(P3_5==0)delay(1);   if(P3_5==0)hour++;   if(hour==24)hour=0;   for(m=0;m<30;m++)    {    dirve();    if(P3_2==0)P1_7=0;    else P1_7=1;    delay(1);    }       if(P3_7==0)delay(1);   if(P3_7==0)min++;   if(min==60)min=0;   for(m=0;m<30;m++)    {    dirve();     if(P3_2==0)P1_7=0;    else P1_7=1;    delay(1);    }  }      /*调整闹时时间*/  void time1_adj()  {uchar m;   if(P3_5==0)delay(1);   if(P3_5==0)t_hour++;   if(t_hour==24)t_hour=0;   for(m=0;m<30;m++)    {    t_dirve();    }      if(P3_7==0)delay(1);   if(P3_7==0)t_min++;   if(t_min==60)t_min=0;   for(m=0;m<30;m++)    {    t_dirve();    }  }     /*时、分、秒单元及走时单元转换*/  void conv()  {  if(deda<=100)d_05s=0;   else d_05s=1;  if(deda>=200){sec++;deda=0;}  if(sec==60){min++;sec=0;}  if(min==60){hour++;min=0;}  if(hour==24){hour=0;}  }    /*走时时间输出驱动子函数*/  void dirve()  {  P1=DATA_7SEG[hour/10];P3=0xf7;delay(1);  P1=DATA_7SEG[hour%10];P3=0xfb;delay(1);  if(d_05s==1){if(P3_2==0)P1_7=0;else P1_7=1;}  delay(1);  P1=DATA_7SEG[min/10];P3=0xfd;delay(1);  if(o_f==1){if(P3_1==0)P1_7=0;else P1_7=1;delay(1);}  P1=DATA_7SEG[min%10];P3=0xfe;delay(1);  }    /*闹时时间输出驱动子函数*/  void t_dirve()  {  P1=DATA_7SEG[t_hour/10];P3=0xf7;delay(1);  if(P3_3==0)P1_7=0;else P1_7=1;  delay(1);  P1=DATA_7SEG[t_hour%10];P3=0xfb;delay(1);  P1=DATA_7SEG[t_min/10];P3=0xfd;delay(1);  P1=DATA_7SEG[t_min%10];P3=0xfe;delay(1);  }      /*判别闹时到否子函数*/  void p_out()  {  if(o_f==1){   if(t_hour==hour){if(t_min==min)    if(P3_0==0){P1_7=0;delay(1);}    else P1_7=1;       }    }  }    /*主函数*/  void main()  {   init_timer();              /*定时器T0初始化*/   while(1)      /*无限循环*/   {   if(P3_4==0)scan_key();   /*有按键,调用按键扫描子函数*/  switch(set)      /*根据set键值散转*/  {  case 0:time();break;     /*走时时间程序*/  case 1:time1_adj();break;   /*闹时时间调整*/  case 2:time_adj();break;    /*走时时间调整*/  case 3:time1_of();break;    /*启/停闹时*/  default:break;      /*其它退出*/  }   if(flag!=0x55)     /*判断掉电标志*/   {for(m=0;m<100;m++)   /*点亮四个8字400mS*/    {    P1=0x80;P3=0xf7;delay(1);    P1=0x80;P3=0xfb;delay(1);    P1=0x80;P3=0xfd;delay(1);    P1=0x80;P3=0xfe;delay(1);    }        P1=0xff;P3=0xff;delay(400); /*熄灭四个8字400mS*/   }   }  }     下面是电路图:  
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服