|
这是我练习的多功能电子时钟,我们要实现的功能有:走时、 校时、闹钟、温度、遥控这么几个。要想实现这几个功能,其中走时所需要的就是时钟芯片, 即 DS1302;时间需要显示给人看,就需要显示器件,我们用到了点阵、数码管、独立 LED、 液晶;再来看校时,校时需要输入器件,本例中我们可以用板载按键和遥控器,它们各自的 驱动代码不同,但是实现的功能是一样的,都是校时;还有闹钟设置,在校时的输入器件的 支持下,闹钟也就不需要额外的硬件输入了,只需要用程序代码让蜂鸣器响就行了。- ET1 = 0; //禁止 T1 中断 IT1 = 1; //设置 INT1 为负边沿触发 EX1 = 1; //使能 INT1 中断 } /* 获取当前高电平的持续时间 */ uint16 GetHighTime() { TH1 = 0; //清零 T1 计数初值 TL1 = 0; TR1 = 1; //启动 T1 计数 while (IR_INPUT) //红外输入引脚为 1 时循环检测等待,变为 0 时则结束本循环 { if (TH1 >= 0x40) { //当 T1 计数值大于 0x4000,即高电平持续时间超过约 18ms 时, break; //强制退出循环,是为了避免信号异常时,程序假死在这里。 } } TR1 = 0; //停止 T1 计数
-
- return (TH1*256 + TL1); //T1 计数值合成为 16bit 整型数,并返回该数 } /* 获取当前低电平的持续时间 */ uint16 GetLowTime() { TH1 = 0; //清零 T1 计数初值 TL1 = 0; TR1 = 1; //启动 T1 计数 while (!IR_INPUT) //红外输入引脚为 0 时循环检测等待,变为 1 时则结束本循环 { if (TH1 >= 0x40) { //当 T1 计数值大于 0x4000,即低电平持续时间超过约 18ms 时, break; //强制退出循环,是为了避免信号异常时,程序假死在这里。 } } TR1 = 0; //停止 T1 计数
-
- return (TH1*256 + TL1); //T1 计数值合成为 16bit 整型数,并返回该数 } /* INT1 中断服务函数,执行红外接收及解码 */ void EXINT1_ISR() interrupt 2 { uint8 i, j; uint8 byt; uint16 time;
复制代码
|
|