基于51单片机的四路定时控制器设计报告(编辑修改稿)内容摘要:

R = 0。 //Close IAP function IAP_ADDRH = 0x80。 //Data ptr point to nonEEPROM area IAP_ADDRL = 0。 //Clear IAP address to prevent misuse } /* Read one byte from ISP/IAP/EEPROM area Input:addr (ISP/IAP/EEPROM address) Output: Flash data */ BYTE IapReadByte(WORD addr) { BYTE dat。 //Data buffer IAP_CONTR = ENABLE_IAP。 //Open IAP function,and set wait time IAP_CMD = CMD_READ。 //Set ISP/IAP/EEPROM READ mand IAP_ADDRL = addr。 //Set ISP/IAP/EEPROM address low IAP_ADDRH = addr8。 //Set ISP/IAP/EEPROM address high IAP_TRIG = 0x5a。 //Send trigger mand1 (0x5a) IAP_TRIG = 0xa5。 //Send trigger mand2 (0xa5) _nop_()。 //MCU will hold here until ISP/IAP/EEPROM //operation plete dat = IAP_DATA。 //Read ISP/IAP/EEPROM data IapIdle()。 //close ISP/IAP/EEPROM function return dat。 //Return Flash data } /* Programe one byte to ISP/IAP/EEPROM area Input: addr(ISP/IAP/EEPROM address) dat(ISP/IAP/EEPROM data) 12 Output: */ void IapProgramByte(WORD addr, BYTE dat) { IAP_CONTR = ENABLE_IAP。 //Open IAP function,and set wait time IAP_CMD = CMD_PROGRAM。 //Set ISP/IAP/EEPROM PROGRAM mand IAP_ADDRL = addr。 //Set ISP/IAP/EEPROM address low IAP_ADDRH = addr8。 //Set ISP/IAP/EEPROM address high IAP_DATA = dat。 //Write ISP/IAP/EEPROM data IAP_TRIG = 0x5a。 //Send trigger mand1 (0x5a) IAP_TRIG = 0xa5。 //Send trigger mand2 (0xa5) _nop_()。 //MCU will hold here until ISP/IAP/EEPROM //operation plete IapIdle()。 } /* Erase one sector area Input: addr (ISP/IAP/EEPROM address) Output: */ void IapEraseSector(WORD addr) { IAP_CONTR = ENABLE_IAP。 //Open IAP function,and set wait time IAP_CMD = CMD_ERASE。 //Set ISP/IAP/EEPROM ERASE mand IAP_ADDRL = addr。 //Set ISP/IAP/EEPROM address low IAP_ADDRH = addr8。 //Set ISP/IAP/EEPROM address high IAP_TRIG = 0x5a。 //Send trigger mand1 (0x5a) IAP_TRIG = 0xa5。 //Send trigger mand2 (0xa5) _nop_()。 //MCU will hold here until ISP/IAP/EEPROM 13 //operation plete IapIdle()。 } /************数码管显示函数 ******************/ void displays(uchar X2,X1) { W1=0。 P1=duanxuan[num0(X1)]。 delay_ms(5)。 W1=1。 P1=0x00。 //消影 W2=0。 P1=duanxuan[num1(X1)]。 delay_ms(5)。 W2=1。 P1=0x00。 W3=0。 P1=duanxuan[num2(X2)]|0x80。 delay_ms(5)。 W3=1。 P1=0x00。 W4=0。 P1=duanxuan[num3(X2)]。 delay_ms(5)。 W4=1。 P1=0x00。 } /**************定时器初始化 *****************/ void T_initialize() // { EA=1。 //开放 ALL 中断允许 Enable ET0=1。 //开放 T0 中断允许 Enable*/ TMOD=0x11。 //定时器 0、 1,工作方式 1,仅受 TCON 中 TR 控制 */ TH0=(65536N)/256。 TL0=(65536N)%256。 ET1=1。 //开放 T1 中断允许 Enable*/ TH1=(65536N)/256。 TL1=(65536N)%256。 TR0=1。 //定时器计时开始 } /****************************************************/ /************时钟实时时间、定时段设置(显示放后边) ****************/ void clk_weixuan()// { switch(k5){ case 1:{switch(k2){case 0:。 break。 case 1:{if(key==1){A0_shi++。 if(A0_shi==24)A0_shi=0。 /*shi=0~23*/} if(key==4){if(A0_shi==0)A0_shi=24。 A0_shi。 /*shi=23~0*/}}break。 case 2:{if(key==1){A0_fen++。 if(A0_fen==60)A0_fen=0。 /*fen=0~59*/} 14 if(key==4){if(A0_fen==0)A0_fen=60。 A0_fen。 /*fen=0~59*/}}break。 case 3:{if(key==1){A1_shi++。 if(A1_shi==24)A1_shi=0。 /*shi=0~23*/} if(key==4){if(A1_shi==0)A1_shi=24。 A1_shi。 /*shi=23~0*/}}break。 case 4:{if(key==1){A1_fen++。 if(A1_fen==60)A1_fen=0。 /*fen=0~59*/} if(key==4){if(A1_fen==0)A1_fen=60。 A1_fen。 /*fen=0~59*/}}break。 case 5:{IapEraseSector(0x0000)。 IapProgramByte(0x0000,A0_shi)。 IapProgramByte(0x0001,A0_fen)。 IapProgramByte(0x0002,A1_shi)。 IapProgramByte(0x0003,A1_fen)。 k2=0。 }break。 }}break。 case 2:{switch(k2){case 0:。 break。 case 1:{if(key==1){B0_shi++。 if(B0_shi==24)B0_shi=0。 /*shi=0~23*/} if(key==4){if(B0_shi==0)B0_shi=24。 B0_shi。 /*shi=23~0*/}}break。 case 2:{if(key==1){B0_fen++。 if(B0_fen==60)B0_fen=0。 /*fen=0~59*/} if(key==4){if(B0_fen==0)B0_fen=60。 B0_fen。 /*fen=59~0*/}}break。 case 3:{if(key==1){B1_shi++。 if(B1_shi==24)B1_shi=0。 /*shi=0~23*/} if(。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。