久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3141|回復(fù): 12
收起左側(cè)

求助:網(wǎng)上找來(lái)的單片機(jī)程序,想添加控制繼電器功能

[復(fù)制鏈接]
ID:816562 發(fā)表于 2023-2-12 19:47 | 顯示全部樓層 |閱讀模式
    網(wǎng)上找來(lái)的程序,基于51單片機(jī)的倒計(jì)時(shí)裝置,定時(shí)時(shí)間到后蜂鳴器鳴叫,倒計(jì)時(shí)結(jié)束,想添加一個(gè)控制繼電器功能,就是計(jì)時(shí)開(kāi)始繼電器吸合,計(jì)時(shí)結(jié)束繼電器釋放,不知道怎么加,請(qǐng)各位大佬幫幫忙,在此謝過(guò)了!
    以下是源碼:
//======================================================================
//
//        Copyright (C) 2020 Jobcrazy   
//        All rights reserved
//
//======================================================================

#include <reg52.h>

//Button registers
sbit Step1m = P3^6;  //按鍵3,+1分鐘
sbit Step10m = P3^5;  //按鍵2,+10分鐘
sbit Step1h = P3^4;  //按鍵1,+1小時(shí)
sbit StepStart = P3^7;  //按鍵4,開(kāi)始計(jì)時(shí)

//Beep register
sbit Beep = P1^6;  //蜂鳴器

//Relay
sbit Relay = P1^7;  //繼電器


//Time Led Dot register
sbit TIME_DOT = P1^5;  //數(shù)碼管":"

//Time Led Segment register
sbit ShuMa_Duan_0 = P1^0;  //數(shù)碼管1
sbit ShuMa_Duan_1 = P1^1;  //數(shù)碼管2
sbit ShuMa_Duan_2 = P1^2;  //數(shù)碼管3
sbit ShuMa_Duan_3 = P1^3;  //數(shù)碼管4

//Initial settings
#define DEFAULT_HOUR 00
#define DEFAULT_MINUTE 00
#define DEFAULT_SECOND 00
volatile int Hour = DEFAULT_HOUR;
volatile int Minute = DEFAULT_MINUTE;
volatile int Second = DEFAULT_SECOND;

//Led Number Definitions
code unsigned char ShuMa_Data[10] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92,0x82,0xF8,0x80,0x90};

//Led Number Indexes
volatile int Shi_Left = 0;
volatile int Ge_Left = 0;
volatile int Shi_Right = 0;
volatile int Ge_Right = 0;

//Delay 1 minisecond
void Delay_1ms( int i )
{      
    for( ; i > 0; --i )
    {
        int j = 0;
        for( ; j < 110; ++j )
        {
                        
        }
    }
}

//Timer Settings
void Init_Timer()
{
    TMOD = 0x11; //Using timer 0 and timer 1
    TH0  = 0xB8;
    TL0  = 0x00;  //Timer0 = 20ms

    TH1  = 0xB8;
    TL1  = 0x00;  //Timer1 = 20ms

    TR0  = 0x01;  //Enable Timer 0
    TR1  = 0x00;
}

//Enable Timer
void Init_Interrupt()
{
    ET0 = 1;
    ET1 = 1;
    EA = 1;
}

//Show Number on the Timer Led
void  ShuMa(unsigned char ShuMa_Wei, unsigned char ShuMa_Index)
{
    P2 = ShuMa_Data[ShuMa_Index];

    if( ShuMa_Wei == 0 )
    {
        ShuMa_Duan_0 = 0;
        ShuMa_Duan_1 = 1;
        ShuMa_Duan_2 = 1;
        ShuMa_Duan_3 = 1;        
    }
    else if( ShuMa_Wei == 1 )
    {
        ShuMa_Duan_0 = 1;
        ShuMa_Duan_1 = 0;
        ShuMa_Duan_2 = 1;
        ShuMa_Duan_3 = 1;
    }
    else if( ShuMa_Wei == 2 )
    {
        ShuMa_Duan_0 = 1;
        ShuMa_Duan_1 = 1;
        ShuMa_Duan_2 = 0;
        ShuMa_Duan_3 = 1;
    }
    else if( ShuMa_Wei == 3 )
    {
        ShuMa_Duan_0 = 1;
        ShuMa_Duan_1 = 1;
        ShuMa_Duan_2 = 1;
        ShuMa_Duan_3 = 0;
    }

    //We must delay 1ms here, or else the Led will not show a correct number
    Delay_1ms(1);
}

//Convert the time to a displayable format
void CalcSecond()
{
    if( 0 < Hour )
    {
        Shi_Left = Hour / 10;
        Ge_Left = Hour % 10;

        Shi_Right = Minute / 10;
        Ge_Right =  Minute % 10;
    }
    else
    {
        Shi_Left = Minute / 10;
        Ge_Left = Minute % 10;

        Shi_Right = Second / 10;
        Ge_Right = Second % 10;
    }        
}

//Counter Timer
void Interrupt_Timer_0() interrupt 1
{
    static int Counter = 0;
    TH0 = 0xB8;
    TL0 = 0x00;

    ++Counter;

    if( 49 < Counter )
    {
        //Ths scope will run 1 time per second
        Counter = 0;
        TIME_DOT = ~TIME_DOT;

        Second--;

        //Let's see how long time is left
        if( Second < 0 )
        {
            Second = 59;
            Minute -= 1;
        }

        if( Minute < 0 )
        {
            if( 0 < Hour )
            {
                Hour--;
                Minute = Second = 59;
            }
            else
            {
                Hour = Minute = Second = 0;
                TR0 = 0; //Disable counter timer
                TR1 = 1; //Enable Beep Timer
            }
        }

        CalcSecond();
    }         
}

//Beep timer
void Interrupt_Timer_1() interrupt 3
{
    static int n = 0, Counter = 0;
    TH1 = 0xB8;
    TL1 = 0x00;

    ++Counter;
        


    if( Counter < 10 )
    {
        Beep = 0;
    }
    else if( Counter < 30 )
    {
        Beep = 1;
    }
    else if( Counter > 49 )
    {
        Counter = 0;
        TIME_DOT = ~TIME_DOT;

        n++;

        if( n >= 5 )
        {
            Hour =         DEFAULT_HOUR;
            Minute = DEFAULT_MINUTE;
            Second = DEFAULT_SECOND;
            n = 0;

            //Disable two timers
            TR0 = 0;
            TR1 = 0;        
        }        
    }
}

//Covert time to be recognizable
void formatTime()
{
    if( Minute >= 60 )
    {
        Minute = 0;
        Hour = Hour + 1;        
    }

    if( Hour >= 99 )
    {
        Hour = 0;
        Minute = 0;
        Second = 0;
    }

    CalcSecond();        
}

void main()
{
    //To avoid long press
    int Pressed = 0;

    //Light Timer Dot
    TIME_DOT = 0;

    //Turn Off Beep
    Beep = 1;
        
                 

        
    //Make P3 output high-level signal
    P3 = 0xFF;

    CalcSecond();

    //Infinite loop
    while(1)
    {
        //Covert time to be recognizable
        formatTime();

        //Show time the led screen
        ShuMa( 0, Shi_Left );                        
        ShuMa( 1, Ge_Left );
        ShuMa( 2, Shi_Right );
        ShuMa( 3, Ge_Right );

        if( 0 == TR0 && 0 == TR1 ) //If timer is not running
        {
            if( 0 == Step1m && 0 == Pressed )
            {
                //If Step1m button is pressed down
                Pressed = 1;
                Minute = Minute + 1;
            }
            else if( 0 == Step10m && 0 == Pressed )
            {
                //If Step10m button is pressed down
                Pressed = 1;
                Minute = Minute + 10;
            }
            else if( 0 == Step1h && 0 == Pressed )
            {
                //If Step1h button is pressed down
                Pressed = 1;
                Hour = Hour + 1;        
            }
            else if( 0 == StepStart && 0 == Pressed )
            {
                //If StepStart button is pressed down
                Pressed = 1;
                if ( 0 != Hour || 0 != Minute || 0 != Second )
                {
                    Init_Timer();
                    Init_Interrupt();
                }                                
            }
            else
            {
                if( 1 == Step1m && 1 == Step10m && 1 == Step1h && 1 == StepStart )
                {
                    //If no button is pressed down
                    Pressed = 0;
                }        
            }
        }        

    }
}

Timer-master.zip

46.24 KB, 下載次數(shù): 6

回復(fù)

使用道具 舉報(bào)

ID:996773 發(fā)表于 2023-2-13 09:14 | 顯示全部樓層
搞匯編的我真心看不懂這c語(yǔ)言,天書一樣,倒計(jì)時(shí)是很簡(jiǎn)單的程序,用c寫怎么這么長(zhǎng)?對(duì)于匯編來(lái)說(shuō),只要在蜂鳴器不工作的時(shí)候加一條clr p0.1或者0.2任意端口拉低就可以用這個(gè)口驅(qū)動(dòng)繼電器了
回復(fù)

使用道具 舉報(bào)

ID:161164 發(fā)表于 2023-2-13 09:30 | 顯示全部樓層
  1. //...
  2. sbit Relay = Px^y;
  3. void main()
  4. {
  5. //...
  6. while(1)
  7. {
  8. //...
  9. Relay = !TR0;
  10. }
  11. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:816562 發(fā)表于 2023-2-13 19:16 來(lái)自手機(jī) | 顯示全部樓層
lkc8210 發(fā)表于 2023-2-13 09:30

萬(wàn)分感謝,我通過(guò)您的代碼問(wèn)題已經(jīng)解決!
IMG_20230213_191446.jpg
IMG_20230213_191358.jpg
回復(fù)

使用道具 舉報(bào)

ID:492633 發(fā)表于 2023-2-13 21:17 來(lái)自手機(jī) | 顯示全部樓層
蜂鳴器是0啟動(dòng)1關(guān)閉,那你可以用npn型三極管直接驅(qū)動(dòng)繼電器,當(dāng)蜂鳴器不響時(shí)繼電器導(dǎo)通,蜂鳴器響時(shí)繼電器關(guān)閉
回復(fù)

使用道具 舉報(bào)

ID:579397 發(fā)表于 2023-2-13 23:05 | 顯示全部樓層
if ( 0 != Hour || 0 != Minute || 0 != Second )
                {
                    Init_Timer();
                    Init_Interrupt();
Relay=~Relay;
                }                              
            }
            else
            {
Relay=~Relay;
                if( 1 == Step1m && 1 == Step10m && 1 == Step1h && 1 == StepStart )
                {
                    //If no button is pressed down
                    Pressed = 0;
                }      
回復(fù)

使用道具 舉報(bào)

ID:579397 發(fā)表于 2023-2-13 23:08 | 顯示全部樓層
a74772b01999c5b485d9e88084d4845.jpg
3b20fd908c0b7e069403e1238f080a5.jpg
我也做了一個(gè),用18650電池的
回復(fù)

使用道具 舉報(bào)

ID:579397 發(fā)表于 2023-2-13 23:08 | 顯示全部樓層
kingzr00 發(fā)表于 2023-2-13 19:16
萬(wàn)分感謝,我通過(guò)您的代碼問(wèn)題已經(jīng)解決!

數(shù)碼管沒(méi)有消隱
回復(fù)

使用道具 舉報(bào)

ID:816562 發(fā)表于 2023-2-14 00:54 來(lái)自手機(jī) | 顯示全部樓層
3wjkdhus 發(fā)表于 2023-2-13 21:17
蜂鳴器是0啟動(dòng)1關(guān)閉,那你可以用npn型三極管直接驅(qū)動(dòng)繼電器,當(dāng)蜂鳴器不響時(shí)繼電器導(dǎo)通,蜂鳴器響時(shí)繼電器 ...

感謝你提供的解決思路,蜂鳴器是計(jì)時(shí)結(jié)束時(shí)響5聲,如果用蜂鳴器的引腳驅(qū)動(dòng)繼電器,當(dāng)計(jì)時(shí)結(jié)束時(shí)就會(huì)重復(fù)開(kāi)關(guān)5次,有可能對(duì)電氣造成傷害,不過(guò)現(xiàn)在問(wèn)題已經(jīng)解決了!
回復(fù)

使用道具 舉報(bào)

ID:816562 發(fā)表于 2023-2-14 00:55 來(lái)自手機(jī) | 顯示全部樓層
hi等你 發(fā)表于 2023-2-13 09:14
搞匯編的我真心看不懂這c語(yǔ)言,天書一樣,倒計(jì)時(shí)是很簡(jiǎn)單的程序,用c寫怎么這么長(zhǎng)?對(duì)于匯編來(lái)說(shuō),只要在蜂 ...

感謝,問(wèn)題已經(jīng)解決了!
回復(fù)

使用道具 舉報(bào)

ID:816562 發(fā)表于 2023-2-16 23:40 來(lái)自手機(jī) | 顯示全部樓層
已經(jīng)組裝好了,達(dá)到預(yù)期效果!
回復(fù)

使用道具 舉報(bào)

ID:816562 發(fā)表于 2023-2-16 23:42 來(lái)自手機(jī) | 顯示全部樓層
完成效果
IMG_20230216_233836.jpg
IMG_20230216_233842.jpg
IMG_20230216_233853_BURST1.jpg
回復(fù)

使用道具 舉報(bào)

ID:816562 發(fā)表于 2023-2-18 15:49 來(lái)自手機(jī) | 顯示全部樓層
405616736 發(fā)表于 2023-2-13 23:05
if ( 0 != Hour || 0 != Minute || 0 != Second )
                {
                    Init_Timer() ...

謝謝!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: xx视频在线 | 99精品免费| 亚洲+变态+欧美+另类+精品 | 成人激情视频免费观看 | 免费h视频 | 久久国产精品网站 | 蜜桃av人人夜夜澡人人爽 | 久久久久无码国产精品一区 | 9999视频 | 天堂免费看片 | 亚洲一区二区国产 | 日韩在线不卡视频 | 精品中文字幕一区二区三区 | 欧美国产视频一区二区 | 国产精品久久777777 | 亚洲综合一区二区三区 | 狠狠综合久久av一区二区小说 | 综合国产 | 精品国产一区二区三区性色 | 欧美日本韩国一区二区三区 | 国产性网| 99国产视频 | 中文字幕一区二区三区四区 | 亚洲欧美一区二区在线观看 | 一二三四av | 亚洲男人网| 日韩精品久久久 | 国产成人免费视频网站高清观看视频 | 精品国产欧美一区二区 | 国产精品久久福利 | 欧美日韩国产精品一区二区 | 国产精品高清一区二区 | 午夜专区 | 亚洲日本中文 | 欧美一区二区二区 | 久久国产区| 精产嫩模国品一二三区 | 久久成人一区 | 色综合久久天天综合网 | 国产毛片久久久久久久久春天 | 午夜极品 |