当前位置:文档之家› 创新设计

创新设计

创新设计(学校路灯控制系统)
专业班级:08电子(1)班姓名:吴剑
学号:200810330126
设计简介:
本设计是一个通过51单片机来控制路灯亮/灭。

例如:晚上19:30路灯亮,到早上6:00熄灭,当时钟走到19:30时路灯点亮,同理在6:00时熄灭,实现自动控制。

为了防止偶尔断电或停机后再开机致使设定值丢失,这里使用了AT24C02来记忆设定的定时值。

P1口作为控制输出口控制继电器从而达到控制路灯的作用。

亮、灭时间可随时调整,提高了控制的灵活性和准确性。

为了进行校时及定时值设定,规定了六种工作状态。

状态0(status=0):正常走时;状态1(status=1):输入定时1的“分”状态;状态2(status=2):输入定时1的“时”状态;状态3(status=3):输入定时2的“分”状态;状态4(status=4):输入定时2的“时”状态;状态5(status=5):校正走时态。

状态0:从左往右六只数码管依次显示走时的时、分、秒。

状态1:从左往右的显示依次为:状态1显示(1位);无显示;定时1的“分”显示。

后两位无显示。

按下S6/S5进行加减。

状态2:从左往右的显示依次为:状态2显示(1位);无显
示;定时1的“时”显示。

后两位无显示。

按下S6/S5进行加减状态3:从左往右的显示依次为:状态3显示(1位);无显示;定时2的“分”显示。

后两位无显示。

按下S6/S5进行加减。

状态4:从左往右的显示依次为:状态4显示(1位);无显示;定时2的“时”显示。

后两位无显示。

按下S6/S5进行加减。

状态5:从左往右的显示依次为:状态5显示(1位);无显示;时钟的“分”显示。

后两位无显示。

按下S6/S5进行加减。

对AT24C02内部储存单元规划:80、81单元存放定时1的分、时值;90、91单元存放定时2的分、时值;100号单元存放首次写入的标志,若写入过,则100号单元置数100.
框图如下:
电路图如下:
源程序如下:
#include <REG51.H>
#define uchar unsigned char
#define uint unsigned int
uchar code SEG7[10]={0xa0,0xbe,0x62,0x2a,0x3c,0x29,0x21,0xba,0x20, 0x28}; /*共阳*/
uchar code ACT[4]={0xbf,0xdf,0xef,0x7f,0xfd,0xfe};
sbit output=P1^0;
#define INC_KEY 0xfb //S6按下
#define DEC_KEY 0xf7 //S5按下
#define OK_KEY 0xef //S4按下#define STATUS_KEY 0xdf //S3按下uchar status;
uchar deda,sec,min,hour;
uchar set1_dat[2],set2_dat[2];
bit set1_flag,set2_flag;
sbit SDA=P2^0;
sbit SCL=P2^1;
static uchar time_cnt;
static b it bit_flag;
void delay_icc(int n)
{int i;
for(i=1;i<n;i++);
}
void delay()
{;;}
void delay1ms(uint z)
{uint i,j;
for(i=0;i<z;i++)
for(j=0;j<110;j++);
}
void start()//开始函数{SDA=1;
delay();
SCL=1;
delay();
SDA=0;
delay();
}
void stop()//停止函数{SDA=0;
delay();
SCL=1;
delay();
SDA=1;
delay();
}
void respons()//应答函数
{uchar i;
SCL=1;
delay();
while((SDA==1)&&(i<250))i++;
SCL=0;
delay();
}
void write_byte(uchar date)//写一字节{uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{temp=temp<<1;
SCL=0;
delay();
SDA=CY;
delay();
SCL=1;。

相关主题