找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2517|回复: 1
打印 上一主题 下一主题
收起左侧

可调时钟+温度显示(ds1302+1602+18b20)

[复制链接]
跳转到指定楼层
楼主
ID:242950 发表于 2017-11-11 20:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 17805591357 于 2017-11-11 20:07 编辑

//可调时钟+温度显示(ds1302+1602+18b20),还可以拓展成串口通信模式

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<stdio.h>
#include<intrins.h>
#include "18b20.h"
#include "1602.h"
#include "delay.h"
#include"ds1302.h"
#define KeyPort P3 //定义按键端口
bit ReadTimeFlag;//定义读时间标志 时间
unsigned char KeyScan(void);//键盘扫描
void Init_Timer0(void);//定时器初始化
/*------------------------------------------------
              串口通讯初始化
------------------------------------------------*/
void UART_Init(void)
{
    SCON  = 0x50;          // SCON: 模式 1, 8-bit UART, 使能接收  
    TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重装
    TH1   = 0xFD;               // TH1:  重装值 9600 波特率 晶振 11.0592MHz  
    TR1   = 1;                  // TR1:  timer 1 打开                        
    //EA    = 1;                  //打开总中断
    //ES    = 1;                  //打开串口中断
TI=1;
}
/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main (void)
{  
unsigned char num;                  
unsigned char temp[16];//定义显示区域临时存储数组               
int temp1;
float temperature;
char displaytemp[16];//定义显示区域临时存储数组
LCD_Init();           //初始化液晶
DelayMs(20);          //延时有助于稳定
LCD_Clear();          //清屏
Init_Timer0();
UART_Init();
Init_DS18B20();
Ds1302_Init();        //ds1302初始化
Ds1302_Read_Time();   //首次读取时间
if((time_buf1[1]+time_buf1[6])==0) //如果所有参数都为0,写入一个初始值
   Ds1302_Write_Time();

while (1)         //主循环
{ temp1=ReadTemperature();
  temperature=(float)temp1*0.0625;
  sprintf(displaytemp,"%0.1f",temperature);//打印温度值
  LCD_Write_String(12,1,displaytemp);//显示第二行
   
   
   
if(ReadTimeFlag==1)
{
   ReadTimeFlag=0;  //标志位清零
   Ds1302_Read_Time();//读取时间参数
   sprintf(temp,"%02d-%02d-%02d",(int)time_buf1[1],(int)time_buf1[2],(int)time_buf1[3]);//年月日周
  LCD_Write_String(0,0,temp);//显示第一行
  sprintf(temp,"%02d:%02d:%02d",(int)time_buf1[4],(int)time_buf1[5],(int)time_buf1[6]);//时分秒
  LCD_Write_String(0,1,temp);//显示第二行
  
}     

    num=KeyScan();
  switch(num)
       {
     case 1:time_buf1[4]++;if(time_buf1[4]==24)time_buf1[4]=0;   
              Ds1302_Write_Time();break; //正常时间 小时 加1
  
  case 2:time_buf1[4]--;if(time_buf1[4]==255)time_buf1[4]=23;  
           Ds1302_Write_Time();break; //正常时间 小时减1
  
  case 3:time_buf1[5]++;if(time_buf1[5]==60)time_buf1[5]=0;     
           Ds1302_Write_Time();break;//分加1
  
  case 4:time_buf1[5]--;if(time_buf1[5]==255)time_buf1[5]=59;
  
  case 5:time_buf1[1]++;//if(time_buf1[0]==60)time_buf1[4]=0; //年   
           Ds1302_Write_Time();break;
  
  case 6:time_buf1[1]--;//if(time_buf1[0]==255)time_buf1[4]=59;//年
           Ds1302_Write_Time();break;
     
  case 7:time_buf1[2]++;if(time_buf1[2]==13)time_buf1[2]=0;  //月   
           Ds1302_Write_Time();break;
  
  case 8:time_buf1[3]--;if(time_buf1[3]==31)time_buf1[3]=0; //日
  default:break;
    }
}
}


可调时钟.rar

39.45 KB, 下载次数: 21, 下载积分: 黑币 -5

评分

参与人数 1黑币 +5 收起 理由
小小卋界 + 5 很给力!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:47652 发表于 2017-11-12 09:38 | 只看该作者
沙发,配个图就好了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表