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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2935|回復: 3
打印 上一主題 下一主題
收起左側

求助大神一個用兩個按鍵控制的程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:202586 發表于 2017-12-12 06:50 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
程序是這樣控制的兩個按鍵,按第一個按鍵選擇1~9顯示在一位數碼管上,也就是加1,單位為加一秒,選擇幾就是想定時幾秒。選擇好定時秒數后按第二個按鍵就是啟動選擇的定時秒數,例如:第一個按鍵選擇顯示6,按第二個按鍵后打開輸出IO口定時6秒關閉,只要不按第一個按鍵選擇顯示秒數,按第二個按鍵可以一直循環執行選擇的定時秒數,求各位大神賜教,謝謝
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:213173 發表于 2017-12-13 09:57 | 只看該作者
不知道你用的什么MCU和外圍電路,只能按51給你寫了程序,端口定義根據實際電路自行修改。
#include <AT89X52.H>
#define uchar unsigned char
#define uint unsigned int      
sbit OUT=P1^0;                                //輸出
sbit key1=P3^4;                        //鍵1
sbit key2=P3^5;                        //鍵2
sbit dula=P2^6;                        //段選
sbit wela=P2^7;                        //位選
uchar code table[]={                //共陰數碼管0~f
        0x3f,0x06,0x5b,0x4f,
        0x66,0x6d,0x7d,0x07,
        0x7f,0x6f,0x77,0x7c,
        0x39,0x5e,0x79,0x71};
uchar Cnt50ms=0,Cnt1s=0;
uchar Time=0;
bit   flag=0;

void Timer0Init();
void keycan();
void display();
void Countdown();

void main()
{
        Timer0Init();        //初始化定時器
        while(1)
        {
                keycan();        //按鍵掃描
                display();        //顯示
                Countdown();//倒計時
        }
}

void Timer0Init()        //50毫秒@12.000MHz
{
        TMOD= 0x01;                //設置定時器模式
        TL0 = 0xB0;                //設置定時初值
        TH0 = 0x3C;                //設置定時初值
//        TF0 = 0;                        //清除TF0標志
//        TR0 = 1;                        //定時器0開始計時
        EA=1;                                //開總中斷
        ET0=1;                         //開T0中斷
}

void keycan()
{
        static bit key1_sign=0,key2_sign=0;        //按鍵自鎖標志
        static uchar count1=0,count2=0;                //消抖計數變量                       

        if(!key1)                //檢測按鍵1如果按下為0
        {
                if((key1_sign==0)&&(flag==0))        //按鍵自鎖標志為0
                {
                        count1++;                                        //消抖計數
                        if(count1>=250)                        //消抖延時
                        {
                                key1_sign=1;                        //按鍵自鎖標志置1
                                Cnt50ms=0;
                                Time++;                                        //定時時間變量+1
                                if(Time>=10)
                                        Time=0;
                        }
                }
        }
        else
        {
                key1_sign=0;                                //按鍵自鎖標志清0
                count1=0;                                        //消抖計數清0
        }

        if(!key2)                                        //檢測按鍵2如果按下為0
        {
                if(key2_sign==0)                //按鍵自鎖標志為0       
                {
                        count2++;                                        //消抖計數
                        if(count2>=250)                        //消抖延時
                        {
                                key2_sign=1;                //按鍵自鎖標志置1
                                Cnt1s=Time;                        //傳遞定時時間
                                if(Cnt1s>0)
                                {
                                        OUT = 0;                        //低電平輸出
                                        flag= 1;                        //禁止key1操作
                                        TR0 = 1;                        //開啟定時器
                                }
                        }
                }
        }       
        else
        {
                key2_sign=0;                                //按鍵自鎖標志清0
                count2=0;                                        //消抖計數清0
        }
}

void display()
{
        if(flag==0)
                P0=table[Time];                //顯示定時時間
        else
                P0=table[Cnt1s]|0x80;//加點表示倒計時工作中
        dula=1;
        dula=0;
       
        P0=0x7e;        //6位數碼管只使用第1位
        wela=1;
        wela=0;
}      

void Countdown()                //倒計時
{
        if(flag==1)
        {       
                if(Cnt1s==0)
                {
                        TR0 = 0;                //關閉定時器
                        OUT = 1;                //停止輸出
                        flag= 0;                //允許key1操作
                }
        }
}

void Timer0() interrupt 1
{
        TL0 = 0xB0;                //設置定時重裝值
        TH0 = 0x3C;                //設置定時重裝值
        Cnt50ms++;
        if(Cnt50ms>=20)//1秒
        {
                Cnt50ms=0;
                Cnt1s--;
        }
}
回復

使用道具 舉報

板凳
ID:260579 發表于 2017-12-13 11:51 | 只看該作者
向大神學習了
回復

使用道具 舉報

地板
ID:202586 發表于 2017-12-24 08:23 | 只看該作者
wulin 發表于 2017-12-13 09:57
不知道你用的什么MCU和外圍電路,只能按51給你寫了程序,端口定義根據實際電路自行修改。
#include
#def ...

謝謝您非常感謝,我會好好學習的
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品一区二区三区丝袜 | 激情视频网站 | 亚洲 欧美 另类 日韩 | 高清av电影| 奇米四色影视 | 亚洲一区中文字幕 | 亚洲国产成人精品女人 | 国产精品性做久久久久久 | 亚洲精品久久久一区二区三区 | av高清 | 华丽的挑战在线观看 | 粉嫩一区二区三区性色av | 在线播放亚洲 | 久久久毛片| 午夜影院视频 | 成人免费视频网站 | 伊人免费在线观看 | 国产精品久久久久久久久久东京 | 成年人在线视频 | 亚洲风情在线观看 | 久久久国产一区二区三区 | 日韩精品一区二区三区久久 | 日本不卡一区二区三区 | 成人在线播放网站 | 亚洲在线成人 | 久久综合九色综合欧美狠狠 | 网色| 91看片免费版 | 欧美在线视频a | 精品视频一区二区 | 黄色欧美在线 | 91精品欧美久久久久久久 | 国产精品成人国产乱 | 国产在线第一页 | 精品成人 | 黄片毛片免费观看 | 成年人在线电影 | 亚洲欧美激情视频 | 日韩在线电影 | 日本视频在线播放 | 亚洲天堂一区 |