8563时钟显示和红外遥控修改时钟完整资料.docx
- 文档编号:9948003
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:31
- 大小:125.55KB
8563时钟显示和红外遥控修改时钟完整资料.docx
《8563时钟显示和红外遥控修改时钟完整资料.docx》由会员分享,可在线阅读,更多相关《8563时钟显示和红外遥控修改时钟完整资料.docx(31页珍藏版)》请在冰豆网上搜索。
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
#include
#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]);//一定要加上这条语句,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 8563 时钟 显示 红外 遥控 修改 完整 资料