8位数码管显示时钟

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

本人依据AT89C51和8位数码管为素材,以最少的见实现最多的功能!

本程序开机流动显示学号可实现时钟,日历,定时闹钟,秒表等功能!

C程序:

#include

unsigned char led[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00}; //用一维数组定义-9、横杠、全灭

unsigned char num[12]={2,0,0,9,3,5,0,7,0,1,2,0} ;

unsigned char a[8];

unsigned char second=0,minute=0,hour=0,year=0,mon=1,day=1,day1,hsec,sec_m,min_m,N,temp1;

unsigned char minute1=0,hour1=0;

unsigned char b[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //扫描

unsigned char k=0;

unsigned int temp; // 记录毫秒为秒的变量

unsigned char M,S_flag; //M是模式,更新时间的种模式加上正常模式 S_flag闪烁标志

sbit K0=P3^7; //K0是闹钟起停标志位

sbit K1=P3^0;

sbit K2=P3^1;

sbit K3=P3^2;

sbit BEEP=P3^3;

void delay(unsigned n) //0.2毫秒

{

int x,y;

for(x=0;x

for(y=0;y<24;y++);

}

void init1()

S_flag=0; //闪烁标志位

TMOD=0x10; //定时器以方式定时

TH1=0xfc;

TL1=0x18;

EA=1; //打开总中断

ET1=1; //允许定时器中断

TR1=1; //开启定时器(开始定时计数)

}

void init0()

{

TMOD=0x01; //定时器以方式定时

TH0=0xff;

TL0=0xff;

EA=1; //打开总中断

ET0=1; //允许定时器中断

TR0=0; //关闭定时器(关闭定时计数)

}

void display_led() //流动显示学号

{

int x;

char l,a,m;

for(a=0;a<21;a++)

{

x=a-8;

for(l=0;l<6;l++)

{

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

{

P2=b[m];

if(x>=0&&x<12) P1=led[num[x]];

else P1=led[11];

delay(10);

x++;

}

x-=8;

}

}

}

void display() //显示时钟及显示调节位{

switch(M)

{

case 0:

{

a[0]=led[hour/10];

a[1]=led[hour%10];

a[2]=led[10];

a[3]=led[minute/10];

a[4]=led[minute%10];

a[5]=led[10];

a[6]=led[second/10];

a[7]=led[second%10];

}break;

case 1:

{

if(S_flag==1)

{

a[0]=led[hour/10];

a[1]=led[hour%10];

}

else

{

a[0]=led[11];

a[1]=led[11];

}

a[2]=led[10];

a[3]=led[minute/10];

a[4]=led[minute%10];

a[5]=led[10];

a[6]=led[second/10];

a[7]=led[second%10];

}break;

case 2:

{

a[0]=led[hour/10];

a[1]=led[hour%10];

a[2]=led[10];

if(S_flag==1)

a[3]=led[minute/10];

a[4]=led[minute%10];

}

else

{

a[3]=led[11];

a[4]=led[11];

}

a[5]=led[10];

a[6]=led[second/10];

a[7]=led[second%10];

}break;

case 3:

{

if(S_flag==1)

{

a[0]=led[year/10];

a[1]=led[year%10];

}

else

{

a[0]=led[11];

a[1]=led[11];

}

a[2]=led[10];

a[3]=led[mon/10];

a[4]=led[mon%10];

a[5]=led[10];

a[6]=led[day/10];

a[7]=led[day%10];

}break;

case 4:

{

a[0]=led[year/10];

a[1]=led[year%10];

a[2]=led[10];

if(S_flag==1)

{

a[3]=led[mon/10];

a[4]=led[mon%10];

}

else

相关文档
最新文档