wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 440|回復: 0
收起左側

51單片機搶答器程序 之前發過一版但是這版更加的精細 我增加了按鍵和定時器自動走

[復制鏈接]
ID:1152291 發表于 2025-6-25 11:32 | 顯示全部樓層 |閱讀模式
書寫的51程序我之前發過一版但是這版更加的精細 我增加了按鍵和定時器自動走
#include <reg52.h>

//------------------------- 引腳定義 --------------------------//
sbit BEEP = P2^0;        //蜂鳴器控制引腳,高電平有效

sbit LED1 = P2^3;        //LED1,控制引腳,低電平有效
sbit LED2 = P2^2;        //LED2,控制引腳,低電平有效
sbit LED3 = P2^1;        //LED3,控制引腳,低電平有效

//數碼管引腳定義
#define duanPore        P0                //數碼管段控制端口,高電平有效
sbit DIG1 = P2^4;                        //數碼管第1位位選控制端口,低電平有效
sbit DIG2 = P2^5;                        //數碼管第2位位選控制端口,低電平有效
sbit DIG3 = P2^6;                        //數碼管第3位位選控制端口,低電平有效
sbit DIG4 = P2^7;                        //數碼管第4位位選控制端口,低電平有效

//按鍵引腳定義
sbit KEY1 = P1^0;                //1號選手
sbit KEY2 = P1^1;                //2號選手
sbit KEY3 = P1^2;                //3號選手
sbit KEY4 = P1^3;                //4號選手
sbit KEY5 = P1^4;                //5號選手
sbit KEY6 = P1^5;                //6號選手
sbit KEY7 = P3^2;                //主持人鍵
sbit KEY8 = P3^3;                //設置鍵
sbit KEY9 = P1^6;                //增加鍵
sbit KEY10 =P1^7;                //減少鍵
#define uchar unsigned char
#define uint unsigned int



//---------------------- 全局變量定義 --------------------//

//數碼管段碼表,適用于共陰數碼管
unsigned char code tab_duan[18] =
{
        0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,        //0~9
        0x77,0x7c,0x39,0x5e,0x79,0x71,                //A~F
        0x40,0x00                                                        //'-',關閉顯示
};
unsigned char dat_buf[4] = {0,0,0,0};        //顯示數據緩存區,默認上電顯示"  05"
int time = 10;                                //倒計時時間
unsigned char i = 0;
unsigned int count = 0;                //計數緩存變量
bit flag_lock = 1;                         //鍵盤鎖定標志,1:不鎖定,0:鎖定
uint flag=0;



//------------------------------- 函數聲明 ------------------------------------//
void DelayMs(unsigned int ms);                //延時函數,單位:ms
void dig_scan(unsigned char *dat);
unsigned char KeyScan(void);                //獨立按鍵掃描
void InitTimer0(void);                                //定時器0初始化
void alarm(void);                //報警函數
void AnswerTask(void);        //搶答任務




/* 主函數 */
void main(void)
{
        BEEP = 0;                        //上電默認關閉蜂鳴器
        LED1 = 1;
        InitTimer0();                //定時器0初始化        

        while(1)
        {
                if(KeyScan() == 7)        //如果主持人鍵按下,則進行搶答
                {
                        alarm();                //蜂鳴器響一聲
                        AnswerTask();        //進行搶答任務
                }
                if(KEY9 == 0)                //如果按鍵8按下
        {   
                DelayMs(50);        //延時10ms去除按鍵抖動        
                if(KEY9 == 0)        //再確認一次按鍵按下,表示到這按鍵已經穩定了
        time++;
        if(time > 260)//只顯示0~9,故到9 就歸零
        {
                time =0;
        }
        while(KEY9 == 0);//保持對K1的判斷,松開才執行下一句
        dat_buf[1] = time/ 100 % 10;
        dat_buf[2] = time / 10;                //取出倒計時的十位數
        
        dig_scan(dat_buf);        //測試數碼管顯示                                
        }
        if(KEY10 == 0)                //如果按鍵8按下
        {   
                DelayMs(50);        //延時10ms去除按鍵抖動        
                if(KEY10 == 0)                        //再確認一次按鍵按下,表示到這按鍵已經穩定了
                while(KEY10 == 0);
                          time--;
                                if(time <0)//讓0~9不論是加還是減都能循環
                                {
                                        time =99;
                                }
        }
            dat_buf[1] = time/ 100 % 10;;                //取出倒計時的十位數
                dat_buf[2] = time / 10;                //取出倒計時的十位數
               
                dig_scan(dat_buf);        //測試數碼管顯示        
        }
}

/* 延時函數,單位:ms */
void DelayMs(unsigned int ms)
{
        unsigned char a,b,c;

        while(--ms)
        {
            for(c=1;c>0;c--)
                for(b=142;b>0;b--)
                    for(a=2;a>0;a--);        
        }
}

/* 數碼管顯示掃描 */
void dig_scan(unsigned char *dat)
{
        /* 動態掃描處理 */
        switch(i)
        {
                case 0:
                {
                        duanPore = tab_duan[dat[0]];        //顯示第1位數碼管內容        
                        DIG1 = 0;
                        break;
                }
                case 1:
                {
                        duanPore = tab_duan[dat[1]];        //顯示第2位數碼管內容        
                        DIG2 = 0;                                                //選通第2位數碼管
                        break;
                }
                case 2:
                {
                        duanPore = tab_duan[dat[2]];        //顯示第3位數碼管內容        
                        DIG3 = 0;                                                //選通第3位數碼管
                        break;
                }
                case 3:
                {
                        duanPore = tab_duan[dat[3]];        //顯示第4位數碼管內容        
                        DIG4 = 0;                                                //選通第4位數碼管
                        break;
                }
                default: break;        
        }
        DelayMs(5);                //掃描延時10ms,根據實際情況適當修改改延時時間
        DIG1 = 1;                        //消隱
        DIG2 = 1;
        DIG3 = 1;
        DIG4 = 1;
        ++i;                                //掃描變量循環
        if(i > 3)
                i = 0;        
}

/* 獨立按鍵掃描 */
unsigned char KeyScan(void)
{
        if(KEY1 == 0)                //如果按鍵1按下
        {
                DelayMs(10);        //延時10ms去除按鍵抖動        
                if(KEY1 == 0)        //再確認一次按鍵按下,表示到這按鍵已經穩定了
                        return 1;        //輸出按鍵值1
        }
        if(KEY2 == 0)                //如果按鍵2按下
        {
                DelayMs(10);        //延時10ms去除按鍵抖動        
                if(KEY2 == 0)        //再確認一次按鍵按下,表示到這按鍵已經穩定了
                        return 2;        //輸出按鍵值2
        }
        if(KEY3 == 0)                //如果按鍵3按下
        {
                DelayMs(10);        //延時10ms去除按鍵抖動        
                if(KEY3 == 0)        //再確認一次按鍵按下,表示到這按鍵已經穩定了
                        return 3;        //輸出按鍵值3
        }
        if(KEY4 == 0)                //如果按鍵4按下
        {
                DelayMs(10);        //延時10ms去除按鍵抖動        
                if(KEY4 == 0)        //再確認一次按鍵按下,表示到這按鍵已經穩定了
                        return 4;        //輸出按鍵值4
        }
        if(KEY5 == 0)                //如果按鍵5按下
        {
                DelayMs(10);        //延時10ms去除按鍵抖動        
                if(KEY5 == 0)        //再確認一次按鍵按下,表示到這按鍵已經穩定了
                        return 5;        //輸出按鍵值5
        }
        if(KEY6 == 0)                //如果按鍵6按下
        {
                DelayMs(10);        //延時10ms去除按鍵抖動        
                if(KEY6 == 0)        //再確認一次按鍵按下,表示到這按鍵已經穩定了
                        return 6;        //輸出按鍵值6
        }
        if(KEY7 == 0)                //如果按鍵7按下
        {
                DelayMs(10);        //延時10ms去除按鍵抖動        
                if(KEY7 == 0)        //再確認一次按鍵按下,表示到這按鍵已經穩定了
                        return 7;        //輸出按鍵值7
        }
        if(KEY8 == 0)                //如果按鍵8按下
        {
                DelayMs(10);        //延時10ms去除按鍵抖動        
                if(KEY8 == 0)        //再確認一次按鍵按下,表示到這按鍵已經穩定了
                        return 8;        //輸出按鍵值8
        }
        //輸出按鍵值8
        return 0;                        //無按鍵按下輸出0
}

/* 定時器0初始化 */
void InitTimer0(void)
{
    TMOD = 0x01;        //配置定時器0為工作模式1,16位定時器
    TH0 = (65536 - 10000) / 256;        //定時10ms
    TL0 = (65536 - 10000) % 256;
    EA = 1;                        //打開總中斷
    ET0 = 1;                //打開定時器0中斷
    TR0 = 0;                //上電默認關閉定時器0
}
/* 定時器0中斷服務函數,10ms進一次中斷 */
void Timer0Interrupt(void) interrupt 1
{
    TH0 = (65536 - 10000) / 256;        //定時10ms,重新裝載計數值
    TL0 = (65536 - 10000) % 256;
           
        ++count;
        if(count > 100)                                 //1s時間計算:10ms * 100 = 1s
        {
                count = 0;                                        //計數值清零
                --time;                                                //倒計時時間減一次
                if(time <= 0)                                //如果倒計時結束,則關閉定時器0,停止倒計時,并聲光報警和鎖定鍵盤
                {
                        TR0 = 0;                                //關閉定時器0
                        BEEP = 1;                                //聲光報警
                        LED1 = 0;
                        flag_lock = 0;                        //鎖定鍵盤                                
                }                                
        }
        
}
/* 報警函數 */
void alarm(void)
{
        BEEP = 1;                //蜂鳴器響一下
        DelayMs(300);        //延時300ms
        BEEP = 0;
}
/* 實現搶答任務 */
void AnswerTask(void)
{
        unsigned char key_val;                //按鍵值緩存

        TR0 = 1;                                        //啟動定時器0,開始倒計時
        while(1)
        {
                if(flag_lock == 1)
                {
                        key_val = KeyScan();                //獲取按鍵值
                        switch(key_val)
                        {
                                case 1:
                                {
                                        dat_buf[0] = key_val;        //第1位數碼管顯示1號
                                                        //顯示'-'
                                        time = 200;                                //倒計時20s,選手回答時間
                                        alarm();                                //蜂鳴器響一下
                                        flag_lock = 0;                        //鎖定鍵盤
                                        break;
                                }
                                case 2:
                                {
                                        dat_buf[0] = key_val;        //第2位數碼管顯示2號
                                                        //顯示'-'
                                        time = 20;                                //倒計時20s,選手回答時間
                                        alarm();                                //蜂鳴器響一下
                                        flag_lock = 0;
                                        break;
                                }
                                case 3:
                                {
                                        dat_buf[0] = key_val;        //第3位數碼管顯示3號
                                                        //顯示'-'
                                        time = 20;
                                        alarm();                                //蜂鳴器響一下
                                        flag_lock = 0;
                                        break;
                                }
                                case 4:
                                {
                                        dat_buf[0] = key_val;        //第4位數碼管顯示4號
                                                //顯示'-'
                                        time = 20;
                                        alarm();                                //蜂鳴器響一下
                                        flag_lock = 0;
                                        break;
                                }
                                case 5:
                                {
                                        dat_buf[0] = key_val;        //第5位數碼管顯示5號
                                                //顯示'-'
                                        time = 20;
                                        alarm();                                //蜂鳴器響一下
                                        flag_lock = 0;
                                        break;
                                }
                                case 6:
                                {
                                        dat_buf[0] = key_val;        //第6位數碼管顯示6號
                                       
                                        time = 20;
                                        alarm();                                //蜂鳴器響一下
                                        flag_lock = 0;
                                        break;
                                }
                                default: break;
                        }
                }
                   dat_buf[1] = time / 100 % 10;                //取出倒計時的十位數
                dat_buf[2] = time / 10;                //取出倒計時的十位數
                dig_scan(dat_buf);                        //數碼管顯示內容
        }
}









回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
欧美激情精品久久久久久小说| 一级黄色录像毛片| 日韩精品久久一区二区三区| 亚洲国产成人在线视频| 欧美日韩国产天堂| 亚洲私人影院| 国产99re66在线视频| www.九九热.com| 黄色片免费观看| 操人真爽免费视频| 日本韩国一区| 91这里只有精品| 午夜在线小视频| 麻豆传媒在线完整视频| 污污在线观看| 欧美中文字幕精在线不卡| 日韩成人影音| 欧美7777| 国产一区二区三区视频在线| 国产成人澳门| 国内精品久久久久久久影视简单| 日本a口亚洲| 激情欧美一区| 美女网站色91| 成人白浆超碰人人人人| 91丨porny丨在线| 最好看的中文字幕久久| 色综合天天综合色综合av| 欧美男人的天堂一二区| 欧美一三区三区四区免费在线看| 精品久久久网站| 中文字幕日本精品| 久久久久久久久久久人体| 国产精品免费视频久久久| 成人蜜桃视频| 一区二区三区av| 亚洲熟妇无码另类久久久| 超碰成人在线播放| 亚洲av成人无码久久精品 | 91亚洲精品久久久蜜桃网站| xnxx国产精品| 欧美在线综合视频| 国产丝袜精品视频| 欧美精品18videosex性欧美| 国产精品区一区二区三在线播放| 色999五月色| 色婷婷一区二区三区在线观看| 性久久久久久久久久| 青青青在线视频| 国产精品老女人| 在线视频 中文字幕| 男人插入女人视频| 四虎国产精品成人免费4hu| 国产在线一二三| 欧美黄色三级| 亚洲一级高清| 亚洲精品写真福利| 欧美精品在线观看播放| 97av视频在线| 欧美日本韩国国产| 怡红院av亚洲一区二区三区h| 免费欧美一级片| 日韩在线视频网址| www.日日夜夜| 免费性色视频| av在线电影观看| 欧洲亚洲精品久久久久| 四季av一区二区凹凸精品| 麻豆精品久久精品色综合| 亚洲素人一区二区| 亚洲成人av片| 91国产一区在线| 日本免费黄色小视频 | 一级片免费视频| 国产精品扒开做爽爽爽的视频 | 精品国产亚洲一区二区三区| 最新真实国产在线视频| 亚洲高清999| 99精品免费| 国产欧美日产一区| 日韩欧美在线网站| 97在线看免费观看视频在线观看| 国产免费一区二区| 李丽珍裸体午夜理伦片| 人妻 日韩精品 中文字幕| 中文字幕+乱码+中文字幕| 97高清视频| 亚洲女同志freevdieo| 色天天久久综合婷婷女18| 成人动漫中文字幕| 精品一区二区三区四区| 欧美日韩一区二区视频在线观看| 波多野结衣av在线观看| 97国产精品久久久| yy111111少妇嫩草影院| 成人不卡视频| av不卡在线| 日本韩国欧美一区二区三区| 日本特级黄色大片| 欧美自拍资源在线| 国产欧美一区二区三区不卡高清| 国产精品旅馆在线| 99在线热播| 亚洲国产午夜伦理片大全在线观看网站| 91精品一区二区| 国产乱肥老妇国产一区二 | 青青色在线视频| av大片在线播放| 色吧亚洲日本| 国产精品69xx| 全球最大av网站久久| 97一区二区国产好的精华液| 91精品亚洲一区在线观看| 中文字幕av一区二区三区佐山爱| 精品福利在线| 四虎国产精品成人免费影视| 蜜桃一区av| 国内视频在线精品| 亚洲成av人片一区二区密柚| 欧美少妇xxxx| 久久中文字幕av| 亚洲少妇一区| 国产精品又粗又长| 日韩黄色中文字幕| 日韩在线一区二区视频| 国产一区二区三区久久| 成人免费黄色在线| 久久色成人在线| 国产日韩欧美精品电影三级在线| 国产午夜亚洲精品不卡| 第一福利永久视频精品| 日韩欧美在线免费| 色婷婷激情综合| 亚洲免费小视频| 久久久国产视频| 欧美国产欧美亚洲国产日韩mv天天看完整 | 精品国产欧美一区二区五十路| 一区二区三区久久精品| 日韩中文字幕不卡视频| www.亚洲男人天堂| 国产精品自拍小视频| 日韩国产欧美精品| 特级西西444www| 国产在线观看免费av| www.日本精品| 经典三级一区二区三区视频| 特级黄国产片一级视频播放 | 国产一级淫片a视频免费观看| 国产18精品乱码免费看| 五月婷婷丁香网| 亚洲成人国产综合| 2021最新国产精品一区| 另类图片亚洲色图| 男女视频在线| 久久伊人国产| 欧美一区在线看| 日本欧美在线看| 不卡的av中国片| 一本色道久久综合亚洲91| 色偷偷偷亚洲综合网另类| 国产精品久久国产精品| 一区二区三区网址| 性欧美精品中出| 国产av无码专区亚洲av| 一区二区不卡久久精品| 久草在线在线| 国产在线xxx| 久久中文视频| 国产精品免费丝袜| 欧美日韩高清影院| 欧美有码在线视频| 国产九色精品| 亚洲自拍第三页| 真实的国产乱xxxx在线91| 男女视频网站| 国产精品久久一区二区三区不卡| 日日夜夜天天综合入口| 国产欧美一区二区精品久久久| 国产在线播放一区二区三区| 中文在线免费一区三区高中清不卡| 精品久久久久久久久中文字幕| 91精品国产乱码久久蜜臀| 日本高清视频精品| 日本一区免费观看| ass精品国模裸体欣赏pics| 人成网站在线观看| 国产精品伦理在线| 日韩av电影国产| 无套内谢大学处破女www小说| 一代武则天秘史| 欧美日韩国产精品一区二区不卡中文| 一本色道久久综合狠狠躁篇怎么玩 | 亚洲精品大尺度| 国产手机免费视频| 人妻一区二区三区| av成人男女| 欧美一级久久久久久久大片| wwww.国产| 热国产热中文视频二区| 欧美黄在线观看| 中文字幕av一区中文字幕天堂| 三叶草欧洲码在线| 男人捅女人免费视频| 欧美熟乱15p| 亚洲精品日韩丝袜精品| 一区二区免费在线观看视频| 成人免费网址在线| 天堂久久一区二区三区| 亚洲午夜激情免费视频 | 色琪琪丁香婷婷综合久久| 久久66热re国产| 久久国产精品影视| 成人免费视频网站| 国产探花在线免费观看| 天堂资源最新在线| 日本女人一区二区三区| 国产精品久久久久久久久免费看 | 欧洲精品久久久久毛片完整版| 欧美亚州韩日在线看免费版国语版| 先锋影音亚洲资源| 亚洲AV无码国产精品午夜字幕| 成人福利视频| 日本韩国欧美国产| 91欧美视频在线| 免费毛片a线观看| 一区二区电影在线观看| 亚洲精品视频免费| 青青草自拍偷拍| 国产美女视频一区二区三区| 国产精品久久久久永久免费观看 | 一区二区网站| 91久久精品一区二区| 一本久道中文无码字幕av| 国内自拍九色| 国产一区美女在线| 久久伊人资源站| www.黄色av| 欧美hentaied在线观看| 欧美精品xxx| 中文字幕码精品视频网站| 日本国产亚洲| 精品sm捆绑视频| 男人天堂资源网| 国产精品久久乐| 欧美色图一区二区三区| 别急慢慢来1978如如2| 一级在线观看| eeuss鲁片一区二区三区在线观看 eeuss影院一区二区三区 | 精品亚洲欧美日韩| 亚洲第一成人av| 999精品一区| 日韩av电影在线播放| 亚洲黄色片视频| 伊人精品成人久久综合软件| 91精品久久久久久久久久| 一区二区的视频| 欧美色女视频| 热99精品里视频精品| 人妻一区二区三区免费| 99人久久精品视频最新地址| 亚洲wwwav| 精品黑人一区二区三区在线观看 | 极品在线视频| 亚洲3atv精品一区二区三区| 久久久无码中文字幕久...| 又黄又免费的网站| 国产精品视频第一区| 国产特级淫片高清视频| 小小水蜜桃在线观看| 午夜久久电影网| 国产精品入口麻豆| 久久野战av| 中文字幕日韩欧美在线视频| 无码免费一区二区三区| 77成人影视| 久久6精品影院| 天天操夜夜操视频| 日韩成人在线看| 久久精品99久久久久久久久 | 国产不卡一二三区| 一区二区三区视频免费| 国产尤物在线视频| 91综合视频| 亚洲一区二区三区在线视频 | yy111111少妇影院日韩夜片| 国产精品综合久久久久| 亚洲欧美网站| 国产在线播放不卡| 欧美黑人巨大xxxx猛交| 国产亚洲精品久久久久婷婷瑜伽| 国产一区免费| 国产真实伦在线观看| 99久精品国产| jizzjizzxxxx| 精品欧美不卡一区二区在线观看| 日韩欧美在线视频免费观看| 波多野吉衣中文字幕| 国模套图日韩精品一区二区| 亚洲剧情一区二区| 亚洲影院一区二区三区| 亚洲欧美高清| 8x8x华人在线| 国产原厂视频在线观看| 亚洲精品第一页| 国产精品国产精品国产专区| 日韩国产在线| 99在线观看| 欧美承认网站| 欧美亚洲综合久久| av免费看网址| 香蕉视频在线免费看| 欧美成人欧美edvon| a天堂中文字幕| 荡女精品导航| 91精品久久久久久久久久| 成人三级av| 色综合久久久久| 久久一二三四区| 夜夜春成人影院| 97高清免费视频| 国产一区你懂的| 成人深夜视频在线观看| 国产又黄又猛又粗又爽的视频| 欧美私密网站| 久久99热精品| 国内精品久久久久久久久蜜桃| 国产精品女同一区二区三区| 国产av自拍一区| 日韩精品诱惑一区?区三区| 久草一区二区| 另类图片亚洲色图| 在线日韩一区二区| 国产视频1区2区| 美女在线观看视频一区二区| 日批视频在线免费看| 成人免费网址| 亚洲成年人在线| 亚洲高清视频网站| 久久综合资源网| 欧美色图亚洲激情| 久久综合国产| 综合久久国产| jyzzz在线观看视频| 亚洲丝袜一区在线| 国产又粗又猛又爽又黄91| 国产麻豆91精品| 99色精品视频| 欧美激情不卡| 91免费高清视频| 日韩精品视频无播放器在线看| 亚洲电影免费观看高清| 神马午夜一区二区| 国产91精品精华液一区二区三区| 999久久欧美人妻一区二区| av在线之家电影网站| 国产一区二区美女视频| 欧美另类bbbxxxxx另类| 亚洲一区二区三区四区五区黄| 精品少妇一区二区三区免费观| 欧美少妇xxxx| 91国在线高清视频| 日本黄色一区| 91在线播放视频| 超碰在线中文| 欧美男男青年gay1069videost| 91尤物国产福利在线观看| 97久久超碰国产精品电影| 亚洲精品乱码久久久久久久久久久久| 你懂的网址国产 欧美| 国产深夜男女无套内射| 先锋在线亚洲| 精品国产精品一区二区夜夜嗨| 免费男女羞羞的视频网站中文子暮| 亚洲精品国产高清久久伦理二区| 在线小视频你懂的| 伊人精品视频| 日本老熟妇毛茸茸| 亚洲精品白浆高清| 中国老女人av| f2c人成在线观看免费视频| 九九精品在线播放| 黄网站免费入口| 亚洲欧美资源在线| 九九热视频免费观看| 亚洲国产另类 国产精品国产免费| 欧美娇小性xxxx| 欧美日韩亚洲综合在线 | 青青久精品观看视频最新| 精品女同一区二区三区在线播放 | 97国产成人高清在线观看| 日韩a∨精品日韩在线观看| 久久1电影院| 国产a级黄色大片| 2020最新国产精品| 三级在线免费观看| 人人精品亚洲| 蜜桃狠狠色伊人亚洲综合网站| av中文字幕电影在线看| 999视频在线免费观看| 国产福利在线免费观看|