/*********************************************************************************************************
模块名称: main.c
摘要: 基于51单片机设计的电子钟
*********************************************************************************************************/
/*********************************************************************************************************
头文件和引脚定义
**********************************************************************************************************/
#include <reg52.h>
#include <stdio.h>
#include "globals.h" //全局变量的声明
#include "EEPROM.h"
#include "InitTimer.h"
#include "InitInterrupt.h"
#include "Delay.h"
#include "SegmentFlash.h"
#include "WebDisplay.h"
#include "Lightflash.h"
sbit LED1 = P2^4;//定义LED1
sbit LED2 = P2^5;//定义LED2
sbit LED3 = P2^6;//定义LED3
sbit LED4 = P2^7;//定义LED4
sbit BEEP = P1^0;//定义蜂鸣器BEEP
sbit KEY3 = P3^4;//定义按键KEY3
/*********************************************************************************************************
全局变量的定义
*********************************************************************************************************/
unsigned char seg_flash = 0;
unsigned char s_num = 0;
unsigned char arr_Days[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};//定义每月天数数组(2024年)
unsigned int year, month, day, hour, min, sec;//年月日时分秒
unsigned int what_d, led = 0;//定义星期显示控制变量web及流水灯控制变量led
unsigned int set_month, set_day, set_hour, set_min;//定义闹钟时间月、日、时、秒
unsigned char alarm;//定义闹钟控制变量alarm
unsigned char set;//定义设置控制变量set
unsigned char arrBUFF[22];//定义串口数据接收中间变量
/*********************************************************************************************************
主函数
*********************************************************************************************************/
void main()
{
seg_flash = 0;//初始数码管控制变量为0
P2 = 0xEF;//定义P2寄存器,点亮LED灯
led = 0;//定义LED灯控制变量初始化为0
InitInterrupt1();//配置中断
InitInterrupt0();
InitTimer0();
InitUART();
if(0x00 == IAPByteRead(0x2C00))//判断数据是否已被初始化,若无,初始化参数
{
sec = IAPByteRead(0x2A00);
min = IAPByteRead(0x2800);
hour = IAPByteRead(0x2600);
day = IAPByteRead(0x2400);
month = IAPByteRead(0x2200);
year = IAPByteRead(0x2000);
}
else
{
IAPByteWrite(0x2C00,0x00);//数据初始化
year = 2024;
month = 1;
day = 1;
hour = 0;
min = 0;
sec = 0;
}
while(1)
{
if(1==set && arrBUFF[0]=='s' && arrBUFF[1]=='e' && arrBUFF[2]=='t' && '_'==arrBUFF[20])
{
set = 0;//
year = ((arrBUFF[4] - 48) * 1000 )+ ((arrBUFF[5] - 48) * 100) + ((arrBUFF[6] - 48) * 10) + (arrBUFF[7] - 48);//计算设定时间年、月、日、时、分
month = ((arrBUFF[9] - 48) * 10) + (arrBUFF[10] - 48);
day = ((arrBUFF[12] - 48) * 10) + (arrBUFF[13] - 48);
hour = ((arrBUFF[15] - 48) * 10) + (arrBUFF[16] - 48);
min = ((arrBUFF[18] - 48) * 10) + (arrBUFF[19] - 48);
IAPSectorErase(0x2800);//擦除起始地址为0x2800的扇区;
IAPByteWrite(0x2800,min);//将min值写入起始地址为0x2800的扇区;
IAPSectorErase(0x2600);//擦除其实地址为0x2600的扇区
IAPByteWrite(0x2600,hour);//将hour值写入起始地址为0x2600的扇区
IAPSectorErase(0x2400);//擦除起始地址为0x2400的扇区;
IAPByteWrite(0x2400,day);//将day写入起始地址为0x2400的扇区;
IAPSectorErase(0x2200);//擦除其实地址为0x2200的扇区
IAPByteWrite(0x2200,month);//将month写入起始地址为0x2200的扇区
IAPSectorErase(0x2000);//将擦除起始地址为0x2000的扇区
IAPByteWrite(0x2000,year);//将year的值写入起始地址为0x2000的扇区
}
else if(1==set && 'a'==arrBUFF[0] && 'l'==arrBUFF[1] && 'a'==arrBUFF[2] && 'r'==arrBUFF[3] && 'm'==arrBUFF[4] && '_'==arrBUFF[17])//判断串口发送命令是否满足时间设定条件
{
alarm = 1;//设定闹钟控制参数为1
set_month = ((arrBUFF[6] - 48) * 10) + (arrBUFF[7] - 48);//计算设定闹钟时间月、日、时、分
set_day = ((arrBUFF[9] - 48) * 10) + (arrBUFF[10] - 48);
set_hour = ((arrBUFF[12] - 48) * 10) + (arrBUFF[13] - 48);
set_min = ((arrBUFF[15] - 48) * 10) + (arrBUFF[16] - 48);
set = 0;//设置时间设置控制参数为1
}
if(0 == seg_flash)
{
SegmentFlash(hour, min);//按键未被按下时显示时间
}
else if(1 == seg_flash)//按键被按下显示日期
{
SegmentFlash(month, day);
}
if(month == set_month && day == set_day && hour == set_hour && min == set_min && 1 == alarm)//蜂鸣器鸣叫实现闹钟功能
{
BEEP = 0;
}
if(0 == KEY3)//按下按键3停止闹钟
{
DelayNms(50);
if(0 == KEY3)
{
alarm = 0;//
BEEP = 1;
}
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论























收起资源包目录















































共 45 条
- 1
资源评论



突破ljj
- 粉丝: 218
- 资源: 1
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
