Google
 
Web hellocq.net

PDA

查看完全版本 : 放假了。。用C51写了个时钟程序。。


wycx
2006-01-20, 17:28
//时钟程序
#include<reg51.H>
#include<intrins.H>

#define led_out P2
#define time0_h 0x3c
#define time0_l 0xc3


sbit D0=P0^0 ;
sbit D1=P0^1 ;
sbit D2=P0^2 ;
sbit D3=P0^3 ;
sbit D4=P0^4 ;
sbit D5=P0^5 ;
sbit D6=P0^6 ;
sbit D7=P0^7 ;
sbit fen=P3^7 ;
sbit shi=P3^6 ;

unsigned char data f[3]=
{
12,0,0
}
;
unsigned char code tab[17]=
{
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff
}
;

unsigned char data i=9 ;

void timer0(void);
void display(void);
void delay();
void tiao();
void key();
void delay1();

main()
{
P0=0 ;
TMOD=0x11 ;
TCON=0x15 ;
IE=0x82 ;
while(1)
{
display();
key();
}
}




timer0()interrupt 1 using 2
{
unsigned char count ;
TR0=0 ;
TL0=time0_l ;
TH0=time0_h ;
TR0=1 ;
if(count++==39)
{
count=0 ;
f[2]++;
tiao();
TL0=TL0+7 ;
//秒较准
}
}


void display()
{
led_out=tab[f[0]/10];
D0=1 ;
delay();
D0=0 ;


led_out=tab[f[0]%10];
D1=1 ;
delay();
D1=0 ;

led_out=0xbf;
D2=1;
delay();
D2=0;


led_out=tab[f[1]/10];
D3=1 ;
delay();
D3=0 ;

led_out=tab[f[1]%10];
D4=1 ;
delay();
D4=0 ;

led_out=0xbf;
D5=1;
delay();
D5=0;


led_out=tab[f[2]/10];
D6=1 ;
delay();
D6=0 ;

led_out=tab[f[2]%10];
D7=1 ;
delay();
D7=0 ;
}


void delay()
{
unsigned char i=2,j=2 ;
while(i--)while(j--)
;

}


void tiao()
{

if(f[2]>59)
{
TL0=TL0+10 ;
//分钟较准
f[2]=0 ;
f[1]++;

}
;
if(f[1]>59)
{
f[1]=0 ;
f[0]++;

}
;
if(f[0]>23)
{
f[0]=0 ;

}
;

}

void key()
{
if(!fen)
{
delay1();

while(!fen);
f[1]++;
f[2]=0 ;
tiao();
}
;

if(!shi)
{
delay1();
while(!shi);
f[0]++;
}
}


void delay1()
{
display();
display();
display();
display();
}

wycx
2006-01-20, 17:35
硬件上。P0口位选,P2口段选

BG6HV
2006-01-23, 00:06
怎么不用PIC写啊,我只有PIC16FXX的编程器呵呵

wycx
2006-01-29, 18:10
反正是c。有空你自己改改。。