原创 在 keil 中完成数字钟的演示

2007-11-18 09:33 2706 4 4 分类: MCU/ 嵌入式

能不能不用硬件做一个数字电子钟呢?对于这个问题的回答是完全十分的肯定回答.是完全可以的,下面的这个程序就是作者编的电子显示钟的完全程序,拿出来与各位同行们一起来欣赏:


#include <reg52.h>


/*#include <absacc.h>
#define P8155CTR XBYTE[0x0000]
#define BIT_LED XBYTE[0x0001]
#define SEG_LED XBYTE[0x0002]
*/
#define uchar unsigned char
#define uint unsigned int
#define fosc 12             /*晶振频率*/
#define time0 2500                /*定时2500us;*/


uchar data disp_bit,disp_buff[8];
uchar time0_h,time0_l;display_bit;
uint idata time0_times,bitcount=0;
uchar c[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF};   //.gfedcba
uchar hour="14",min=32,sec=56;
void update()
{
  disp_buff[0]=c[hour/10];
  disp_buff[1]=c[hour%10];
  disp_buff[2]=0xbf;
  disp_buff[3]=c[min/10];
  disp_buff[4]=c[min%10];
  disp_buff[5]=0xbf;
  disp_buff[6]=c[sec/10];
  disp_buff[7]=c[sec%10];
}
void main()
{
  uint timecount="0";
  uchar k="0";
  update();
/*  P8155CTR=0x4f;   */
  TMOD="0x01";
  time0_times=65536-time0*fosc/12;
  time0_h=time0_times/256;
  time0_l=time0_times%256;
  TR0=1;
  display_bit=0x80;
  while(1)
  {
    if(TF0)
    {
      TF0=0;
      TH0=time0_h;
      TL0=time0_l;
//     BIT_LED=0xff;             /*关显示*/
/*      SEG_LED=disp_buff[bitcount];
      BIT_LED=~display_bit;
*/
      P0=disp_buff[bitcount];
      P2=~display_bit;
      if(display_bit==1) display_bit=0x80;
      else  display_bit>>=1;
      bitcount++;
      if (bitcount==8)bitcount=0;
      timecount++;
      if(timecount==400)       /*2500us*400=1s,达到1秒*/
      {
        timecount="0";
        sec++;
        if(sec==60)
        {
          sec="0";min++;
          if(min==60)
          {
            min="0";hour++;
            if(hour==24) hour="0";
          }
        }
        update();
      }
    }
  }
}
 


点击看大图

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
4
关闭 站长推荐上一条 /3 下一条