智能家居控制系统的设计 - 图文(5)

2020-04-14 01:33

陕西理工学院毕业设计

45 46 47 44 40 43 07 15 09 16 19 0d 0c 18 5e 08 1c 5a 42 52 4a

*******************************************/

/***********100us的延时函数***12M晶振**************/ void delay_100us(uchar z) { //12M uchar x,y;

for(x=0;x

/*************写一个数据到对应的地址里***************/ void write_ds1302(uchar add,uchar dat) {

rst = 1; //把复位线拿高 for(i=0;i<8;i++)

{ //低位在前

clk = 0; //时钟线拿低开始写数据 io = add & 0x01;

add >>= 1; //把地址右移一位 clk = 1; //时钟线拿高 }

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

clk = 0; //时钟线拿低开始写数据 io = dat & 0x01;

dat >>= 1; //把数据右移一位 clk = 1; //时钟线拿高 }

rst = 0; //复位线合低 clk = 0;io = 0; }

/*************从对应的地址读一个数据出来***************/ uchar read_ds1302(uchar add) {

uchar value,i;rst = 1; //把复位线拿高 for(i=0;i<8;i++)

{ //低位在前

clk = 0; //时钟线拿低开始写数据

io = add & 0x01; add >>= 1; //把地址右移一位 clk = 1; //时钟线拿高

第 40 页 共 66页

陕西理工学院毕业设计

}

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

clk = 0; //时钟线拿低开始读数据 value >>= 1; if(io == 1)

value |= 0x80;

clk = 1; //时钟线拿高 }

rst = 0; //复位线合低 clk = 0; io = 0;

return value; //返回读出来的数据 }

/*************把要的时间 年月日 都读出来***************/ void read_time() {

miao = read_ds1302(read_add[0]); //读秒 fen = read_ds1302(read_add[1]); //读分 shi = read_ds1302(read_add[2]); //读时 ri = read_ds1302(read_add[3]); //读日 yue = read_ds1302(read_add[4]); //读月 nian = read_ds1302(read_add[5]); //读年 week = read_ds1302(read_add[6]); //读星期 }

/*************把要写的时间 年月日 都写入ds1302里***************/ void write_time() {

write_ds1302(0x8e,0x00); //打开写保护 write_ds1302(write_add[0],miao); //写秒 write_ds1302(write_add[1],fen); //写分 write_ds1302(write_add[2],shi); //写时 write_ds1302(write_add[3],ri); //写日 write_ds1302(write_add[4],yue); //写月 write_ds1302(write_add[5],nian); //写星期 write_ds1302(write_add[6],week); //写年

write_ds1302(0x8e,0x80); //关闭写保护 }

/*************把数据保存到ds1302 RAM中**0-31*************/ void write_ds1302ram(uchar add,uchar dat) {

add <<= 1; //地址是从第二位开始的 add &= 0xfe; //把最低位清零 是写的命令 add |= 0xc0; //地址最高两位为 1 write_ds1302(0x8e,0x00); write_ds1302(add,dat);

第 41 页 共 66页

陕西理工学院毕业设计

write_ds1302(0x8e,0x80); }

/*************把数据从ds1302 RAM读出来**0-31*************/ uchar read_ds1302ram(uchar add) {

add <<= 1; //地址是从第二位开始的 add |= 0x01; //把最高位置1 是读命令 add |= 0xc0; //地址最高两位为 1 return(read_ds1302(add)); }

/*************初始化ds1302时间***************/ void init_ds1302() {

uchar i;

rst = 0; //第一次读写数据时要把IO品拿低 clk = 0; io = 0;

i = read_ds1302ram(30); if(i != 3) {

i = 3;

write_ds1302ram(30,i); //4050 4100 3080

write_ds1302(0x8e,0x00); //打开写保护 for(i=0;i<7;i++)

write_ds1302(write_add[i],init_ds[i]); //把最高位值0 允许ds1302工作 write_ds1302(0x8e,0x80); //关写保护 }

read_time(); //读时间 if(miao >= 0x60) {

write_ds1302(0x8e,0x00); //打开写保护

write_ds1302(write_add[0],init_ds[0]); //把最高位值0 允许ds1302工作 write_ds1302(0x8e,0x80); //关写保护 } }

/**********************设置ds1302时间函数**********************/ void set_ds1302time(uchar num,uchar *shi,uchar dat) //调时 {

if(num == 1) {

*shi+=0x01;

if((*shi & 0x0f) >= 0x0a)

*shi = (*shi & 0xf0) + 0x10;

第 42 页 共 66页

陕西理工学院毕业设计

if(*shi >= dat) *shi = 0; } else {

if(*shi == 0x00) *shi = dat;

if((*shi & 0x0f) == 0x00)

*shi = (*shi | 0x0a) - 0x10; *shi -=0x01 ; } }

/******************把数据保存到DS1302RAM中******************/ void write_eeprom() {

write_ds1302ram(1, flag_zd_sd); write_ds1302ram(2, k_shi); write_ds1302ram(3, k_fen); write_ds1302ram(4, g_shi); write_ds1302ram(5, g_fen); write_ds1302ram(6, t_high);

write_ds1302ram(7, guanxian_set); write_ds1302ram(8, bjdj_value);

write_ds1302ram(10, a_a); }

/******************把数据从DS1302RAM中读出来*****************/ void read_eeprom() {

flag_zd_sd = read_ds1302ram(1); k_shi = read_ds1302ram(2); k_fen = read_ds1302ram(3); g_shi = read_ds1302ram(4); g_fen = read_ds1302ram(5); t_high = read_ds1302ram(6); guanxian_set = read_ds1302ram(7); bjdj_value = read_ds1302ram(8);

a_a = read_ds1302ram(10); }

/**************开机自检DS1302RAM初始化*****************/ void init_eeprom() {

read_eeprom(); //先读

if(a_a != 3) //新的单片机初始单片机内问eeprom {

第 43 页 共 66页

陕西理工学院毕业设计

flag_zd_sd = 0; k_shi = 0x8; k_fen = 0x10; g_shi = 0x15; g_fen = 0x30; t_high = 50; guanxian_set = 40; bjdj_value = 0; a_a = 3;

write_eeprom(); //保存数据 } }

/******************1ms 延时函数*******************/ void delay_1ms(uint q) {

uint i,j;

for(i=0;i

for(j=0;j<120;j++); }

/***********************延时函数************************/ void delay_uint(uint q) {

while(q--); }

/***********************lcd1602写命令函数************************/ void write_com(uchar com) {

e=0; rs=0; rw=0; P0=com;

delay_uint(3); e=1;

delay_uint(25); e=0; }

/***********************lcd1602写数据函数************************/ void write_data(uchar dat) {

e=0; rs=1; rw=0; P0=dat;

delay_uint(3);

第 44 页 共 66页


智能家居控制系统的设计 - 图文(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:高压线路带电检修(计算题)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: