欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3693|回復: 4
收起左側

求方案STC15F104W延時

[復制鏈接]
ID:214165 發表于 2017-6-24 04:16 | 顯示全部樓層 |閱讀模式
本帖最后由 linglinggou 于 2017-6-24 04:18 編輯

各位大俠,想用STC15F104W做個延時電路,P3.4用于高電平觸發(5V電壓觸發),p3.5用于控制延時8---12秒就行。求代碼,先謝謝啦,
回復

使用道具 舉報

ID:213173 發表于 2017-6-24 08:36 | 顯示全部樓層
//說明:采用P3.4高電平觸發必須外接1K下拉電阻,否則讀不到低電平
//信號。一旦觸發,P3.5輸出低電平,延時期間自鎖,重復觸發無效。
#include "STC15F104E.H"                 //單片機頭文件
#define uint unsigned int                 //宏定義無符號整型數據
#define uchar unsigned char        //宏定義無符號字符型數據
sbit key_IN=P3^4;                                        //輸入端口定義       
sbit OUT=P3^5;                                                //輸出端口定義
uchar Cnt50ms,Cnt1s;                                //中斷計時變量
bit key_sign=0;                                        //按鍵狀態標志

/***********按鍵識別子程序****************/
void keyscan()       
{
        static uchar count=0;        //計數變量                       
        if(key_IN==1)                                //檢測輸入如果為1
        {
                count++;                                        //計數延時消抖
                if(count>=100)                        //100次檢測按鍵如果為0
                {                       
                        count=100;                        //防止溢出
                        if(key_sign==0)        //按鍵狀態標志為0
                        {
                                key_sign=1;                //按鍵狀態標志置1,防止重復響應
                                OUT=0;                        //輸出低電平有效
                                TR0= 1;                        //啟動定時器
                        }
                }
        }
        else count=0;                                //計數變量清0
}
/***********定時器初始化程序****************/
void Timer0Init()                                //50毫秒@11.0592MHz
{
        AUXR &= 0x7F;                                //定時器時鐘12T模式
        TMOD &= 0xF0;                                //設置自動重載模式
        TL0 = 0x00;                                        //設置定時初值
        TH0 = 0x4C;                                        //設置定時初值
        TF0 = 0;                                                //清除TF0標志
//        TR0 = 1;                                                //定時器0開始計時
}
/***************主程序****************/
void main()
{
        Timer0Init();                                //定時器初始化
        EA=1;                                                        //開總中斷
        ET0=1;                                                //開定時器0中斷       
        Cnt50ms=0;                                        //賦初值0
        Cnt1s=0;                                                //賦初值0
        while(1)
        {
                keyscan();                                //按鍵識別子程序
        }
}
/**************中斷服務程序*****************/
void timer0() interrupt        1
{
        Cnt50ms++;                                        //中斷變量Cnt50ms自+1
        if(Cnt50ms>=20)                                //1秒
        {
                Cnt50ms=0;                                //中斷變量Cnt50ms清0
                Cnt1s++;                                        //計數清0       
                if(Cnt1s>=12)                        //1~255秒任意設置
                {
                        Cnt1s=0;                                //中斷變量Cnt1s自清0
                        key_sign=0;                        //按鍵狀態標志清0
                        OUT=1;                                //關閉輸出
                        TR0=0;                                //關閉定時器
                }
        }
}
回復

使用道具 舉報

ID:594633 發表于 2019-8-11 17:31 | 顯示全部樓層
學習了,感謝樓上的分享。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表