8563时钟显示和红外遥控修改时钟完整资料.docx

上传人:b****8 文档编号:9948003 上传时间:2023-02-07 格式:DOCX 页数:31 大小:125.55KB
下载 相关 举报
8563时钟显示和红外遥控修改时钟完整资料.docx_第1页
第1页 / 共31页
8563时钟显示和红外遥控修改时钟完整资料.docx_第2页
第2页 / 共31页
8563时钟显示和红外遥控修改时钟完整资料.docx_第3页
第3页 / 共31页
8563时钟显示和红外遥控修改时钟完整资料.docx_第4页
第4页 / 共31页
8563时钟显示和红外遥控修改时钟完整资料.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

8563时钟显示和红外遥控修改时钟完整资料.docx

《8563时钟显示和红外遥控修改时钟完整资料.docx》由会员分享,可在线阅读,更多相关《8563时钟显示和红外遥控修改时钟完整资料.docx(31页珍藏版)》请在冰豆网上搜索。

8563时钟显示和红外遥控修改时钟完整资料.docx

8563时钟显示和红外遥控修改时钟完整资料

遥控器

整个遥控器共有21个按键,本产品用到的按键是数字0-9,功能键F1、F2、F3、F4、ENTER(确定用)、CANCEL(取消)。

 

/*===========================================================

此程序包含如下功能:

1、时钟功能

2、显示时和分

3、秒用发光二极管显示,闪烁周期为1s

============================================================*/

#include

#include"intrins.h"

#include"define.h"

#include"function.h"

#include"variable.h"

#include//Keillibrary

#include//Keillibrary

#include

bitb_work_pause=false;//工作暂停指示:

=1暂停中,=0工作中

bitb_work_rest=false;

bitb_add_number;

bitbest_pingbi=0;

unsignedlongsecond_rest_total=0;//休息的总秒数

unsignedlongsecond_pause_total=0;//暂停的总秒数

unsignedlongsecond_start_pause=0;//暂停开始的时间

externucharswitch_disply[4];

externucharir_xiugai[8];

externbittimestep_flag;

staticinttime_counter_his=0,comp_date_two=0;

intzhongjian_two=0;

externvoidSectorErase(unsignedintaddr);

externbitb_tick_flag,b_second_event,b_minute_event,b_tick_flash;

externbitb_spi;

externbitb_key_input,b_key_timer,b_dig_test;

externucharxdatakey_wait_second;

externucharxdatarec_data;

externucharnum_byte;

idatauchardisplayarray[32];

externucharidataMENULEVEL;

externbitb_clock_flash;//时钟秒的闪烁周期

uchartime_clock_counter=0;

idataucharmonitor_counter=0x00;

idataucharwork_days_count;

idataucharnow_days;

uchartimesecond_changedis=0;

/*==============================*/

voidCpu_Init(void);

voidCpu_re_set(void);

voidread_ID(void);

voidSendCharCom(unsignedchar);

voidret_error(unsignedchar);

voidanswer_ID(void);

voiddisplay(void);

externvoidmy_Read_ds3231_temp(void);

ucharxdatachk_sum,chk_sum_IPB;//数据包的校验码

bitb_ready_ID=0;

bitb_ready_PC=0;

externbitb_dig_test;

externbitb_data_menu;

externbitb_modify_time;//修改时间

externbitb_time_table;//修改时间表

externbitb_input_plan;//开始使用,将输入目标值

externbitb_start_calcute;//开始计算显示数据

xdatastructSHFSD_SECOND{

ucharplan[4];//我们已经安全工作天数

ucharnow[4];//中国安全工作天数

uchardachenlv[4];//保持最后记录天数

ucharsg_time[8];//最近一次事故发生时间

ucharsysterm_time[14];//系统时间

}SHFSDKB;

uchartick_count=0x00;

ucharxdataps_temp[50],ps_count=0;

ucharidatatimes=0;

ucharidatakeycode=0,keycode0=0,keycode1=0;//ps2_key用于存放接收到的键码

bitBF=0;//标识是否有字符被收到

voidSendCharCom(unsignedcharch)

{

ES=0;

EN485=1;

SBUF=ch;

while(0==TI);

WDT_CONTR=0x3C;

TI=0;

EN485=0;

Delayms

(1);

ES=1;

}

voidSendStringCom(unsignedchar*str,unsignedintstrlen)

{

xdataunsignedintk=0;

do

{

SendCharCom(*(str+k));

k++;

}while(k

}

voidSerial_Init(void)

{

//////串口初始化

SCON=0x50;///SCON:

serailmode1,8-bitUART,enableucvr

//TMOD|=0x21;//TMOD:

timer1,mode2,8-bitreload,timer0is16bitcounter

PCON=0x00;//SMOD=0;//如果SMOD=0即PCON=0x80,则此时Baud:

4800fosc=11.0592MHz

TH1=0xfd;//Baud:

2400fosc=11.0592MHz

//EA=1;下一句已经包含IE|=0x90,EA为IE中一位

//IE|=0x90;//EnableSerialInterrupt

TR1=1;//timer1run//TR1是TCON中的一位

ES=1;

ET1=0;

PS=1;

IT0=1;//边沿触发

EX0=1;//开INT0中断

PX0=1;

#if0

SCON=0x50;///SCON:

serailmode1,8-bitUART,enableucvr

TMOD|=0x21;//TMOD:

timer1,mode2,8-bitreload

PCON|=0x00;//SMOD=0;//如果SMOD=0即PCON=0x80,则此时Baud:

4800fosc=11.0592MHz

TH1=0xfd;//Baud:

2400fosc=11.0592MHz

//EA=1;下一句已经包含IE|=0x90,EA为IE中一位

IE|=0x90;//EnableSerialInterrupt

TR1=1;//timer1run//TR1是TCON中的一位

//TI=1;

#endif

}

voidstatus_init(void)

{

uchari;

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

SHFSDKB.plan[i]=0;//savetosector1;

SHFSDKB.now[i]=0;//savetosector2;

SHFSDKB.dachenlv[i]=0;

}

for(i=0;i<12;i++){SHFSDKB.systerm_time[i]=0;}

}

voidmain(void)

{

//Cpu_Init();//输出端口的初始化及相关变量的初始y化

Time_Init();

Ds3231_init();

IR_init();

//EEPROMinit();

Serial_Init();

EA=1;

//SendCharCom(0x55);//启动标志

status_init();

Delayms(100);

Delayms(100);

while

(1)

{

#if1

WDT_CONTR=0x3C;

TimerService();

EN485=0;

key_scan();

WDT_CONTR=0x3C;

//SwitchInput();

if((b_tick_flash==true)&&(MENULEVEL!

=0x00))//如果有红外按键输入激活菜单

{

WDT_CONTR=0x3C;

b_tick_flash=false;

Display_flash();

}

if(b_second_event==true)

{

b_second_event=false;

LED=~LED;

WDT_CONTR=0x3C;

if(MENULEVEL==0x00)

{

WDT_CONTR=0x3C;

display();

}

}

if(b_minute_event==true)

{

b_minute_event=false;

WDT_CONTR=0x3C;

}

if(b_clock_flash==true)

{

b_clock_flash=0;//20ms的周期

time_clock_counter++;

if(time_clock_counter>=25)//秒的指示灯,闪烁周期1s

{

time_clock_counter=0;

LEDSECOND=~LEDSECOND;

}

}

#endif

}

}

/*======================================*/

/*====主要是对一些输出端口的初始化=====*/

/*======================================*/

voidCpu_Init(void)

{

/*先对输出端口的初始化*/

P3M0=0x85;//(10000101)

P3M1=0x3a;//(00111010)

P2M0=0x00;//准双向口

P2M1=0x01;//准双向口P2^0==test

P1M0=0x00;//全部作为输入口

P1M1=0x00;

/*初始化端口*/

P3=0xff;

P2=0xff;

P1=0xff;

P0=0xff;

/*对系统变量的初始化,清楚中断标志*/

/*对串口发送中断清0*/

/*初始化看门狗*/

WDT_CONTR=0x3C;

/*其它的*/

PCON=0x00;

}

/*====================================================*/

/*===以下函数为对CPU端口的重新设置,以防干扰损坏===*/

voidCpu_re_set(void)

{

TMOD=0x21;//定时器0模式1,定时器1模式2

TH1=BPS9600;//TH1的值永远是1200BPS的值

/*以下为对SCON寄存器的重新设置*/

//SM0=0;

//SM1=1;

REN=0;

ES=0;

EA=1;

}

voidread_time3232d()

{

uchar*p,temp[7];

uchari;

p=Read_ds3231();//读出当前时钟数

WDT_CONTR=0x3C;

for(i=0;i<7;i++)temp[i]=*p++;

SHFSDKB.systerm_time[13]=temp[0]&0x0f;

SHFSDKB.systerm_time[12]=(temp[0]&0xf0)>>4;//秒钟,此工程没有秒不显示。

SHFSDKB.systerm_time[11]=temp[1]&0x0f;

SHFSDKB.systerm_time[10]=(temp[1]&0xf0)>>4;//分

SHFSDKB.systerm_time[9]=temp[2]&0x0f;

SHFSDKB.systerm_time[8]=(temp[2]&0x30)>>4;//时

SHFSDKB.systerm_time[7]=temp[4]&0x0f;

SHFSDKB.systerm_time[6]=(temp[4]&0x30)>>4;//日期

SHFSDKB.systerm_time[5]=temp[5]&0x0f;

SHFSDKB.systerm_time[4]=(temp[5]&0x10)>>4;//月份

WDT_CONTR=0x3C;

SHFSDKB.systerm_time[3]=temp[6]&0x0f;

SHFSDKB.systerm_time[2]=(temp[6]&0xf0)>>4;//年低二位

SHFSDKB.systerm_time[1]=0x00;

SHFSDKB.systerm_time[0]=0x02;//年高二位

}

voidreadSHFSD(void)//从EEPROM中读出保存的数据

{

xdatauchari;

uchartime_counter=0;

WDT_CONTR=0x3C;

read_time3232d();//读出当前时钟数

time_counter=SHFSDKB.systerm_time[12]*10+SHFSDKB.systerm_time[13];

/*if(time_counter!

=timesecond_changedis)

{

timesecond_changedis=time_counter;

LEDSECOND=~LEDSECOND;//秒的指示灯,闪烁周期2s

}*/

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

{

displayarray[i]=SHFSDKB.systerm_time[i+8];

}

}

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

/*DEMO3231.C*/

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

#include"stc12c5620ad.h"

#include"intrins.h"

#include"define.h"

#include"function.h"

#include"variable.h"

//uchartime_displaytemp[12];

externucharxdatadisplaytemp[32];

/****************************defines*******************************/

#defineADDRTC0xd0/*DS3231slaveaddress(write)*/

#defineACK0

#defineNACK1

/***********************FunctionPrototypes**************************/

voidstart();

voidstop();

uchari2cwrite(uchard);

uchari2cread(char);

/****************************functions******************************/

voidstart()/*---------Initiatestartcondition----------*/

{

SDA_3231=1;

SCL_3231=1;

SDA_3231=0;

}

voidstop()/*----------Initiatestopcondition-----------*/

{

SDA_3231=0;SDA_3231=0;

SCL_3231=1;SCL_3231=1;SDA_3231=1;

}

uchari2cwrite(uchard)/*-----------------------------*/

{

uchari;

SCL_3231=0;

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

{

if(d&0x80)

SDA_3231=1;/*Sendthemsbitsfirst*/

else

SDA_3231=0;

SCL_3231=0;

SCL_3231=1;

d=d<<1;/*doshiftheretoincreasesclhightime*/

SCL_3231=0;

}

SDA_3231=1;/*Releasethesdaline*/

SCL_3231=0;

SCL_3231=1;

i=SDA_3231;

//if(i)printf("Ackbitmissing%02X\n",(unsignedint)d);

SCL_3231=0;

return(i);

}

uchari2cread(charb)/*-----------------------------------*/

{

uchari,d;

d=0;

SDA_3231=1;/*Letgoofsdaline*/

SCL_3231=0;

for(i=0;i<8;i++)/*readthemsbfirst*/

{

SCL_3231=1;

d=d<<1;

d=d|(unsignedchar)SDA_3231;

SCL_3231=0;

}

SDA_3231=b;/*lowforack,highfornack*/

SCL_3231=1;

SCL_3231=0;

SDA_3231=1;/*Releasethesdaline*/

returnd;

}

/*--converttheupperandlowernibblesto2asciicharacters--*/

/*

voidhex2asc(ucharhex)

{

if(((hex&0xf0)>>4)<0x0a)

wr_dsp_dat(((hex&0xf0)>>4)+48);//prints0-9//

else

wr_dsp_dat(((hex&0xf0)>>4)+55);//printsA-F//

while((rd_dsp_ins()&0x80));

if((hex&0x0f)<0x0a)

wr_dsp_dat((hex&0x0f)+48);

else

wr_dsp_dat((hex&0x0f)+55);

while((rd_dsp_ins()&0x80));

}

//-------writesomebyte------------------------------//

voidwritebyte()

{

ucharAdd,Data;

printf("\nADDRESS(hex):

");//GetAddress&Data//

scanf("%bx",&Add);

printf("DATA(hex):

");

scanf("%bx",&Data);

start();

i2cwrite(ADDRTC);

i2cwrite(Add);

i2cwrite(Data);

stop();

}*/

voidModify_DS3231(void)/*-----settime&date;userdataentry------*/

/*Note:

NOerrorcheckingisdoneontheuserentries!

*/

{xdatauchardate[7],i;

WDT_CONTR=0x3C;

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

date[i]=displaytemp[i];

//starttomodifythedate;

start();

i2cwrite(ADDRTC);/*writeslaveaddress,write1339*/

i2cwrite(0x00);/*writeregisteraddress,1stclockregister*/

i2cwrite(date[SEC]);

i2cwrite(date[MIN]);

i2cwrite(date[HOUR]);

i2cwrite(date[DAY]);//一定要加上这条语句,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1