C51单片机制作数码管显示数字时钟————可调C源程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include //数码管显示的数字时钟

sbit SDI=P1^7 ; //用hc595芯片来控制数码管的位选端

sbit LCK=P1^5 ;

sbit SCK=P1^6 ;

sbit K1=P2^7;

sbit K2=P2^6;

sbit K3=P2^5;

sbit K4=P2^4;

unsigned char tt,sec,sec_ge,sec_shi,min,min_ge,min_shi,hour,hour_ge,hour_shi; void delay(unsigned int t)

{

unsigned int i,j;

for(i=0;i

for(j=0;j<120;j++);

}

unsigned char code table[]=

{

0x3F, 0x06, 0x5B, 0x4F, 0x66,0x6D,0x7D,0x07,0x7F,0x6F

} ;

void hc595(unsigned char m)

{

unsigned char i;

for(i=0;i<8;i++)

{

if((m&0x80)==0x80)

SDI=1;

else

SDI=0;

SCK=0;

SCK=1;

SCK=0;

m=m<<1;//先送最高位,所以左yi

}

LCK=0;

LCK=1;

LCK=0;

}

void huansuan()

{

if(sec==60)

{

sec=0;

min++;

}

if(min==60)

{

min=0;

hour++;

}

if(hour==24)

{

hour=0;

}

sec_ge=sec%10;

sec_shi=sec/10;

min_ge=min%10;

min_shi=min/10;

hour_ge=hour%10;

hour_shi=hour/10;

}

void display()

{

hc595(0x00);

P3=0x07;

hc595(table[sec_ge]);

delay(1);

hc595(0x00);

P3=0x06;

hc595(table[sec_shi]);

delay(1);

hc595(0x00);

P3=0x05;

hc595(0x40);

delay(1);

hc595(0x00);

P3=0x04;

hc595(table[min_ge]);

delay(1);

hc595(0x00);

P3=0x03;

hc595(table[min_shi]);

delay(1);

hc595(0x00);

P3=0x02;

hc595(0x40);

delay(1);

hc595(0x00);

P3=0x01;

hc595(table[hour_ge]);

delay(1);

hc595(0x00);

P3=0x00;

hc595(table[hour_shi]);

delay(1);

hc595(0x00);

}

void main()

{

EA=1;

TMOD=0X01;

ET0=1;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

TR0=1;

while(1)

{

if(tt==20)

{

tt=0;sec++;

}

if(K1==0)

{

delay(20);

if(K1==0)

{

TR0=0;

sec++;

if(sec==60)

sec=0;

}

delay(20) ;

while(!K1)

display();

}

if(K2==0)

{

delay(20);

if(K2==0)

{

TR0=0;min++;if(min==60)

min=0;

}

delay(20);

while(!K2)

display();

}

if(K3==0)

{

delay(20);

if(K3==0)

{

TR0=0;hour++;if(hour==24)hour=0;

}

delay(20);

while(!K3)

display();

}

if(K4==0)

TR0=1;

huansuan();

display();

}

}

void duan1() interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

tt++;

}

相关文档
最新文档