"); //-->
电子日历工程文件(包括源代码、keil文件、protues仿真等)
电子日历实验报告(含原理图、程序分析、效果图等)
原理图如下:
以下为该电子日历的main函数:
Calendar.c程序文件:/******使用LCD1602、DS1302时钟芯片、DS18B20温度传感器完成该日历*******/
#include<reg52.h>
//以下的顺序不能任意放
#define uint unsigned int //宏定义
#define uchar unsigned char
#include"LM016L.h"
#include"DS1302.h"
#include"DS18B20.h"
#include"KeyScan.h"
#include"MODE.h"
#include"OPEN.h"
////////以下为几个标志位///////////
// flag,select,alarm,temperature,limit
/*分别为模式标志位、功能选择标志位、闹钟、温度正负标志位以及温度上限值 (整型)
其中alarm有三种状态:0为禁止进入,1为允许进入,2为正在闹钟模式下 */
void open(); //上电显示
void KeyScan(); //键盘扫描
void SetTime_Mode(); //调时
void SetRing_Mode(); //闹钟设置
void SetTemp_Mode(); //温度上限设置模式
/******************************日历主函数************************************/
void main()
{
init(); //初始化LCD
Set_RTC(l_tmpdate1);//初始化时钟芯片
open(); //上电显示函数
write_com(0x01); //清屏
while(1)
{
time_date(); //时间处理
KeyScan(); //键盘扫描
if(ring_time[1]==l_tmpdate[1]&&ring_time[2]==l_tmpdate[2]&&flag==0&&alarm!=0)//判断是否到闹钟设置的时间,是的话执行相应动作
{
uchar i;
alarm=2; //正在闹钟响应模式下
if(ring_time[0]==l_tmpdate[0])//相等的那一时刻清屏,循环清屏会导致闪烁
write_com(0x01);
led=0; //小灯闪烁
delay(100);
led=1;
write_com(0x80+0x01); //写入“Time To Get Up”
for(i=0;i<14;i++)
{
write_date(ringtable[i]);
}
if(l_tmpdate[0]==0x59) //自动退出闹钟模式时清屏
write_com(0x01);
continue; //跳出本次的While循环
}
if(flag==0) //正常显示模式下
{
tempchange(); //温度转换命令
display(l_tmpdisplay,8);//显示时间
Temp_Display(); //显示温度
deal(); //温度处理
}
if(flag==1) //功能选择模式下
{
uchar i;
write_com(0x80+0x4); //选择菜单
for(i=0;menu[select][i]!='\0';i++)
{
write_date(menu[select][i]);
}
if(select==0) //调试模式
{
SetTime_Mode();
}
if(select==1) //闹钟设置
{
SetRing_Mode();
}
if(select==2) //设置温度上限
{
SetTemp_Mode();
}
}
}
}
/***************END***********END******************************/
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。