51单片机数码管显示电子表
电子表就是简单的一个时间,为了使实验结果尽快显示出来,我这里设置delay延迟设置很快,可以适当设置慢一点。
#include <reg52.h>//时钟
#define uchar unsigned char
#define uint unsigned int
void delay (uint z);
uchar code smg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //共阴极
uchar code smgwx[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};//数组,前面是高电平,后面是低电平
uint sec,min,h,a=20;//定义时分秒
void main()
{
while(1)
{
while(a--)
{
P1=smgwx[7];//选择个位
P0=smg[sec%10];
delay(1);
P0=0xff;//高电平点亮
P1=smgwx[6];
P0=smg[sec/10];
delay(1);
P0=0x00;
P1=smgwx[5]; //数码管中间一个杠“——”
P0=0x40;
delay(1);
P0=0x00;
P1=smgwx[4];
P0=smg[min%10];
delay(1);
P0=0x00;
P1=smgwx[3];
P0=smg[min/10];
delay(1);
P0=0x00;
P1=smgwx[2];
P0=0x40;
delay(1);
P0=0x00;
P1=smgwx[1];
P0=smg[h%10];
delay(1);
P0=0x00;
P1=smgwx[0];
P0=smg[h/10];
delay(1);
P0=0x00;
}
a=20;
sec++;
if(sec==60)
{
sec=0;
min++;
}
if(min==60)
{
min=0;
h++;
}
if(h==24)
h=0;
}
}
void delay(uint z)//延迟函数模块
{
uint x,y;
for(x=z;x>0;x--)
for(y=124;y>0;y--);
}