51単片機単純時計
39000 ワード
シミュレーションとプログラムはここでコードを抽出してください:azxy
#include
#include
typedef unsigned char u8;
typedef unsigned int u16;
sbit P20=P2^0; // , ,
sbit P21=P2^1; // stan , ,
sbit P22=P2^2; // stan , ,
u8 code duan[12]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,0x00,0x40}; //
u8 code wala[8]={
0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //
u8 smg_cout[8];
u8 i=0; //i=1 50ms i=20 1s
u8 hour=0,min=0,s=0; // , ,
u8 stan=0; //
//stan=0
//stan=1
//stan=2
//stan=3
/*****************************************************
********************* *************************
*****************************************************/
void delay(u16 i)
{
while(i--);
}
/*****************************************************
********************* *************************
*****************************************************/
void Timer0Init()
{
TMOD=0x01;
TH0=(65536-50000)/255;
TL0=(65536-50000)%255;
TR0=1;
ET0=1;
EA=1;
}
/*****************************************************
******************* *********************
*****************************************************/
void smg_display()
{
static u8 num=0;
while(num<8)
{
P1=wala[num];
P0=smg_cout[num];
num++;
delay(200);
}
if(num==8) num=0;
}
/*****************************************************
********************* *********************
*****************************************************/
void clock_display()
{
if(stan==0)
{
smg_cout[7]=duan[hour/10];
smg_cout[0]=duan[hour%10];
smg_cout[1]=duan[11];
smg_cout[2]=duan[min/10];
smg_cout[3]=duan[min%10];
smg_cout[4]=duan[11];
smg_cout[5]=duan[s/10];
smg_cout[6]=duan[s%10];
smg_display();
}
if(stan==1)
{
if(s%2==1)
{
smg_cout[7]=duan[hour/10];
smg_cout[0]=duan[hour%10];
}
else
{
smg_cout[7]=duan[10];
smg_cout[0]=duan[10];
}
smg_cout[1]=duan[11];
smg_cout[2]=duan[min/10];
smg_cout[3]=duan[min%10];
smg_cout[4]=duan[11];
smg_cout[5]=duan[s/10];
smg_cout[6]=duan[s%10];
smg_display();
}
if(stan==2)
{
if(s%2==1)
{
smg_cout[2]=duan[min/10];
smg_cout[3]=duan[min%10];
}
else
{
smg_cout[2]=duan[10];
smg_cout[3]=duan[10];
}
smg_cout[7]=duan[hour/10];
smg_cout[0]=duan[hour%10];
smg_cout[1]=duan[11];
smg_cout[4]=duan[11];
smg_cout[5]=duan[s/10];
smg_cout[6]=duan[s%10];
smg_display();
}
if(stan==3)
{
if(s%2==1)
{
smg_cout[5]=duan[s/10];
smg_cout[6]=duan[s%10];
}
else
{
smg_cout[5]=duan[10];
smg_cout[6]=duan[10];
}
smg_cout[7]=duan[hour/10];
smg_cout[0]=duan[hour%10];
smg_cout[1]=duan[11];
smg_cout[2]=duan[min/10];
smg_cout[3]=duan[min%10];
smg_cout[4]=duan[11];
smg_display();
}
}
/*****************************************************
********************* *********************
*****************************************************/
void key_down()
{
if(P20==0)
{
delay(100);
if(P20==0)
{
stan++;
if(stan==4) stan=0;
}
while(P20==0) clock_display();
}
if(P21==0)
{
delay(100);
if(P21==0)
{
if(stan==1)
{
hour++;
if(hour==24) hour=0;
}
if(stan==2)
{
min++;
if(min==60) min=0;
}
if(stan==3)
{
s++;
if(s==60) s=0;
}
}
while(P21==0) clock_display();
}
if(P22==0)
{
delay(100);
if(P22==0)
{
if(stan==1)
{
hour--;
if(hour==-1) hour=23;
}
if(stan==2)
{
min--;
if(min==-1) min=59;
}
if(stan==3)
{
s--;
if(s==-1) s=59;
}
}
while(P22==0) clock_display();
}
}
/*****************************************************
********************** **************************
*****************************************************/
void main()
{
Timer0Init();
while(1)
{
key_down();
clock_display();
}
}
/*****************************************************
******************** **********************
*****************************************************/
void timer0() interrupt 1
{
i++;
TH0=(65536-50000)/255;
TL0=(65536-50000)%255;
if(i==20)
{
i=0;
s++;
}
if(s==60)
{
s=0;
min++;
}
if(min==60)
{
min=0;
hour++;
}
if(hour==24)
{
hour=0;
min=0;
s=0;
}
}