主频率 12M
功能:
1、使用DS1302获得时钟信号,能够进行时间设置
2、能够设置10组打铃时间,并具有临时打铃功能,打铃的时长为5S钟
3、1602液晶屏幕显示数据。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
使用方法: 按键“÷”时间调整,多次按下调整位
按键“X”打铃时间调整,多次按下调整位
按键“=”打铃时间数组调整
按键“+”数据加
按键“-”数据减
按键“/C”退出
单片机主频率 12M
单片机源程序如下:
- /*
- 主频率 12M
- 项目名称: 校园打铃系统
- 功能:
- 1、8位数码管显示当前时间。
- 2、使用DS1302获得时钟信号,能够进行时钟设置
- 3、能够设置10组打铃时间,并具有临时打铃功能,打铃的时长为5S钟
- 4、使用1602液晶屏幕显示。
- 使用方法: 按键“÷”时间调整,多次按下调整位
- 按键“X”打铃时间调整,多次按下调整位
- 按键“=”打铃时间数组调整
- 按键“+”数据加
- 按键“-”数据减
- 按键“/C”退出
- */
- #include "all.h"
- u8 Mode=0; //模式标记
- u8 Ring_Sign=0; //打铃标记
- void main(void)
- {
- u8 i=0,q=0,s;
- lcd_start(); //屏幕初始化
- lcd_CLS(); //清屏
- Init_Ds1302(); //DS1302初始化
- Timer0Init(); //定时器(铃声)初始化
- P37=0;
- TR0 = 1; //启动定时器0
-
- while(1)
- {
- Key4x4_2(); //4X4按键数据(松手后)读取
- Key_Mode(); //模式判断
-
- if(Mode>0) //非正常模式进入
- {
- if(LCD1602_Cursor_address==0)//非正常模式光标一定存在
- LCD1602_Cursor_address=1;
-
- if(Mode==1) //时间调整
- {
- Time_Settings(); //数据调整
- lcd_position(16); //模式标记
- lcd_write_data('N');
- lcd_write_data('z');
- }
- else //铃声时间调整
- {
- Alarm_Clock(); //数据调整
- lcd_position(0); //模式标记
- lcd_write_data(Ring/10+'0');
- lcd_write_data(Ring%10+'0');
- lcd_position(16);
- lcd_write_data('S');
- lcd_write_data('j');
- }
- LCD_1602_Cursor_address(); //光标闪烁
- delay_ms(35); //闪烁频率不能太高
- }
- else //正常模式进入
- {
- Read_Time_Ds1302(); //读取时钟信息
- lcd_printf_Ds1302(); //时间数据刷新
-
- i=10;
- while(i--) //判断是否打铃时间
- {
- for(q=0;q<3;q++) //秒分时对比
- {
- if(Time[q]==Ring_Data[i][q])
- Ring_Sign=1;
- else //秒分时只要有一个不符合就不允许打铃
- {
- Ring_Sign=0;
- goto Goto; //无条件跳到Goto
- }
- }
- Goto:
- if(Ring_Sign)
- {
- s=(Time[0]+5); //打铃时间调整
- Time_Data=1; //打铃
- }
- }
-
- if(Time[0]>s) //时间到停止打铃
- {
- Time_Data=0;
- }
- }
- }
- }
复制代码
所有资料51hei提供下载:
电子时钟.zip
(170.3 KB, 下载次数: 101)
|