找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1647|回复: 0
打印 上一主题 下一主题
收起左侧

单片机多功能电子钟参考练习

[复制链接]
跳转到指定楼层
楼主
这是我练习的多功能电子时钟,我们要实现的功能有:走时、 校时、闹钟、温度、遥控这么几个。要想实现这几个功能,其中走时所需要的就是时钟芯片, 即 DS1302;时间需要显示给人看,就需要显示器件,我们用到了点阵、数码管、独立 LED、 液晶;再来看校时,校时需要输入器件,本例中我们可以用板载按键和遥控器,它们各自的 驱动代码不同,但是实现的功能是一样的,都是校时;还有闹钟设置,在校时的输入器件的 支持下,闹钟也就不需要额外的硬件输入了,只需要用程序代码让蜂鸣器响就行了。
  1.     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 计数

  2.     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 计数

  3.     return (TH1*256 + TL1);  //T1 计数值合成为 16bit 整型数,并返回该数 } /* INT1 中断服务函数,执行红外接收及解码 */ void EXINT1_ISR() interrupt 2 {     uint8 i, j;     uint8 byt;     uint16 time;
复制代码


5.png (111.36 KB, 下载次数: 24)

头文件

头文件

source.rar

20.85 KB, 下载次数: 5, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表