从2018年1月开始加
#include "reg52.h"
int year,month;
year=2018;
month=0;
unsigned char code SMG_duanma[18]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,
0xbf,0x7f};//01234567 89ABCDEF -.
void delay(int n)
{
while(n--)
{}
}
void Init_Hc138(int n) //译码器选择
{
switch (n)
{
case 4:
P2=(P2 & 0x1f) | 0x80;
break; //让Y4输出低电平
case 5:
P2=(P2 & 0x1f) | 0xa0;
break; //让Y5输出低电平
case 6:
P2=(P2 & 0x1f) | 0xc0;
break; //让Y6输出低电平
case 7:
P2=(P2 & 0x1f) | 0xe0;
break; //让Y7输出低电平
}
}
void Output_P0(unsigned char channel,unsigned char dat)
{
Init_Hc138(channel);
P0=dat; //P0口输出数据
}
void show_smg(unsigned char pos,unsigned char val)
{
Output_P0(6,pos);
Output_P0(7,SMG_duanma[val]);
delay(500);
}
void delay_show(int c)
{
while(c--)
{
show_smg(0x01,year/1000%10);
show_smg(0x02,year/100%10);
show_smg(0x04,year/10%10);
show_smg(0x08,year%10);
show_smg(0x30,16);
show_smg(0x40,month/10);
show_smg(0x80,month%10);
}
}
void main()
{
while(1)
{
show_smg(0x01,year/1000%10);
show_smg(0x02,year/100%10);
show_smg(0x04,year/10%10);
show_smg(0x08,year%10);
show_smg(0x30,16);
show_smg(0x40,month/10);
show_smg(0x80,month%10);
month++;
delay(200);
if(month==13)
{
month=1;
year++;
}
delay_show(300);
}
}