标题:
带节日显示提醒,温度报警的单片机万年历程序
[打印本页]
作者:
51hei学习技术中
时间:
2016-10-20 22:30
标题:
带节日显示提醒,温度报警的单片机万年历程序
0.png
(68.13 KB, 下载次数: 81)
下载附件
2016-10-20 22:28 上传
非常经典的STC89C52单片机 + DS1820温度 + DS1302时间0 + LCD12864液晶 万年历程序,带节日显示提醒,温度报警:
万年历.zip
(111.76 KB, 下载次数: 50)
2016-10-20 22:29 上传
点击文件名下载附件
下载积分: 黑币 -5
部分源码预览:
/***********************************************************
文件名称: 主函数
作 者: LQW
版 本: 0.01
说 明:
时间 : 12月12日22:20:11
修改记录:
总结 : 1:今天搞了4个钟,收获最大是要看电路图,忘记加一个上拉电阻,时钟时间跑不准
2:12月18日20:33:21加入显示节日函数
3:12月20日18:58:58加入温度显示函数
4: 全局变量用多了将会超出KEIL 默认的直接寻址的DATA区且DATA区只有128字节
5: DS18B20也加4.7K上拉电阻
***********************************************************/
#include"LCD12864.h"
#include"delay.h"
#include"ds1302.h"
#include"timeadjust.h"
#include"keyscan.h"
#include"keypro.h"
#include"disfestival.h"
#include"ds18b20.h"
#include"ds18b20distemp.h"
#include"ds18b20alarm.h"
//#include<reg52.h>
//#include<string.h"
/*------------------------------------------
定义临时变量
-------------------------------------------*/
u8 *WEEK[] = {"SUM","MON","TUS","WEN","THU","FRI","SAT"};
sbit LED1 = P3^7;//温度高于上限LED1闪烁
sbit LED2 = P3^6; //温度高于下限LED2闪烁
u16 TimCnt = 0;
sbit BEEP = P3^5;
/***********************************************************
函数名称: 定时器T0 初始化
函数功能:
入口参数:
出口参数:
备 注:
***********************************************************/
void Time0_Init(void)
{
TMOD |= 0x01; // 定时器T0工作在方式1
TH0 = - 1000 / 256;
TL0 = - 1000 % 256;
EA = 1; //打开总中断
ET0 = 1; //允许T0中
//TR0 = 1; //开启定时器T0中断
}
/***********************************************************
函数名称: 定时器T0中断函数
函数功能: 定时每2ms刷新数码管
入口参数:
出口参数:
备 注:
***********************************************************/
void Time0_ISR() interrupt 1
{
TH0 = - 1000 / 256;
TL0 = - 1000 % 256;
BEEP = !BEEP;
if( ++TimCnt == 200 )
{
TimCnt = 0;
if( H_Alarm )
LED1 = ~LED1;
else
LED1 = 1;
if( L_Alarm )
LED2 = ~LED2;
else
LED2 = 1;
TR0 = 0; //关闭定时器
}
}
void main()
{
u8 keynum;
Time0_Init();//定时器T0初始化
Set_DS18B20_Alarm_Temp();//设置DS18B20温度的报警值,且写入ds18b20里
ds18b20_ReadTemperature();////读取温度值分别放在Temp_Value[](存放温度值)与Temp_Alarm[](存放报警值
Init_DS18B20();//ds18b20初始化
Init_DS1302();//ds1302初始化,是对时时间
Init_LCD12864();//液晶初始化
DelayMs( 1 );
while( 1 )
{
ds18b20_ReadTemperature();//读取温度值分别放在Temp_Value[](存放温度值)与Temp_Alarm[](存放报警值
keynum = KeyScan();//读取按键的
if( adjust_index == -1)
{
GetTime();//获取时间
Format_Time( DataTime[ 6 ], LCD_DIS_BUFFER1 + 2 );
Format_Time( DataTime[ 4 ], LCD_DIS_BUFFER1 + 6 );
Format_Time( DataTime[ 3 ], LCD_DIS_BUFFER1 + 10 );
Format_Time( DataTime[ 2 ], LCD_DIS_BUFFER2 + 0 );
Format_Time( DataTime[ 1 ], LCD_DIS_BUFFER2 + 4 );
Format_Time( DataTime[ 0 ], LCD_DIS_BUFFER2 + 8 );
strcpy( LCD_DIS_BUFFER2 + 13, WEEK[ DataTime[ 5 ] - 1]);
LCD_PutString( 0, 1, LCD_DIS_BUFFER1);
LCD_PutString( 0, 2, LCD_DIS_BUFFER2);
}
Dis_Festival(); //显示公历节日
if( iS_DS18B20_OK == 1 )
{
if( H_Alarm == 1 || L_Alarm == 1 )
TR0 = 1;
else
TR0 = 0;
ds18b20_Display_Temperature();//温度转换
}
if( keynum != 0xff )
{
KeyPro( keynum ); //一边调整一边显示
Format_Time( DataTime[ 6 ], LCD_DIS_BUFFER1 + 2 );
Format_Time( DataTime[ 4 ], LCD_DIS_BUFFER1 + 6 );
Format_Time( DataTime[ 3 ], LCD_DIS_BUFFER1 + 10 );
LCD_PutString( 0, 1, LCD_DIS_BUFFER1);
Format_Time( DataTime[ 2 ], LCD_DIS_BUFFER2 + 0 );
Format_Time( DataTime[ 1 ], LCD_DIS_BUFFER2 + 4 );
Format_Time( DataTime[ 0 ], LCD_DIS_BUFFER2 + 8 );
LCD_PutString( 0, 2, LCD_DIS_BUFFER2);
}
}
}
复制代码
作者:
symbl
时间:
2017-3-31 13:54
好厉害啊
作者:
wangtao123
时间:
2017-12-5 20:13
有仿真图吗?,求发
作者:
吴宇
时间:
2017-12-7 21:30
没有图片!!!!!!!!
作者:
1328024957
时间:
2020-4-11 00:14
可以发一下原理图仿真图吗?跪求
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1