基于单片机智能插座(简易,定时,数码管)系统Proteus仿真(含全部资料)

全套资料包含:Proteus仿真源文件+keil C语言源程序+AD原理图+流程图+元器件清单+说明书等

资料下载:↓↓↓

通过网盘分享的文件:资料分享
链接: 百度网盘 请输入提取码 提取码: tgnu


目录

资料下载:

Proteus仿真功能

项目文件资料:

一、Proteus仿真源文件

二、AD原理图文件

二、报告说明书

三、系统流程图

四、Keil c语言程序源代码


项目功能:

1、选 DS1307型号时钟芯片作为记录时钟/日历,可以读取DS1307芯片上当前的时间。
2、显示时间采用8位数码管。P0为 LED 数码管的段码输入端,P2为位码输入端。
3、设置时间并使用键盘输入时间。四个键的设计和定文如下:
(1) SET键(时间调整设置键):其功能是当该键按下时,进入时间调整功能。
(2) ALM键(定时时间设置键):其功能是当该键按下时,进入定时时间输入功能。
(3)+1键:其功能是当该键按下时,被调整位加一。
(4) RET键:其功能是当该键按下时,指向下一个要调整的位。
4、按键的接入方式:
(1)SET键:通过P3口INT0引角接入,中断工作方式。
(2) ALM键:通过P3口INT1引角接入,中断工作方式。
(3)+1键:通过P3口P3,0引角接入,查询工作方式。
(4)RET键:通过P3口 P3.1引角接入,查询工作方式。
5、蜂响器为声音信号,接在P1.6脚。
6、小功率电磁继电器打开和关闭外部JZC-23F电源来执行此功能,继电器触点通过端口P1.7打开和关闭。
 


项目文件:

一、Proteus仿真源文件

​​

二、AD原理图文件

二、报告说明书

三、系统流程图

​​

四、器件清单

元件型号数量
单片机AT89C511
电容10uf1
电容30pf2
晶振12MHZ1
电阻10k1
按钮5
LED红色1
电阻100欧1
电阻1k2
三极管PNP2
蜂鸣器有源1
数码管8位共阴1
排阻10k1
实时时钟DS13071
继电器5V1
晶振32.768KHz1

五、Keil c语言程序源代码(部分)

#include "reg51.h"
#include"DS1307.h"
#define uchar unsigned char
#define uint unsigned int
sbit beep=P1^6;//蜂鸣器
sbit relay=P1^7;//电磁阀
sbit k3=P3^0;//按钮
sbit k4=P3^1;
sbit test=P1^0;
//数码管编码
uchar code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar sec=0,mode=0;//系统变量
uchar shi=0,fen=0,miao=0;//定时
uchar start=0;//启停
uchar beep_time=0;
uchar flag=0;

//显示
void disp1()
{
	if(mode==0)//正常走时
	{	
		P0=0;
		P2=0xfe;
		P0=smgduan[TIME[2]>>4];
		delay(100);
		P0=0;
		P2=0xfd;
		P0=smgduan[TIME[2] & 0x0f];
		delay(100);
		P0=0;
		P2=0xfb;
		P0=0x40;
		delay(100);
		P0=0;
		P2=0xf7;
		P0=smgduan[TIME[1]>>4];
		delay(100);
		P0=0;
		P2=0xef;
		P0=smgduan[TIME[1] & 0x0f];
		delay(100);
		P0=0;
		P2=0xdf;
		P0=0x40;
		delay(100);
		P0=0;
		P2=0xbf;
		P0=smgduan[TIME[0]>>4];
		delay(100);
		P0=0;
		P2=0x7f;
		P0=smgduan[TIME[0] & 0x0f];
		delay(100);
	}
	else if(mode<4)//设置闪烁
	{
		P0=0;
		P2=0xfe;
		if((mode!=1)||(flag==0))
			P0=smgduan[TIME[2]>>4];
		delay(100);
		P0=0;
		P2=0xfd;
		if((mode!=1)||(flag==0))
			P0=smgduan[TIME[2] & 0x0f];
		delay(100);

		P0=0;
		P2=0xfb;
		P0=0x40;
		delay(100);

		P0=0;
		P2=0xf7;
		if((mode!=2)||(flag==0))
			P0=smgduan[TIME[1]>>4];
		delay(100);
		P0=0;
		P2=0xef;
		if((mode!=2)||(flag==0))
			P0=smgduan[TIME[1] & 0x0f];
		delay(100);

		P0=0;
		P2=0xdf;
		P0=0x40;
		delay(100);
		P0=0;
		P2=0xbf;
		if((mode!=3)||(flag==0))
			P0=smgduan[TIME[0]>>4];
		delay(100);
		P0=0;
		P2=0x7f;
		if((mode!=3)||(flag==0))
			P0=smgduan[TIME[0] & 0x0f];
		delay(100);
	}
	else //设置闪烁
	{
		P0=0;
		P2=0xfe;
		if((mode!=4)||(flag==0))
			P0=smgduan[shi/10];
		delay(100);
		P0=0;
		P2=0xfd;
		if((mode!=4)||(flag==0))
			P0=smgduan[shi%10];
		delay(100);

		P0=0;
		P2=0xf7;
		if((mode!=5)||(flag==0))
			P0=smgduan[fen/10];
		delay(100);
		P0=0;
		P2=0xef;
		if((mode!=5)||(flag==0))
			P0=smgduan[fen%10];
		delay(100);

		P0=0;
		P2=0xbf;
		if((mode!=6)||(flag==0))
			P0=smgduan[miao/10];
		delay(100);
		P0=0;
		P2=0x7f;
		if((mode!=6)||(flag==0))
			P0=smgduan[miao%10];
		delay(100);
	}	
		
}
void main()//主函数
{
	uchar k=0,j=0;
	//设置INT0
	IT0=1;//跳变沿出发方式(下降沿)
	EX0=1;//打开INT0的中断允许。	
	//设置INT1
	IT1=1;//跳变沿出发方式(下降沿)
	EX1=1;//打开INT1的中断允许。	
	TMOD|=0X01;
	TH0=0X3C;
	TL0=0XB0;	
	ET0=1;//打开定时器0中断允许
	EA=1;//打开总中断
	TR0=1;//打开定时器
	while(1)
	{
		//显示
		disp1();
		//设置
		if(!k4 &&(k!=4))
		{
			k=4;
			if(mode>0)
			{
				if(mode<4)//时间
				{
					if(mode<3)
						mode++;
					else
					{
						mode=0;
						start=0;//停止
					}
				}
				else	 //定时
				{
					if(mode<6)
						mode++;
					else
					{
						mode=0;
						start=1;//启动
					}
				}
			}
		} 
		if(k3 && k4)
			k=0;
		//设置时间
		if(mode==1)
		{
			if(!k3 &&(k!=3))//小时
			{
				k=3;
				j=(TIME[2]>>4)*10+(TIME[2] & 0x0f);
				if(j<23)
					j++;
				else
					j=0;
				TIME[2]=(j/10<<4)+j%10;
				init1307();
			}
		}
		if(mode==2)
		{
			if(!k3 &&(k!=3))//分钟
			{
				k=3;
				j=(TIME[1]>>4)*10+(TIME[1] & 0x0f);
				if(j<59)
					j++;
				else
					j=0;
				TIME[1]=(j/10<<4)+j%10;
				init1307();
			}
		}
		if(mode==3)
		{
			if(!k3 &&(k!=3))//秒
			{
				k=3;
				j=(TIME[0]>>4)*10+(TIME[0] & 0x0f);
				if(j<59)
					j++;
				else
					j=0;
			}
		}
		//设置定时
		if(mode==4)
		{
			if(!k3 &&(k!=3))//小时
			{
				k=3;
				if(shi<23)
					shi++;
				else
					shi=0;
			}
		}
		if(mode==5)
		{
			if(!k3 &&(k!=3))//分钟
			{
				k=3;
				if(fen<59)
					fen++;
				else
					fen=0;
			}
		}
		if(mode==6)
		{
			if(!k3 &&(k!=3))//秒
			{
				k=3;
				if(miao<59)
					miao++;
				else
					miao=0;
			}
		}
	}
}
//定时器中断
void Timer0() interrupt 1
{
	uchar a1=0,a2=0,a3=0;
	if(sec<10)//0.5s
		sec++;
	else
	{
		sec=0;
		if(mode==0)
			read_time();//读取时间
		//电磁阀控制
		if(start)
		{
			relay=0;
			a1=(TIME[2]>>4)*10+(TIME[2] & 0x0f);//编码转换BCD-二进制
			if((shi==a1)&&(fen==a2)&&(miao==a3))	//时间判断
			{
				start=0;
				beep_time=40;
			}
		}
		else
		{
			relay=1;
		}
		
		flag=!flag;
	}
	//蜂鸣器

	TH0=0X3C;
	TL0=0XB0;
}
void Int0()	interrupt 0		//外部中断0的中断函数
{
	if(mode==0)
		mode=1;
}
void Int1()	interrupt 2		//外部中断1的中断函数
{
	if(mode<4)
		mode=4;
}

六、全套资料包含

​​

七:项目资源获取

需要完整的资料可以点击下面的名片关注,回复“资料”!

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值