51 단편기-1602 액정 시계 코드

1955 단어
단편기 흰둥이, 단편기를 처음 배웠습니다. 51단편기를 이용하여 1602 디스플레이를 기반으로 한 시계 프로그램을 간단하게 작성했습니다. 기술이 좋지 않아서 나쁜 점이 많을 수 있습니다. 신의 가르침을 바랍니다.
기본 기능: 시계 표시, 버튼으로 시간 조정, 분
#include
#define uint unsigned int
#define uchar unsigned char
sbit en=P3^4;
sbit rs=P3^5;
sbit rw=P3^6;
sbit s2=P3^0;
sbit s3=P3^1;
sbit s4=P3^2;
sbit s5=P3^3;
uchar shi,fen,miao,num,num1=0,num2=0,num3=0,flag;
void delay(uint z)
{
	uint x,y;
	for(x=z;x>0;x--)
		for(y=110;y>0;y--);
}
void busy()
{
	uchar busy;
	P0=0xff;
	rs=0;
	rw=1;
	do
	{
		en=1;
		busy=P0;
		en=0;

	}while(busy & 0x80);//    

}
void write_com(uchar com)
{
	busy();
	rs=0;
	rw=0;
	P0=com;
	en=1;
	en=0;
}
void write_date(uchar date)
{
	busy();
	rs=1;
	rw=0;
	P0=date;
	en=1;
	en=0;
}
void display(uchar num,weizhi)
{
	uchar shi,ge;
	shi=num/10;
	ge=num%10;
	write_com(0x80+0x03+weizhi);
	write_date(0x30+shi);
	write_date(0x30+ge);
}
void init()
{
	write_com(0x38);
	write_com(0x0c);
	write_com(0x06);
	write_com(0x01);//  
	write_com(0x80|0x07);
	write_date(':');
	write_com(0x80|0x0a);
	write_date(':');
	display(0,2);
	display(0,5);
	display(0,8);
	TMOD=0x01;
	TH0=(65536-45872)/256;
	TL0=(65536-45872)%256;
	EA=1;
	ET0=1;
	TR0=0;	
}
void keyscan()
{
	if(s5==0)
	{
		delay(10);
		if(s5==0)
		{
			while(!s5);
			TR0=~TR0;
		}
	}
	if(s3==0)
	{
		delay(10);
		if(s3==0)
		{
			num2++;
			if(num2==60)
				num2=0;
				display(num2,5);
				while(!s3);	
		}			   
	}
	if(s2==0)
	{
		delay(10);
		if(s2==0)
		{
		num3++;
		if(num3==24)
			num3=0;
			display(num3,2);
			while(!s2);
		}
	}
}  
void main()
{
	init();
	while(1)
	{
		keyscan();
	}
}
void time0() interrupt 1
{
	TH0=(65536-45872)/256;
	TL0=(65536-45872)%256;
	num++;
	if(num==20)
	{
		num=0;
		num1++;
	}
	display(num1,8);
	if(num1==60)
		{
			num1=0;
			num2++;
			if(num2==60)
			{
				num2=0;
				num3++;
				if(num3==24)
				{
					num3=0;
				}
					display(num3,2);
			}
				display(num2,5);
		}
}

좋은 웹페이지 즐겨찾기