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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1824|回復(fù): 9
打印 上一主題 下一主題
收起左側(cè)

有沒有大佬幫忙指點(diǎn)一下,單片機(jī)四人搶答器 這個程序跑的很奇怪

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:999824 發(fā)表于 2022-5-7 20:38 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
要求:
一、 任務(wù)描述
設(shè)計一種4人搶答器。控制要求如下:
(1)設(shè)主持人1名,選手4名。
(2)1、2、3、4號搶答臺上均有藍(lán)色指示燈、搶答按鈕。
(3)主持人臺上有綠色開始指示燈、紅色犯規(guī)指示燈、黃色報警燈,開始按鈕和復(fù)位按鈕。開始前,所有燈全滅。
(4)主持人按開始按鈕后,開始指示燈亮,并開始9S倒計時,以數(shù)碼管顯示,選手9S內(nèi)可以按搶答按鈕搶答,最先按搶答按鈕的選手指示燈亮,
后按搶答按鈕的選手指示燈不亮,9S內(nèi)如果無人搶答,黃色報警燈點(diǎn)亮。

(5)若主持人還未按開始按鈕,就有選手按了搶答按鈕,主持人臺上的犯規(guī)指示燈點(diǎn)亮(閃爍),同時所有犯規(guī)選手指示燈點(diǎn)亮(閃爍),(閃爍頻率均為1HZ)。
(6)任何情況下,主持人按復(fù)位按鈕都可以熄滅所有指示燈。
程序如下:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char

uchar code q[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//倒計時數(shù)組

uchar flag;
uchar count=0;  //中斷進(jìn)入次數(shù)
uchar num=9;  //倒計時

sbit kai=P3^2;//主持人開始 set
sbit fu=P3^3;     //reset

sbit b1=P1^6;  //主持人開始燈
sbit b2=P1^5;  //犯規(guī)燈  
sbit b3=P1^4;  //報警燈

sbit a=P2^0;//選手按鍵        KEY_1
sbit b=P2^1;   
sbit c=P2^2;
sbit d=P2^3;

sbit a1=P1^0;//選手燈  LED_1
sbit a2=P1^1;
sbit a3=P1^2;
sbit a4=P1^3;

void delay10()//10ms
{
        uchar i,k;
        for(i=20; i>0; i--)
                for(k=250; k>0; k--);
}

void delay1s()                //1s
{
        unsigned char i, j, k;

        _nop_();
        _nop_();
        i = 46;
        j = 153;
        k = 245;
        do
        {
                do
                {
                        while (--k);
                }
                while (--j);
        }
        while (--i);
}

void init()  //初始化
{
        TMOD=0x01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        ET0=1;         //定時器T0中斷啟動
        EA=1;         //總中斷啟動
        EX0=1;         //外部中斷啟動
        IT0=1;         //下降沿啟動

}

void daojishi()//主持人開始后倒計時
{
        while(kai==0)
        {
                TR0=1;
                P0=q[num];
                delay10();
                P0=0x01;  //0xff
        }
}

void qiangda()//選手搶答
{
        if(a==0)        //搶答
        {
                delay10();        //去抖
                if(a==0)        //判斷是否進(jìn)入搶答狀態(tài)
                {
                        if(P2==0x01)  //別人搶答狀態(tài)
                        {
                                a1=1;
                                a2=0;
                                a3=0;
                                a4=0;
                        }
                }
        }
        if(b==0)        //搶答
        {
                delay10();        //去抖
                if(b==0)        //判斷是否進(jìn)入搶答狀態(tài)
                {
                        if(P2==0x02)  //別人搶答狀態(tài)
                        {
                                a2=1;
                                a1=0;
                                a3=0;
                                a4=0;
                        }
                }
        }
        if(c==0)        //搶答
        {
                delay10();        //去抖
                if(c==0)        //判斷是否進(jìn)入搶答狀態(tài)
                {
                        if(P2==0x03)  //別人搶答狀態(tài)
                        {
                                a3=1;
                                a2=0;
                                a1=0;
                                a4=0;
                        }
                }
        }
        if(d==0)        //搶答
        {
                delay10();        //去抖
                if(d==0)        //判斷是否進(jìn)入搶答狀態(tài)
                {
                        if(P2==0x04)  //別人搶答狀態(tài)
                        {
                                a4=1;
                                a2=0;
                                a3=0;
                                a1=0;
                        }
                }
        }
}
void hong()//紅燈亮
{
        qiangda();
        if(TR0==1)
        {
                b2=1;
                delay1s();
                b2=0;
                while(TR0==1);
        }
}
void huang()//黃燈亮
{
        while(P0==0xff)
        {
                b3=1;
        }
}
void fuwei()//復(fù)位按鈕
{
        if(fu==0)
        {
        /*
                TMOD=0x01;



               
                TH0=(65536-50000)/256;
                TL0=(65536-50000)%256;
                ET0=1;
                EA=1;
                EX0=1;
                IT0=1;
        */
            TR0=0;
                num=9;
                P1=0X00;
                P0=0;
                P2=0xff;
        }
}
void main()
{
        P1=0X00;
        init();
        while(1)
        {
                daojishi();
                qiangda();
                hong();
                huang();
                fuwei();

        }
}
void time0() interrupt 1
{
        TH0=(65536-50000)/256;  //10ms
        TL0=(65536-50000)%256;
        count++;
        if(count==20)
        {
                count=0;
                num--;
        }
        if(num==0)
        {
                P0=0x00;
        }
}
void anjian() interrupt 0//按鍵去抖
{
        delay10();
        if(fu==0)
        {
                TR0=1;
        }
        while (fu==0);


51hei圖片20220507203739.png (76.19 KB, 下載次數(shù): 51)

仿真圖片

仿真圖片
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:999824 發(fā)表于 2022-5-7 20:38 | 只看該作者
大家?guī)兔χ更c(diǎn)一下,這個程序跑的很奇怪
回復(fù)

使用道具 舉報

板凳
ID:262 發(fā)表于 2022-5-7 22:03 | 只看該作者
什么問題都沒有說?
回復(fù)

使用道具 舉報

地板
ID:584814 發(fā)表于 2022-5-8 09:40 | 只看該作者
是很奇怪,我看了半天它都沒跑走
回復(fù)

使用道具 舉報

5#
ID:161164 發(fā)表于 2022-5-8 09:58 來自手機(jī) | 只看該作者
復(fù)位鍵按下,先進(jìn)外中斷,直到復(fù)位鍵放開才離開中斷,結(jié)果主循環(huán)里的fuwei()里的if(fu==0)永遠(yuǎn)不會成立
回復(fù)

使用道具 舉報

6#
ID:61140 發(fā)表于 2022-5-8 14:32 | 只看該作者
這種用什么中斷,用匯編幾個FLAG就可以搞定了.
回復(fù)

使用道具 舉報

7#
ID:999824 發(fā)表于 2022-5-8 19:26 | 只看該作者
heicad 發(fā)表于 2022-5-7 22:03
什么問題都沒有說?

他沒有報錯,程序能運(yùn)行,就是跑的很奇怪
回復(fù)

使用道具 舉報

8#
ID:999824 發(fā)表于 2022-5-8 19:27 | 只看該作者
lkc8210 發(fā)表于 2022-5-8 09:58
復(fù)位鍵按下,先進(jìn)外中斷,直到復(fù)位鍵放開才離開中斷,結(jié)果主循環(huán)里的fuwei()里的if(fu==0)永遠(yuǎn)不會成立

那應(yīng)該怎么改,大佬
回復(fù)

使用道具 舉報

9#
ID:999824 發(fā)表于 2022-5-8 19:27 | 只看該作者
xiaoyuxinke 發(fā)表于 2022-5-8 14:32
這種用什么中斷,用匯編幾個FLAG就可以搞定了.

嗚嗚嗚,木得辦法,得用編程
回復(fù)

使用道具 舉報

10#
ID:123289 發(fā)表于 2022-5-9 14:22 | 只看該作者
1、對選手的鍵要一次性讀入,不能分前后。
2、對按鍵不能消抖(逮著一次即認(rèn)可),否則影響搶答的“搶”字。
3、無選手鍵入一直讀,有選手鍵入按命題邏輯進(jìn)行分析判定。
6#樓的建議是正確的。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 99久久精品免费看国产免费软件 | 日韩精品免费在线观看 | 国产乱码一二三区精品 | 青娱乐av| 久久成人精品 | 国产激情在线 | 日韩久草| 超碰97免费观看 | 欧美片网站免费 | 2021天天躁夜夜看 | xxxxx免费视频 | 成人午夜免费福利视频 | 日日摸日日碰夜夜爽2015电影 | 亚洲天堂精品一区 | 四虎国产 | 国产乱码精品一区二区三区五月婷 | 亚洲电影一区二区三区 | 成人在线看片 | 一区二区三区国产 | 女人毛片a毛片久久人人 | 中文字幕av网址 | 在线观看视频一区 | 免费黄色的视频 | 中文字幕国产视频 | 久久亚洲精品久久国产一区二区 | 色av一区 | 国产亚洲人成a在线v网站 | 亚洲a视| 中文字幕在线播放第一页 | 六月色婷 | 色综合天天天天做夜夜夜夜做 | 国产精品1区 | 成年免费在线观看 | 日韩精品一区二区三区中文在线 | 日日噜噜夜夜爽爽狠狠 | 91porn在线观看| 97av视频| 国产亚洲第一页 | 国产资源一区二区三区 | 精品国产一区二区三区免费 | 亚洲在线 |