• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

基于51单片机的时钟【整点报时,半点报时,数码管】(仿真)

01/29 08:45
262
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

有需要资料的可了解一下.docx

共1个文件

it k2=P1^2;
sbit beep=P1^5;//蜂鸣器
sbit smg1=P2^2;//数码管
//数码管编码
uchar code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar time=0,mode2=0;//系统变量
uchar shi=6,fen=59,miao=55,sec=0;
uchar start=0;
uchar flag1=0,flag2=0,time1=0;//报时控制
uchar flag=0;
uchar change=0;
//延时
void delay(uint i)
{
	while(i--);
}
//主函数
void main()
{
	uchar k=0;
	TMOD|=0X01;
	TH0=0X3C;
	TL0=0XB0;	
	ET0=1;//打开定时器0中断允许
	EA=1;//打开总中断
	TR0=1;//打开定时器
	beep=0;
	while(1)
	{
		//正常模式
		if(s1)
		{
			if(change)
			{
				change=0;
				mode2=0;
			}
			if(mode2==0)//分钟
			{
				P0=0;smg1=1;P0=smgduan[fen/10];delay(100);
				P0=0;smg1=0;P0=smgduan[fen%10];delay(100);
			}
			else//小时
			{
				P0=0;smg1=1;P0=smgduan[shi/10];delay(100);
				P0=0;smg1=0;P0=smgduan[shi%10];delay(100);
			}
			//LED
			if(flag==0)
			{
			if(time<11)
				P3=0xff;
			else
				P3=0;
			}
			//按键切换
			if(!k1 &&(k!=1))//小时
			{
				k=1;
				if(sec==0)
				{
					sec=3;
					mode2=1;
					start=1;
				}
				else
				{
					mode2=0;
					start=0;
					sec=0;
				}
			}			
			if(k1 && k2)
				k=0;
		}
		else//设置模式
		{
			change=1;
			if(mode2==0)//分钟
			{
				if(time<11)
				{
					P0=0;smg1=1;P0=smgduan[fen/10];delay(100);
					P0=0;smg1=0;P0=smgduan[fen%10];delay(100);
				}
				else
					P0=0;
				P3=0xff;
			}
			else//小时
			{
				if(time<11)
				{
					P0=0;smg1=1;P0=smgduan[shi/10];delay(100);
					P0=0;smg1=0;P0=smgduan[shi%10];delay(100);
				}
				else
					P0=0;
				P3=0;
			}
			//按键切换
			if(!k1 &&(k!=1))//切换
			{
				k=1;
				mode2=!mode2;
			}
			if(!k2 &&(k!=2))//加
			{
				k=2;
				if(mode2==0)
				{
					if(fen<59)
					 	fen++;
					else
						fen=0;
				}

资料借鉴于此纷传

  • 有需要资料的可了解一下.docx
    下载

相关推荐