找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4095|回复: 3
收起左侧

单片机校园打铃系统源程序+Proteus仿真

[复制链接]
ID:661402 发表于 2020-7-12 17:41 | 显示全部楼层 |阅读模式
主频率    12M
功能:
        1、使用DS1302获得时钟信号,能够进行时间设置
        2、能够设置10组打铃时间,并具有临时打铃功能,打铃的时长为5S钟
        3、1602液晶屏幕显示数据。

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
12.png

使用方法:    按键“÷”时间调整,多次按下调整位
按键“X”打铃时间调整,多次按下调整位
按键“=”打铃时间数组调整
按键“+”数据加
按键“-”数据减
按键“/C”退出
单片机主频率    12M

单片机源程序如下:
  1. /*

  2. 主频率    12M

  3. 项目名称: 校园打铃系统
  4. 功能:
  5. 1、8位数码管显示当前时间。
  6. 2、使用DS1302获得时钟信号,能够进行时钟设置
  7. 3、能够设置10组打铃时间,并具有临时打铃功能,打铃的时长为5S钟
  8. 4、使用1602液晶屏幕显示。

  9. 使用方法:        按键“÷”时间调整,多次按下调整位
  10.                         按键“X”打铃时间调整,多次按下调整位
  11.                         按键“=”打铃时间数组调整
  12.                         按键“+”数据加
  13.                         按键“-”数据减
  14.                         按键“/C”退出

  15. */

  16. #include "all.h"

  17. u8 Mode=0;                        //模式标记
  18. u8 Ring_Sign=0;                //打铃标记

  19. void main(void)
  20. {       
  21.         u8 i=0,q=0,s;
  22.         lcd_start();        //屏幕初始化
  23.         lcd_CLS();                //清屏       
  24.         Init_Ds1302();        //DS1302初始化
  25.         Timer0Init();   //定时器(铃声)初始化
  26.         P37=0;
  27.         TR0 = 1;        //启动定时器0
  28.        
  29.         while(1)
  30.         {       
  31.                 Key4x4_2();                                                //4X4按键数据(松手后)读取
  32.                 Key_Mode();                                                //模式判断
  33.                
  34.                 if(Mode>0)                                                //非正常模式进入
  35.                 {
  36.                         if(LCD1602_Cursor_address==0)//非正常模式光标一定存在
  37.                                 LCD1602_Cursor_address=1;
  38.                        
  39.                         if(Mode==1)                                        //时间调整
  40.                         {
  41.                                 Time_Settings();                //数据调整
  42.                                 lcd_position(16);                //模式标记
  43.                                 lcd_write_data('N');
  44.                                 lcd_write_data('z');
  45.                         }
  46.                         else                                                //铃声时间调整
  47.                         {
  48.                                 Alarm_Clock();                        //数据调整
  49.                                 lcd_position(0);                //模式标记
  50.                                 lcd_write_data(Ring/10+'0');
  51.                                 lcd_write_data(Ring%10+'0');
  52.                                 lcd_position(16);
  53.                                 lcd_write_data('S');
  54.                                 lcd_write_data('j');
  55.                         }
  56.                         LCD_1602_Cursor_address();        //光标闪烁
  57.                         delay_ms(35);                                //闪烁频率不能太高
  58.                 }
  59.                 else                                                        //正常模式进入
  60.                 {
  61.                         Read_Time_Ds1302();                        //读取时钟信息
  62.                         lcd_printf_Ds1302();                //时间数据刷新
  63.                        
  64.                         i=10;
  65.                         while(i--)                                        //判断是否打铃时间
  66.                         {
  67.                                 for(q=0;q<3;q++)                //秒分时对比
  68.                                 {
  69.                                         if(Time[q]==Ring_Data[i][q])
  70.                                                 Ring_Sign=1;
  71.                                         else                                //秒分时只要有一个不符合就不允许打铃
  72.                                         {
  73.                                                 Ring_Sign=0;       
  74.                                                 goto Goto;                //无条件跳到Goto
  75.                                         }
  76.                                 }
  77.                                 Goto:
  78.                                 if(Ring_Sign)                                       
  79.                                 {
  80.                                         s=(Time[0]+5);                //打铃时间调整
  81.                                         Time_Data=1;                //打铃
  82.                                 }
  83.                         }
  84.                        
  85.                         if(Time[0]>s)                                //时间到停止打铃
  86.                         {
  87.                                         Time_Data=0;
  88.                         }
  89.                 }
  90.         }
  91. }
复制代码

所有资料51hei提供下载:
电子时钟.zip (170.3 KB, 下载次数: 99)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:661402 发表于 2020-7-18 07:53 | 显示全部楼层
忘记加临时打铃功能了,只需要  Time_Data=1;  铃声就会响起来,可以自己判断键盘上面哪一个按键被按下就马上响。
回复

使用道具 举报

ID:925918 发表于 2021-5-23 16:34 | 显示全部楼层
请问头文件all. h什么意思
回复

使用道具 举报

ID:661402 发表于 2021-5-29 11:03 | 显示全部楼层
杨国福 发表于 2021-5-23 16:34
请问头文件all. h什么意思

一个头文件,all就是全部的意思,all.h里面我包含了全部的头文件。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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