创新设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

创新设计

专业班级:08电子(1)班姓名:吴剑学号:201810330126

设计简介:

本设计是一个通过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

#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 bit bit_flag;

void delay_icc(int n)

{int i;

for(i=1;i

}

void delay()

{;;}

void delay1ms(uint z)

{uint i,j;

for(i=0;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;

delay();

}

SCL=0;

delay();

SDA=1;

delay();

}

uchar read_byte()

{uchar i,k;

SCL=0;

delay();

SDA=1;

delay();

for(i=0;i<8;i++)

{SCL=1;

delay();

k=(k<<1)|SDA;

SCL=0;

}

return k;

}

void write_add(uchar address,uchar date) {start();

write_byte(0xa0);

respons();

write_byte(address);

respons();

write_byte(date);

respons();

stop();

}

uchar read_add(uchar address)

{uchar date;

start();

write_byte(0xa0);//芯片寻址(10100000)写respons();

write_byte(address);

respons();

start();

write_byte(0xa1);//芯片寻址(1010001)读respons();

date=read_byte();

stop();

return date;

}

void initial()

{uchar rd_value;

rd_value=read_add(100);delay_icc(250);

if(rd_value==88)

{set1_dat[0]=read_add(80);delay_icc(250); set1_dat[1]=read_add(81);delay_icc(250); set2_dat[0]=read_add(90);delay_icc(250); set2_dat[1]=read_add(91);delay_icc(250); }

TMOD=0x11;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

TH1=(65536-1000)/256;

TL1=(65536-1000)%256;

TR0=1;

相关文档
最新文档