单片机课程设计_多功能定时器(编辑修改稿)内容摘要:

//IIC_Delay_us(0)。 MDO = (dd amp。 0x80)7。 IIC_Delay_us(1)。 MCO = 1。 //IIC_Delay_us(3)。 dd = 1。 } MCO = 0。 } /*********************************************************************************** * 函数名 : IIC_Delay_us。 * 描述 : IIC 总线延时函数。 * 输入 : 延时参数 多功能定时装置 15 * 返回值 : none。 * 注释 : none。 ************************************************************************************/ void IIC_Delay_us(unsigned int times) { unsigned int i。 unsigned char DelayJs。 for (i=0。 itimes。 i++)DelayJs++。 } 主程序( Prj6) include include include include unsigned char CurrentTime[7]={55,59,21,6,23,04,11}。 unsigned char ClockSetSave1[3]={10,00,22},ClockSetSave2[3]={20,00,22}。 unsigned char code table[7]={0x53,0x4d,0x48,0x59,0x6d,0x44,0x57}。 unsigned char code table1[4]={0x20,0x53,0x4d,0x48}。 unsigned char KeyValue,ClockKeyValue,shijianzhi=0。 unsigned char SetMode=0。 unsigned char ShowMode=0。 unsigned char Clock=1,ClockSet=0,FinishClockSet1=0,FinishClockSet2=0,ClockEn1=0,ClockEn2=0。 unsigned int i=0。 void KeyProcess()。 void stop() { P1amp。 =0xf0。 P2|=0x0f。 P2amp。 =0xfe。 if((P1amp。 0x08)==0) { P2amp。 =0xfe。 } } void main() { PLLCONamp。 =0xf8。 //设置频率为 CFG848|=0x01。 //使用片内 xram 多功能定时装置 16 init()。 I2CCON=0xE8。 //配置 IIC 为软件主发送模式 SetTime(CurrentTime)。 SwitchRTC(1)。 write_(0x82)。 //写冒号 write_data(0x3A)。 write_(0x85)。 //写冒号 write_data(0x3A)。 write_(0xc2)。 //写短横线 write_data(0x2D)。 write_(0xc5)。 //写短横线 write_data(0x2D)。 write_(0xc8)。 //写短横线 write_data(0x2D)。 while(1) { stop()。 if(SetMode==0)ReadTime(CurrentTime)。 write_(0x80)。 write_data(CurrentTime[2]/10+48)。 //Hour write_data(CurrentTime[2]%10+48)。 write_(0x83)。 write_data(CurrentTime[1]/10+48)。 //Minute write_data(CurrentTime[1]%10+48)。 write_(0x86)。 write_data(CurrentTime[0]/10+48)。 //Second write_data(CurrentTime[0]%10+48)。 write_(0xc0)。 write_data(CurrentTime[6]/10+48)。 //Year write_data(CurrentTime[6]%10+48)。 write_(0xc3)。 write_data(CurrentTime[5]/10%10+48)。 //Month write_data(CurrentTime[5]%10+48)。 write_(0xc6)。 write_data(CurrentTime[4]/10%10+48)。 //Day write_data(CurrentTime[4]%10+48)。 switch(CurrentTime[3]) //Week { case 1:{write_(0xc9)。 write_data(0x4D)。 write_data(0x6f)。 write_data(0x6e)。 break。 }//显示 Mon case 2:{write_(0xc9)。 write_data(0x54)。 write_data(0x75)。 write_data(0x65)。 break。 }//显示 Tue case 3:{write_(0xc9)。 write_data(0x57)。 write_data(0x65)。 write_data(0x64)。 break。 }//显示 Wen 将十进制数转换为十六进制的 ASCII 值以便在LCD 上显示 ReadTime():把时间从芯片中读出 SetTime():把时间写入芯片 SwitchRTC(1):让时钟芯片走时 SwitchRTC(0):让时钟芯片暂停计时 多功能定时装置 17 case 4:{write_(0xc9)。 write_data(0x54)。 write_data(0x68)。 write_data(0x75)。 break。 }//显示 Thu case 5:{write_(0xc9)。 write_data(0x46)。 write_data(0x72)。 write_data(0x69)。 break。 }//显示 Fri case 6:{write_(0xc9)。 write_data(0x53)。 write_data(0x61)。 write_data(0x74)。 break。 }//显示 Sat case 7:{write_(0xc9)。 write_data(0x53)。 write_data(0x75)。 write_data(0x6e)。 break。 }//显示 Sun default: break。 } KeyProcess()。 if((CurrentTime[0]==ClockSetSave1[0]amp。 amp。 CurrentTime[1]==ClockSetSave1[1]amp。 amp。 CurrentTime[2]==ClockSetSave1[2])amp。 amp。 ClockEn1==1 || (CurrentTime[0]==ClockSetSave2[0]amp。 amp。 CurrentTime[1]==ClockSetSave2[1]amp。 amp。 CurrentTime[2]==ClockSetSave2[2])amp。 amp。 ClockEn2==1) //与闹铃时间相同则闹铃响 { PWM1H=62。 PWM1L=100。 PWMCON=0x31。 KeyDelay(333)。 PWM1H=0。 PWM1L=0。 PWMCON=0x00。 KeyDelay(333)。 } if(CurrentTime[0]==0amp。 amp。 CurrentTime[1]==0) //整点报时 { PWM1H=62。 PWM1L=100。 PWMCON=0x21。 //对闹铃响铃时长和音调等的设定 KeyDelay(333)。 PWM1H=0。 PWM1L=0。 PWMCON=0x00。 KeyDelay(333)。 } if(ClockEn1==1) //如果闹铃 1 被设置则显示 C1 { write_(0x8c)。 write_data(0x43)。 write_data(0x31)。 } else //否则清显 { write_(0x8c)。 write_data(0x20)。 write_data(0x20)。 } if(ClockEn2==1) //如果闹铃 2 被设置则显示 C1 { 多功能定时装置 18 write_(0x8e)。 write_data(0x43)。 write_data(0x32)。 } else //否则清显 { write_(0x8e)。 write_data(0x20)。 write_data(0x20)。 } } } void KeyProcess() //按键处理 ,启动按键扫描 { KeyValue=GetKey()。 switch(KeyValue) { case 0: //按键 0 进入设置模式 { write_(0xcf)。 write_data(table[SetMode])。 //显示被 设置项 if(SetMode==0)SwitchRTC(0)。 //进入设置,则停止计时 SetMode++。 if(SetMode7) //如果设置完了,则开始计时 { SetMode=0。 SetTime(CurrentTime)。 if(SetMode==0)SwitchRTC(1)。 write_(0xcf)。 write_data(0x20)。 } }break。 case 1: //按键 1:加 { switch(SetMode) //执行按键 1 是在进入设置的模式下 { case 1:write_(0xcf)。 write_data(0x53)。 CurrentTime[0]++。 if(CurrentTime[0]59)CurrentTime[0]=0。 break。 //miao case 多功能定时装置 19 2:write_(0xcf)。 write_data(0x4d)。 CurrentTime[1]++。 if(CurrentTime[1]59)CurrentTime[1]=0。 break。 //fen case 3:write_(0xcf)。 write_data(0x48)。 CurrentTime[2]++。 if(CurrentTime[2]23)CurrentTime[2]=0。 break。 //shi case 4:write_(0xcf)。 write_data(0x59)。 CurrentTime[6]++。 if(CurrentTime[6]99)CurrentTime[6]=0。 break。 //year case 5:write_(0xcf)。 write_data(0。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。