您的位置 首页 技术

根据8051和Proteus的数字时钟 程序的编写和仿真

本程序功能及特点:通过8051芯片及数码管实现数字时钟,并可以通过如下图中的两个按键对时钟进行调节,其中 “PAUSE”按键的作用是暂停/启动时钟并选择要修改的时间参数&l

  本程序功能及特色:经过8051芯片及数码管完成数字时钟,并可以经过如下图中的两个按键对时钟进行调理,其间 “PAUSE”按键的作用是暂停/发动时钟并挑选要修正的时刻参数“时”,“分”,“秒”,被挑选参数例如下图中从左到右依次为“时,分,秒”,当小时被选中并被修正时会有最下面两点的点亮以作为提示,“CHANGE”按键用来对被选中的参数进行修正,只能进行加法修正,超越参数的上限会主动归零,

  注:本程序仅供自己日后学习参阅运用,不足之处请见谅,

  

 

  #include

  sbit dualock=P2^0;

  sbit weilock=P2^1;

  unsigned char code duacode[]={0x3f,0x06,0x5b,0x4f,

  0x66,0x6d,0x7d,0x07,

  0x7f,0x6f,0x77,0x7c,

  0x39,0x5e,0x79,0x71};

  unsigned char aa=0,hour=0,mint=0,sec=0,bb=0,*choose;

  void display(unsigned char,unsigned char,unsigned char);

  void delay();

  void init();

  void main()

  {

  init();

  while(1)

  {

  display(hour,mint,sec);

  }

  }

  void init() //初始化

  {

  EA=1; ET0=1;

  EX0=1;IT0=1;

  EX1=1;IT1=1;

  TMOD=0x01;

  TH0=(65535-50000)/256;

  TL0=(65535-50000)%256;

  TR0=1;

  }

  void display(unsigned char hour,unsigned char mint,unsigned char sec) //显现函数

  {

  weilock=1;

  P0=~(1<<0);

  weilock=0;

  dualock=1;

  P0=(bb==1)?duacode[sec%10]|0x80:duacode[sec%10];

  dualock=0;

  delay();

  weilock=1;

  P0=~(1<<1);

  weilock=0;

  dualock=1;

  P0=(bb==1)?duacode[sec/10]|0x80:duacode[sec/10];

  dualock=0;

  delay();

  weilock=1;

  P0=~(1<<2);

  weilock=0;

  dualock=1;

  P0=(bb==2)?duacode[mint%10]|0x80:duacode[mint%10];

  dualock=0;

  delay();

  weilock=1;

  P0=~(1<<3);

  weilock=0;

  dualock=1;

  P0=(bb==2)?duacode[mint/10]|0x80:duacode[mint/10];

  dualock=0;

  delay();

  weilock=1;

  P0=~(1<<4);

  weilock=0;

  dualock=1;

  P0=(bb==3)?duacode[hour%10]|0x80:duacode[hour%10];

  dualock=0;

  delay();

  weilock=1;

  P0=~(1<<5);

  weilock=0;

  dualock=1;

  P0=(bb==3)?duacode[hour/10]|0x80:duacode[hour/10];

  dualock=0;

  delay();

  }

  void delay()

  {

  unsigned char i=30;

  while(i–);

  }

  void ext0() interrupt 0 //外部中止0 选中被修正参数

  {

  TR0=0; bb++;

  switch(bb)

  {

  case 1: choose=&sec; break;

  case 2: choose=&mint;break;

  case 3: choose=&hour;break;

  case 4: TR0=1;bb=0; break;

  }

  }

  void timer0() interrupt 1

  {

  TH0=(65535-50000)/256;

  TL0=(65535-50000)%256;

  if(++aa==20) {aa=0;sec++;}

  if(sec==60) {sec=0;mint++;}

  if(mint==60) {mint=0;hour++;}

  }

  void ext1() interrupt 2 // 外部中止2 对被选中参数进行修正

  {

  *choose+=1;

  if(sec==60) sec=0;

  if(mint==60) mint=0;

  if(hour==24) hour=0;

  }

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/jishu/285353.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部