专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

基于8位数码管的可调时钟时钟课程设计

作者:佚名   来源:本站原创   点击数:  更新时间:2012年04月23日   【字体:

  这个东西折腾我快两个月啊~!也是带啦做的不是一直在做是一边学习一边玩弄来的啊~!但是怎么说我也弄出来啊~!心里好满足啊~!因为这个可算是自己的成果。也给谢谢这次课程设计因为就这个设计让我理解很多东西让我感觉进步很多。现在就差自己做PCB板啊~!然后就是全部搞定啊~!哈哈~!

电路很简单 8位共阴数码管 (如果没有买的可以买2个四位数码管) 段选接P2口 位选接p1口,用stc单片机可以直接连接,两个按键接p1.6 和p1.7,实现时间的调整功能.完整程序代码下载地址:http://www.51hei.com/f/dzszkt.rar

这个就是我自己弄的程序小时钟的:

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0xff};
uchar code kai[]={0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7};
sbit tiao=P1^6;
sbit gai=P1^7;
uchar hour,min,sec,e,set,dada,x,i,j,u,v,w,s,m,n,p,q;
void delay(uchar k)
{
    uchar a,b;
 for(a=0;a<k;a++)
 {
  for(b=0;b<100;b++)
  {
   ;
  }
 }
}
void time_cond(void)
{
 if(sec==59)
 {
  sec=0;
  min++;
 }//sec
 if(min==59)
 {
  min=0;
  hour++;
 }//min
 if(hour==23)
 {
  hour=0;
 }//hour
}//time_con
void xianshi(uchar i,j,u,v,w,s)
{
 P2=table[i];
 P1=kai[0];
 delay(5);
 P2=table[j];
 P1=kai[1];
 delay(5);
 P2=table[p];
 P1=kai[2];
 delay(5);
 P2=table[u];
 P1=kai[3];
 delay(5);
 P2=table[v];
 P1=kai[4];
 delay(5);
 P2=table[q];
 P1=kai[5];
 delay(5);
 P2=table[w];
 P1=kai[6];
 delay(5);
 P2=table[s];
 P1=kai[7];
 delay(5);
}
void KEY_tiao(void)
{
 if(gai==0)
 {
  e++;
 }
 if(e>3)
 {
  e=1;
 }
 delay(200);
}//tiaozheng
void display_h(void)
{
 P2=table[i];
 P1=kai[0];
 delay(20);
 P2=table[j];
 P1=kai[1];
 delay(20);
 P2=table[11];
 P1=kai[0];
 delay(20);
 P2=table[11];
 P1=kai[1];
 delay(20);
 i=hour/10;
 j=hour%10;
}//display_h
void display_m(void)
{
 P2=table[u];
 P1=kai[3];
 delay(20);
 P2=table[v];
 P1=kai[4];
 delay(20);
 P2=table[11];
 P1=kai[3];
 delay(20);
 P2=table[11];
 P1=kai[4];
 delay(20);
 u=min/10;
 v=min%10; 
}//display_m
void tiaozheng(void)
{
  if(gai==0)
  TR0=0;
  KEY_tiao();
  switch(e)
 {
  case 1 :{
    if(tiao==0)
    {
     hour++;
     display_h();
     if(hour>24)
     {
      hour=0;
     }
    }
          }//case 1
   break;
   case 2 :{
    if(tiao==0)
    {
     min++;
     display_m();
     if(min>60)
     {
      min=0;
     }
    }
            }//case 2
   break;
        }//switch
}//tiaozheng
void Timer_init()
{
 ET0=0;
 TCON=0x00;
 TMOD=0x01;//工作方式1
 TH0=0x3c;
 TL0=0xaf;//定时50mS,12mHz
 ET0=1;
}//Timer_init
void Timer_Start()
{
 TR0=1;
}//Timer_Start
void Timer_interrupt(void) interrupt 1 using 0
{
 EA=0;
 dada++;
 if(dada==20)
 {
  dada=0;
  sec++;
 }
 EA=1;
 TH0=0x3c;
 TL0=0xaf;
}//Timer_interrupt
void Int1_interrupt(void) interrupt 2 using 2
{
 TR0=0;
}//Int1_interrputd
void Int0_interrupt(void) interrupt 0 using 1
{
 TR0=1;
}//Int0_interrput
void main(void)
{
 EA=1;
 EX0=1;
 EX1=1;
 Timer_init();
 Timer_Start();
 while(1)
 {
  xianshi(i,j,u,v,w,s);
  time_cond();
  i=hour/10;
  j=hour%10;
  u=min/10;
  v=min%10;
  w=sec/10;
  s=sec%10;
  p=10;
  q=10;
    tiaozheng();
 }//while
}//main

 

关闭窗口

相关文章