找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机红外线多功能电子钟程序

[复制链接]
跳转到指定楼层
楼主
ID:405166 发表于 2020-5-22 10:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
设计实际实现功能
(1) 进行实时时钟显示功能(达到正点时,自动报时)
(2) 时间校准功能 液晶能够显示年月日星期时分秒(以上位数据均可调),最后一部分显示电自1707班级名
(3) 设置闹钟功能,能够对实时时钟进行设置闹钟(且能够选择到点提醒功能)
   当选择提醒功能0时,闹钟到点进行响铃
   当选择提醒功能1时,闹钟到点进行驱动风扇
   当选择提醒功能2时,闹钟到点播放铃声黑人抬棺
(4) 能够作为AD测电压模块,将所测电压实时显示到LCD1602上面
(5) 当按下功能转换5时,LCD1602会显示出所设置闹钟的时间以及外界的温度,持续显示5秒钟,最终将显示实时时钟


单片机源程序如下:
  1. /*
  2. 本系统共分为以下几个模块:
  3. LCD1602显示模块
  4. DS1302实时模块
  5. 红外发射遥控模块
  6. XPT2046AD测电压模块
  7. DS18B20温度传感器模块

  8. 源程序说明
  9. ds18b02.c和ds18b02.h文件为DS1302实时时钟模块的配置库文件
  10. lcd.c和lcd.h为lcd1602液晶显示模块的配置文件
  11. realtime.c和realtime.h为实时时钟模块的配置文件
  12. redkey.c和redkey.h为红外发射模块的配置文件
  13. xpt2046.c和xpt2046.h为AD测量模块的配置文件
  14. timer.c和timer.h为定时器的配置文件
  15. redkeyhandle.c和redkeyhandle.h为红外发射按键的处理函数文件
  16. lcd_time.c和lcd_time.h为液晶显示的处理函数文件
  17. heirentaiguan.che和heirentaiguan.h为黑人抬棺铃声


  18. 实现功能
  19. 1 进行实时时钟显示功能(达到正点时,自动报时)

  20. 2 时间校准功能 液晶能够显示年月日星期时分秒(以上位数据均可调),最后一部分显示电自1707班级名

  21. 3 设置闹钟功能,能够对实时时钟进行设置闹钟(且能够选择到点提醒功能)
  22.    当选择提醒功能0时,闹钟到点进行响铃
  23.    当选择提醒功能1时,闹钟到点进行驱动风扇
  24.    当选择提醒功能2时,闹钟到播放音乐

  25. 4 能够作为AD测电压模块,将所测电压实时显示到LCD上面

  26. 5 当按下功能转换5时,LCD会显示出所设置闹钟的时间以及外界的温度,持续显示5秒钟,最终将显示实时时钟


  27. */


  28. #include "reg52.h"                       
  29. #include "lcd.h"
  30. #include "realtime.h"
  31. #include "timer.h"
  32. #include "lcd_time.h"
  33. #include "redkey.h"
  34. #include "redkeyhandle.h"
  35. #include "heirentaiguan.h"

  36. typedef unsigned int u16;         
  37. typedef unsigned char u8;
  38. sbit beep = P1^5;                 //无源蜂鸣器
  39. sbit moto = P1^2;                 //直流电机
  40. sfr WDT_CONTER = 0xE1;         //看门狗
  41. bit flag1000ms = 0;                 //1s标记位
  42. bit flag1ms = 0;                 //1ms标记位
  43. struct sTime bufTime;          //重置缓存时间区
  44. u8 psec = 0xAA;
  45. u8 logo[]="1707";
  46. u8 time[8];       
  47. u8 str[20];                 //lcd显示功能数组
  48. u8 mode=1;                                 //模式选择,模式1为实时时钟
  49. u8 watchclockmode = 0;         //闹钟模式
  50. u8 ds18b20flag5s=0;                 //温度显示5s模式
  51. unsigned int zhengdianflag = 0;        //正点标记位
  52. unsigned char ircode[4];                //红外发射接收码
  53. bit irflag = 0;                                        //红外发射标记位
  54. bit openwatchclock = 0;                        //开启闹钟时钟
  55. bit naozhong = 0;                                //闹钟标记位
  56. bit dianji =0;                                        //电机标记位
  57. bit zhengdian = 0;                                //正点标记位
  58. bit heiren = 0;                                        //黑人抬棺标记位

  59. void main(void)
  60. {
  61.    
  62.         lcd_init();                           //lcd1602初始化
  63.         Timer1Init();                        //定时器1初始化
  64.     Timer2Init();                        //定时器2初始化
  65.         InitDS1302();                         //ds1302初始化
  66.         pic_write();                         //写入自定义字符
  67.         Initredkey();                         //红外发射初始化
  68.         rstclockinit();                         //闹钟重置初始化
  69.         moto = 0;                                 //电机初始化
  70.         WDT_CONTER = 0x36;                 //开启看门狗
  71.         while(1)
  72.   {
  73.     WDT_CONTER |= 0x10;                 //喂狗
  74.          if(flag1000ms)                        //1s刷新
  75.         {
  76.            flag1000ms = 0;
  77.            if(mode==1){
  78.            lcd_displaytime();  //实时时钟
  79.           }
  80.            if(mode==2)
  81.           { lcd_displayrstclock();        //设置实时时钟
  82.             mode = 20;
  83.           }
  84.            if(mode==3)
  85.           {
  86.             lcd_displaywatchclock();         //设置闹钟
  87.                 mode=30;
  88.           }
  89.            if(mode==4)
  90.           {
  91.             lcd_displayxpt2046();                //AD测电压模式
  92.           }
  93.            if(mode==5)
  94.           {
  95.             EA = 0;
  96.             lcd_display18b20();                   //显示周围的温度以及设置的闹钟时间
  97.                 mode=50;
  98.                
  99.           }
  100.            if(mode==50)                                        //显示温度以及设置的闹钟时间5s之后回到实时时钟界面
  101.           {
  102.         ds18b20flag5s++;
  103.                 if(ds18b20flag5s>=3){
  104.                   mode=1;
  105.                   ds18b20flag5s=0;
  106.                 }            
  107.           }
  108.         }
  109.     redkeyIRQ();                        //红外线扫描
  110.     if(zhengdian==1){                  //正点提示(如果正点了,zhengdian被置1)
  111.           if(flag1ms)
  112.           {
  113.             flag1ms=0;
  114.                 beep=~beep;
  115.                 zhengdianflag--;       //响铃的时间,在lcd.time.c里面被设置为了一个常数
  116.                 if(zhengdianflag<=0){  //时间到了,将标志置零
  117.                 zhengdian = 0;
  118.                 }
  119.           }

  120.         }
  121.         //提示功能区(如果被设置了,那么相应的标记位被置1)
  122.         if(naozhong==1){           //闹钟响铃提示
  123.            if(flag1ms)
  124.            {
  125.              flag1ms=0;
  126.                  beep=~beep;       //蜂鸣器响
  127.            }
  128.         }
  129.         if(dianji==1){                   //电机转动提示
  130.            if(flag1ms)
  131.            {
  132.                  flag1ms=0;
  133.                  moto=~moto;       //驱动电机IO口翻转,此时假如外接了直流电机,即可启动
  134.            }       
  135.         }
  136.         if(heiren==1){                         //黑人抬棺铃声
  137.        
  138.          BuzzDriver();          //铃声驱动函数
  139.          TR2 = 0;               //定时器2停止,为了确保铃声的品质,此时时钟显示刷新会停止
  140.         }
  141.           
  142.   }       
  143.                            
  144. }
复制代码

程序51hei提供下载:
红外线多功能电子钟.zip (131.79 KB, 下载次数: 30)


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

使用道具 举报

沙发
ID:328014 发表于 2020-5-22 14:43 | 只看该作者
好东东 有原理图吗?
回复

使用道具 举报

板凳
ID:432653 发表于 2020-5-23 11:42 | 只看该作者
红外线是啥东西?
回复

使用道具 举报

地板
ID:405166 发表于 2020-6-5 11:16 | 只看该作者
单片机是普中科技最便宜的那种51单片机
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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