4 7
您的位置: 电子制作DIY -> 单片机 -> 51单片机 -> AT89C2051单片机DIY定时通断插座
本帖共有578个阅读者
发表帖子 发表投票 回复主题
AT89C2051单片机DIY定时通断插座
尊贵身份标志
灰色小精灵(VIP会员)
灰色小精灵
头衔:版面管理
帮派:无帮无派
帖数:26
金钱:346
积分:77
注册时间:2020/12/28
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
AT89C2051单片机DIY定时通断插座
学习了一段时间单片机,用网上卖的数字时钟电路改了一下,做了一个可以定时通断的插座,用于手机充电等,非常方便。最大定时99小时59分,最小定时1分钟。程序写的不好,实用就行。
源码:
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint  unsigned int

sbit key1=P3^0;
sbit key2=P3^6;
sbit key3=P3^5;
sbit JDQ=P3^7;
sbit we1=P3^1;
sbit we2=P3^2;
sbit we3=P3^3;
sbit we4=P3^4;
bit dian;
uchar code table[]={ 0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};
void keyscan();
void init();
uchar num,fen,miao,shi;
void delay(uint z)
        {
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
        }
void display(shi,fen)//dis)
{  
        we1=0;
        P1=table[shi/10]|dian;  //时十位      
        delay(5);
        P1=0xff;
        we1=1;
        we2=0;
        P1=table[shi%10]|dian;  //时个位      
        delay(5);
        P1=0xff;
        we2=1;
        we3=0;
        P1=table[fen/10]|dian;//分十位      
        delay(5);
        P1=0xff;
        we3=1;
        we4=0;
        P1=table[fen%10]|dian;  //分个位      
        delay(5);
        P1=0xff;
        we4=1;      
}
void display1(fen,miao)//dis)
{              
        we1=0;
        P1=table[fen/10]|dian;//时十位      
        delay(5);
        P1=0xff;
        we1=1;
        we2=0;
        P1=table[fen%10]|dian;//时个位      
        delay(5);
        P1=0xff;
        we2=1;
        we3=0;
        P1=table[miao/10]|dian;//分十位      
        delay(5);
        P1=0xff;
        we3=1;
        we4=0;
        P1=table[miao%10]|dian;//分个位      
        delay(5);
        P1=0xff;
        we4=1;      
}
void main()
{      
        init();
        while(1)
        {      
                keyscan();
                if(shi==0)
                        display1(fen,miao);
                else              
                        display(shi,fen);      
        }
}
void init()
        {              
        TMOD=0x01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        EA=1;
        ET0=1;
        TR0=0;
        JDQ=1;
        }
void keyscan()
{
        if(key1==0)
        {
                delay(10);
                if(key1==0)
                {
                        miao=0;
                        fen=fen+1;//分加一
                        if(fen==60)
                                fen=0;
                        while(!key1);
                }
        }
        if(key2==0)
                {
                        delay(10);
                        if(key2==0)
                        {
                                shi=shi+1;
                                if(shi==100)
                                        shi=0;
                                while(!key2);
                        }
                }
        if(key3==0)
                {
                        delay(10);
                        if(key3==0)
                        {
                                TR0=1;
                                JDQ=0;
                                while(!key3);
                        }
                }
              
        }
void T0_time() interrupt 1
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        num++;
        if(num%10==0)
                dian=~dian;              
        if(num==20)
        {
                num=0;
                miao--;
                if(miao==0xff)
                {
                        miao=59;
                        fen--;
                        if(fen==0xff)
                        {                                                      
                                fen=59;                      
                                shi--;
                        }
                }
        }
        if(shi==0&&fen==0&&miao==0)
        {
                TR0=0;
                JDQ=1;
                we1=we2=we3=we4=1;
                P1=0x02;
                we1=we2=we3=we4=0;
                while(1);                              
        }      
}


「该帖子被 灰色小精灵 在 2020/12/30 18:42:29 编辑过」

我的地盘我做主
等级:VIP会员 参考IP地址:*.*.*.*
2020/12/30 18:08:28
Copyright © 2011 电子制作DIY. All rights reserved.电子制作DIY7255 Call, 1 Queries, Processed in 156.250 millisecond(2),