/*****************************************************************
*项目:51单片机lcd1602温度显示时闹
*作者:覃bisu
*版本:V3.0
*时间:2021年6月1日16:06:16
******************************************************************/
#include "reg52.h"
#include "ds1302.h"
#include "temp.h"
#include "lcd.h"
#include "eeprom.h"
/************长按2秒***********/
sbit k1 = P1^0; //mode键
sbit k2 = P1^1; // 时间转换键/LCD背光开关
sbit k3 = P1^2; //调节加键/闹钟输出调试
sbit k4 = P1^3; //选择修改参数/保存时间/闹钟开关
sbit led1 = P2^7;
sbit led2 = P2^5;
sbit led3 = P2^1;
sbit led4 = P2^0;
sbit lcdled = P2^4;
sbit beep = P1^7;
unsigned int ti=0,alarm=0;
unsigned char alarm_hour=0x12,alarm_min=0x00;
uchar code table1[]={0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00}; //字符℃
enum Mode //定义枚举、三种模式
{
DISPLAYDATA,MODIFYDATA,SETALARMCLOCK,NONE,ALARMCLOCK
}
mode;
enum Alarmswitch
{
OFF,ON
}
alarmswitch;
/*********延时函数***********/
void delay_ms(uint ms)
{
uint i, j;
for(i=ms; i>0; i--)
for(j=1; j>0; j--);
}
/********显示日期、时间、星期***********/
void display_data(void)
{
{
LcdWriteCom(0x80);
LcdWritestr("20");
LcdWriteData(TIME[6]/16+0x30); //年
LcdWriteData(TIME[6]%16+0x30);
LcdWriteData('-');
LcdWriteData(TIME[4]/16+0x30); //月
LcdWriteData(TIME[4]%16+0x30);
LcdWriteData('-');
LcdWriteData(TIME[3]/16+0x30); //日
LcdWriteData(TIME[3]%16+0x30);
LcdWriteData(' ');
}
switch(TIME[5])
{
case 0:LcdWritestr("Mon"); break;
case 1:LcdWritestr("Tue"); break;
case 2:LcdWritestr("Wed"); break;
case 3:LcdWritestr("Thu"); break;
case 4:LcdWritestr("Fri"); break;
case 5:LcdWritestr("Sat"); break;
case 6:LcdWritestr("Sun"); break;
}
LcdWriteData(' ');
if(alarmswitch==ON)LcdWriteData('&');
else LcdWriteData(' ');
{
LcdWriteCom(0xC0);
LcdWriteData(TIME[2]/16+0x30); //时
LcdWriteData(TIME[2]%16+0x30);
LcdWriteData(':');
LcdWriteData(TIME[1]/16+0x30); //分
LcdWriteData(TIME[1]%16+0x30);
LcdWriteData(':');
LcdWriteData(TIME[0]/16+0x30); //秒
LcdWriteData(TIME[0]%16+0x30);
}
}
void displaytemp(int temp) //显示温度
{
float tp;
if(temp< 0)
{
LcdWriteCom(0xc9);
LcdWriteData('-');
temp=temp-1;
temp=~temp;
tp=temp;
temp=tp*0.0625*100+0.5;
}
else
{
LcdWriteCom(0xc9);
LcdWriteData('+');
tp=temp;
temp=tp*0.0625*100+0.5;
}
LcdWriteData(temp % 10000 / 1000 + 0x30);
LcdWriteData(temp % 1000 / 100 + 0x30);
LcdWriteData('.');
LcdWriteData(temp % 100 / 10 + 0x30);
LcdWriteData(temp % 10 + 0x30);
LcdWriteData(0x00); //自编字符℃
}
void displayzifu()
{
uchar i;
LcdWriteCom(0x40);
for(i = 0; table1[i] != '\0'; i++)
{
LcdWriteData(table1[i]); //写入自编字符℃
}
}
/******************************************************************
* 函 数 名 : keypros
* 函数功能 : 按键处理函数,判断按键K1是否按下
*******************************************************************/
void keypros()
{
if(k1==0)
{
delay_ms(1);
if(k1==0)
{
mode+= 1;
if(mode == 3)mode = DISPLAYDATA;
}
while(k1==0);
}
if(k2==0)
{
delay_ms(1);
if(k2==0)
{
lcdled = !lcdled;
}
while(k2==0);
}
if(k3==0)
{
delay_ms(1);
if(k3==0)
{
beep = !beep;
}
while(k3==0);
}
if(!k4)
{
delay_ms(1);
if(!k4)
{
alarmswitch=!alarmswitch;
}
while(!k4);
}
}
/*************修改时间************/
void modify(void)
{
display_data();
if(k1 == 0)
{
delay_ms(1);
if(k1==0)
{
mode+= 1;
if(mode == 3)mode = DISPLAYDATA;
}
while(k1 == 0);
}
if(k2 == 0)
{
delay_ms(1);
if(k2==0)
{
ti++;
if(ti == 8)ti=0;
}
while(k2 == 0);
}
switch(ti)
{
case 0:
if(k3==0)
{
delay_ms(1);
if(k3 ==0)
{
TIME[0]++;
if(TIME[0]%16 == 0x0a)
{
TIME[0] += 16;
TIME[0] &= 0xf0;
}
if(TIME[0]==0x60)TIME[0]=0;
}
while(k3==0);
}
if(k4==0)
{
delay_ms(1);
if(k4 ==0)
{
TIME[0]--;
if(TIME[0]%16==0x0f && TIME[0]!=0xff)
{
TIME[0] &= 0xf9;
}
if(TIME[0]==0xff)TIME[0]=0x59;
}
while(k4==0);
}
LcdWriteCom(0xc6);
LcdWritestr(" ");
break; //秒
case 1:
if(k3==0)
{
delay_ms(1);
if(k3 ==0)
{
TIME[1]++;
if(TIME[1]%16 == 0x0a)
{
TIME[1] += 16;
TIME[1] &= 0xf0;
}if(TIME[1]==0x60)TIME[1]=0;
}
while(k3==0);
}
if(k4==0)
{
delay_ms(1);
if(k4 ==0)
{
TIME[1]--;
if(TIME[1]%16==0x0f && TIME[1]!=0xff)
{
TIME[1] &= 0xf9;
}
if(TIME[1]==0xff)TIME[1]=0x59;
}
while(k4==0);
}
LcdWriteCom(0xc3);
LcdWritestr(" ");
break; //分
case 2:
if(k3==0)
{
delay_ms(1);
if(k3 ==0)
{
TIME[2]++;
if(TIME[2]%16 == 0x0a)
{
TIME[2] += 16;
TIME[2] &= 0xf0;
}
if(TIME[2]==0x24)TIME[2]=0;
}
while(k3==0);
}
if(k4==0)
{
delay_ms(1);
if(k4 ==0)
{
TIME[2]--;
if(TIME[2]%16==0x0f && TIME[2]!=0xff)
{
TIME[2] &= 0xf9;
}
if(TIME[2]==0xff)TIME[2]=0x23;
}
while(k4==0);
}
LcdWriteCom(0xc0);
LcdWritestr(" ");
break; //时
case 3:
if(k3==0)
{
delay_ms(1);
if(k3 ==0)
{
TIME[3]++;
if(TIME[3]%16 == 0x0a)
{
TIME[3] += 16;
TIME[3] &= 0xf0;
}if(TIME[3]==0x32)TIME[3]=0;
}
while(k3==0);
}
if(k4==0)
{
delay_ms(1);
if(k4 ==0)
{
TIME[3]--;
if(TIME[3]%16==0x0f && TIME[3]!=0xff)
{
TIME[3] &= 0xf9;
}
if(TIME[3]==0xff)TIME[3]=0x31;
}
while(k4==0);
}
LcdWriteCom(0x88);
LcdWritestr(" ");
break; //日
case 4:
if(k3==0)
{
delay_ms(1);
if(k3 ==0)
{
TIME[4]++;
if(TIME[4]%16 == 0x0a)
{
TIME[4] += 16;
TIME[4] &= 0xf0;
}if(TIME[4]==0x13)TIME[4]=0;
}
while(k3==0);
}
if(k4==0)
{
delay_ms(1);
if(k4 ==0)
{
TIME[4]--;
if(TIME[4]%16==0x0f && TIME[4]!=0xff)
{
TIME[4] &= 0xf9;
}
if(TIME[4]==0xff)TIME[4]=0x12;
}
while(k4==0);
}
LcdWriteCom(0x85);
LcdWritestr(" ");
break; //月
case 5:
if(k3==0)
{
delay_ms(1);
if(k3 ==0)
{
TIME[6]++;
if(TIME[6]%16 == 0x0a)
{
TIME[6] += 16;
TIME[6] &= 0xf0;
}if(TIME[6]==0xa0)TIME[6]=0;
}
while(k3==0);
}
if(k4==0)
{
delay_ms(1);
if(k4 ==0)
{
TIME[6]--;
if(TIME[6]%16==0x0f && TIME[6]!=0xff)
{
TIME[6] &= 0xf9;
}
if(TIME[6]==0xff)TIME[6]=0x99;
}
while(k4==0);
}
LcdWriteCom(0x80);
LcdWritestr(" ");
没有合适的资源?快使用搜索试试~ 我知道了~
51时钟日历闹铃温度DS18B20LCD1206
共28个文件
obj:5个
c:5个
lst:5个
需积分: 0 1 下载量 186 浏览量
2023-12-20
11:45:59
上传
评论
收藏 3.92MB ZIP 举报
温馨提示
部分代码有源码 #include "reg52.h" #include "ds1302.h" #include "temp.h" #include "lcd.h" #include "eeprom.h" /************长按2秒***********/ sbit k1 = P1^0; //mode键 sbit k2 = P1^1; // 时间转换键/LCD背光开关 sbit k3 = P1^2; //调节加键/闹钟输出调试 sbit k4 = P1^3; //选择修改参数/保存时间/闹钟开关 sbit led1 = P2^7; sbit led2 = P2^5; sbit led3 = P2^1; sbit led4 = P2^0; sbit lcdled = P2^4; sbit beep = P1^7; unsigned int ti=0,alarm=0; unsigned char alarm_hour=0x12,alarm_min=0x00; uchar code table1[]=
资源推荐
资源详情
资源评论
收起资源包目录
51lcd1602时闹温显.zip (28个子文件)
51lcd1602时闹温显
lcd.h 1KB
ds1302.h 534B
lcd.c 5KB
ds1302.LST 6KB
时闹温显.uvproj 15KB
temp.h 456B
ds1302.OBJ 5KB
ds1302.c 3KB
时闹温显.hex 12KB
temp.LST 7KB
main.OBJ 29KB
时闹温显.build_log.htm 1KB
时闹温显.uvopt 8KB
eeprom.h 969B
时闹温显.M51 53KB
21.jpg 4.02MB
lcd.OBJ 5KB
lcd.LST 9KB
main.LST 28KB
temp.c 4KB
eeprom.OBJ 5KB
eeprom.c 2KB
eeprom.LST 4KB
时闹温显.lnp 99B
时闹温显.uvgui.Administrator 91KB
main.c 14KB
temp.OBJ 6KB
时闹温显 43KB
共 28 条
- 1
资源评论
2301_82061339
- 粉丝: 6
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功