我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 607|回复: 7

定时插座

[复制链接]

该用户从未签到

3

主题

4

回帖

0

积分

一级逆天

积分
0

终身成就奖

QQ
发表于 2018-4-23 08:06:22 | 显示全部楼层 |阅读模式
#include<reg52.h>
#include "ds1302.h"
#include "main.h"
#include "ir1308.h"
bit readtime_f,key_f = 0,irok;
bit readtemp_f = 0,key_fun_f = 0;
sbit timing_led01 = P3^1; //设置定时1指示灯
sbit timing_led02 = P3^3; //设置定时2指示灯
sbit time_led = P3^0;     //调整时间指示灯
unsigned char key_value,key_select,key_fun = 0,cnt,timing_01=0,timing_02=0;
unsigned int key_count = 0;
SYSTEMTIME timer,timer1,timer2;    //定义两个结构体变量,timer为存当前时间、timer1为存设置定时1时间、timer2为存设置定时2时间
unsigned char ir_mcsj[33];//用于存放33个脉冲的时间长度值

void timer0_init()
{
    TMOD = 0x21;//定时器0工作方式1,定时器1工作方式2
    TH0 = 0X3C;    //50ms
    TL0 = 0XB0;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
   
    TH1 = 0X00;
    TL1 = 0X00;
    ET1 = 1;
    TR1 = 1;
    IT0 = 1;
    EX0 = 1;
}

void timer0_isr() interrupt 1
{
    static unsigned char counter = 0,counter1 = 0;
    TH0 = 0X3C;       //50ms
    TL0 = 0XB0;
    counter ++;
    key_f = 1;
    if(counter==10)
    {
        counter = 0;
        led = ~led;
        readtime_f = 1;
        counter1 ++;
        if(counter1==2)
        {
            counter1 = 0;
            readtemp_f = 1;
        }
    }
}
void t1(void) interrupt 3
{
    cnt++;
}

void int0 (void) interrupt 0//外部中断0服务函数
{   
    static unsigned char i;
    static bit flag;
    if(flag)
    {
        if(cnt<63&&cnt>=33)
            i=0;
        ir_mcsj = cnt;
        cnt = 0;
        i++;
        if(i==33)
        {
            irok = 1;
            i = 0;
        }   
    }
    else
    {
        cnt = 0;
        flag = 1;
    }
}

void main()
{
    unsigned char readtemp;
    lcd_initial();      
    timer0_init();
    ds1302_init();
    while(1)//主循环
    {
        if(readtemp_f&&!key_fun_f)//读取温度
        {
            readtemp_f = 0;
            readtemp = read_temperature();
            LCD_Write_Char(13,1,readtemp/10+'0');  //显示温度值
            LCD_Write_Char(14,1,readtemp%10+'0');
        }
        if(readtime_f&&!key_fun_f)//读取时间
        {
            readtime_f = 0;
            Ds1302_Read_Time(&timer);
            timer_alarm(&timer,&timer1);
            timer_alarm2(&timer,&timer2);
            LCD_Write_Char(3,1,timer.Hour/10 + '0');  //显示时
            LCD_Write_Char(4,1,timer.Hour%10 + '0');
            LCD_Write_Char(6,1,timer.Minute/10 + '0');//显示秒
            LCD_Write_Char(7,1,timer.Minute%10 + '0');
            LCD_Write_Char(9,1,timer.Second/10 + '0');//显示秒
            LCD_Write_Char(10,1,timer.Second%10 + '0');
            LCD_Write_Char(3,0,timer.Year/10 + '0');  //显示年
            LCD_Write_Char(4,0,timer.Year%10 + '0');
            LCD_Write_Char(6,0,timer.Month/10 + '0'); //显示月
            LCD_Write_Char(7,0,timer.Month%10 + '0');
            LCD_Write_Char(9,0,timer.Day/10+ '0');      //显示日
            LCD_Write_Char(10,0,timer.Day%10 + '0');
            LCD_Write_Char(14,0,timer.Week%10 + '0'); //显示周
        }
        if(irok)//判断是否接收好了红外处理
        {
            IR1308();   
        }
        if(key_f)
        {
            key_f = 0;
            key_value = key();
/***********************************选择键************************************/
            if(key_value==0x01)
            {
                    key_select ++;
                    if(key_select>0x07)
                    {
                        key_select = 0x00;
                        WRDcomm(0x0c);
                    }
               
                    else
                    {
                        WRDcomm(0x0d);
                        switch(key_select)
                        {
                            case 0x01CD_Write_Char(3,0,timer.Year/10 + '0');break;
                            case 0x02CD_Write_Char(6,0,timer.Month/10 + '0');break;
                            case 0x03CD_Write_Char(9,0,timer.Day/10 + '0');break;
                            case 0x04CD_Write_Char(13,0,':');break;
                            case 0x05CD_Write_Char(3,1,timer.Hour/10 + '0');break;
                            case 0x06CD_Write_Char(6,1,timer.Minute/10 + '0');break;
                            case 0x07CD_Write_Char(9,1,timer.Second/10 + '0');break;
                            default:break;
                        }
                    }
            }
/*********************************加值键***********************************/
            else if(key_value==0x02)
            {
                if(key_select==0x01)//修改年
                {
                    timer.Year ++;
                    if(timer.Year==100)
                    timer.Year = 0;
                    LCD_Write_Char(4,0,timer.Year%10 + '0');
                    LCD_Write_Char(3,0,timer.Year/10 + '0');
                }
                else if(key_select==0x02)//修改月
                {
                    timer.Month ++;
                    if(timer.Month==13)
                    timer.Month = 1;
                    LCD_Write_Char(7,0,timer.Month % 10 + '0');   
                    LCD_Write_Char(6,0,timer.Month / 10 + '0');
                }
                else if(key_select==0x03)//修改日
                {
                    timer.Day ++;
                    if(timer.Day==32)
                    timer.Day = 1;
                    LCD_Write_Char(10,0,timer.Day % 10 + '0');   
                    LCD_Write_Char(9,0,timer.Day / 10 + '0');
                    
                }                          
                else if(key_select==0x04)//修改星期
                {
                    timer.Week ++;
                    if(timer.Week==8)
                    timer.Week = 1;
                    LCD_Write_Char(14,0,timer.Week % 10 + '0');   
                    LCD_Write_Char(13,0,':');
                    
                }
                else if(key_select==0x05)//修改时
                {
                    timer.Hour ++;
                    if(timer.Hour==24)
                    timer.Hour = 0;
                    LCD_Write_Char(4,1,timer.Hour % 10 + '0');   
                    LCD_Write_Char(3,1,timer.Hour / 10 + '0');
                    
                }
                else if(key_select==0x06)//修改分
                {
                    timer.Minute ++;
                    if(timer.Minute==60)
                    timer.Minute = 0;
                    LCD_Write_Char(7,1,timer.Minute % 10 + '0');   
                    LCD_Write_Char(6,1,timer.Minute / 10 + '0');
                    
                }
                else if(key_select==0x07)//修改秒
                {
                    timer.Second ++;
                    if(timer.Second==60)
                    timer.Second = 0;
                    LCD_Write_Char(10,1,timer.Second % 10 + '0');   
                    LCD_Write_Char(9,1,timer.Second / 10 + '0');
                   }
            }

/*******************************减值键**********************************/
            else if(key_value==0x04)
            {
                if(key_select==0x01)//修改年
                {
                    timer.Year --;
                    if(timer.Year==-1)
                    timer.Year = 99;
                    LCD_Write_Char(4,0,timer.Year%10 + '0');
                    LCD_Write_Char(3,0,timer.Year/10 + '0');
                }
                else if(key_select==0x02)//修改月
                {
                    timer.Month --;
                    if(timer.Month==0)
                    timer.Month = 12;
                    LCD_Write_Char(7,0,timer.Month % 10 + '0');   
                    LCD_Write_Char(6,0,timer.Month / 10 + '0');
                }
                else if(key_select==0x03)//修改日
                {
                    timer.Day --;
                    if(timer.Day==0)
                    timer.Day = 31;
                    LCD_Write_Char(10,0,timer.Day % 10 + '0');   
                    LCD_Write_Char(9,0,timer.Day / 10 + '0');
                    
                }                          
                else if(key_select==0x04)//修改星期
                {
                    timer.Week --;
                    if(timer.Week==0)
                    timer.Week = 7;
                    LCD_Write_Char(14,0,timer.Week % 10 + '0');   
                    LCD_Write_Char(13,0,':');
                    
                }
                else if(key_select==0x05)//修改时
                {
                    timer.Hour --;
                    if(timer.Hour==-1)
                    timer.Hour = 23;
                    LCD_Write_Char(4,1,timer.Hour % 10 + '0');   
                    LCD_Write_Char(3,1,timer.Hour / 10 + '0');
                    
                }
                else if(key_select==0x06)//修改分
                {
                    timer.Minute --;
                    if(timer.Minute==-1)
                    timer.Minute = 59;
                    LCD_Write_Char(7,1,timer.Minute % 10 + '0');   
                    LCD_Write_Char(6,1,timer.Minute / 10 + '0');
                    
                }
                else if(key_select==0x07)//修改秒
                {
                    timer.Second --;
                    if(timer.Second==-1)
                    timer.Second = 59;
                    LCD_Write_Char(10,1,timer.Second % 10 + '0');   
                    LCD_Write_Char(9,1,timer.Second / 10 + '0');
                   }
            }
回复

使用道具 举报

  • TA的每日心情
    难过
    5 天前
  • 签到天数: 85 天

    [LV.6]常住居民II

    46

    主题

    3524

    回帖

    3863

    积分

    二级逆天

    积分
    3863

    终身成就奖社区居民忠实会员社区劳模最爱沙发特殊贡献奖优秀斑竹奖

    QQ
    发表于 2018-4-23 08:16:50 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    34

    主题

    672

    回帖

    0

    积分

    1元学习PADS(3期)

    积分
    0

    终身成就奖

    QQ
    发表于 2018-4-23 08:33:08 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    5552

    主题

    2547

    回帖

    5

    积分

    PADS-180606高级班

    积分
    5

    终身成就奖特殊贡献奖原创先锋奖优秀斑竹奖金点子奖

    QQ
    发表于 2018-4-23 08:52:51 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    31

    主题

    522

    回帖

    1041

    积分

    allegro-180504高级班

    积分
    1041

    终身成就奖

    QQ
    发表于 2018-4-23 08:55:10 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 15:36
  • 签到天数: 117 天

    [LV.6]常住居民II

    82

    主题

    1万

    回帖

    1万

    积分

    三级逆天

    积分
    10230

    社区居民社区劳模原创先锋奖终身成就奖特殊贡献奖优秀斑竹奖

    QQ
    发表于 2018-4-23 08:57:06 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    开心
    3 天前
  • 签到天数: 1 天

    [LV.1]初来乍到

    63

    主题

    1211

    回帖

    2075

    积分

    PADS-180305高级班

    积分
    2075

    终身成就奖优秀斑竹奖

    QQ
    发表于 2018-4-23 08:59:07 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2024-8-7 10:43
  • 签到天数: 1 天

    [LV.1]初来乍到

    0

    主题

    4393

    回帖

    2964

    积分

    二级逆天

    积分
    2964

    终身成就奖特殊贡献奖原创先锋奖优秀斑竹奖

    QQ
    发表于 2018-4-23 09:04:32 | 显示全部楼层
    回复

    使用道具 举报

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

    本版积分规则

    论坛开启做任务可以
    额外奖励金币快速赚
    积分升级了


    Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

    本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

    平平安安
    TOP
    快速回复 返回顶部 返回列表