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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1843|回復: 9
收起左側

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

[復制鏈接]
ID:999824 發表于 2022-5-7 20:38 | 顯示全部樓層 |閱讀模式
要求:
一、 任務描述
設計一種4人搶答器。控制要求如下:
(1)設主持人1名,選手4名。
(2)1、2、3、4號搶答臺上均有藍色指示燈、搶答按鈕。
(3)主持人臺上有綠色開始指示燈、紅色犯規指示燈、黃色報警燈,開始按鈕和復位按鈕。開始前,所有燈全滅。
(4)主持人按開始按鈕后,開始指示燈亮,并開始9S倒計時,以數碼管顯示,選手9S內可以按搶答按鈕搶答,最先按搶答按鈕的選手指示燈亮,
后按搶答按鈕的選手指示燈不亮,9S內如果無人搶答,黃色報警燈點亮。

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

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

uchar flag;
uchar count=0;  //中斷進入次數
uchar num=9;  //倒計時

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

sbit b1=P1^6;  //主持人開始燈
sbit b2=P1^5;  //犯規燈  
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)        //判斷是否進入搶答狀態
                {
                        if(P2==0x01)  //別人搶答狀態
                        {
                                a1=1;
                                a2=0;
                                a3=0;
                                a4=0;
                        }
                }
        }
        if(b==0)        //搶答
        {
                delay10();        //去抖
                if(b==0)        //判斷是否進入搶答狀態
                {
                        if(P2==0x02)  //別人搶答狀態
                        {
                                a2=1;
                                a1=0;
                                a3=0;
                                a4=0;
                        }
                }
        }
        if(c==0)        //搶答
        {
                delay10();        //去抖
                if(c==0)        //判斷是否進入搶答狀態
                {
                        if(P2==0x03)  //別人搶答狀態
                        {
                                a3=1;
                                a2=0;
                                a1=0;
                                a4=0;
                        }
                }
        }
        if(d==0)        //搶答
        {
                delay10();        //去抖
                if(d==0)        //判斷是否進入搶答狀態
                {
                        if(P2==0x04)  //別人搶答狀態
                        {
                                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()//復位按鈕
{
        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);


仿真圖片

仿真圖片
回復

使用道具 舉報

ID:999824 發表于 2022-5-7 20:38 | 顯示全部樓層
大家幫忙指點一下,這個程序跑的很奇怪
回復

使用道具 舉報

ID:262 發表于 2022-5-7 22:03 | 顯示全部樓層
什么問題都沒有說?
回復

使用道具 舉報

ID:584814 發表于 2022-5-8 09:40 | 顯示全部樓層
是很奇怪,我看了半天它都沒跑走
回復

使用道具 舉報

ID:161164 發表于 2022-5-8 09:58 來自手機 | 顯示全部樓層
復位鍵按下,先進外中斷,直到復位鍵放開才離開中斷,結果主循環里的fuwei()里的if(fu==0)永遠不會成立
回復

使用道具 舉報

ID:61140 發表于 2022-5-8 14:32 | 顯示全部樓層
這種用什么中斷,用匯編幾個FLAG就可以搞定了.
回復

使用道具 舉報

ID:999824 發表于 2022-5-8 19:26 | 顯示全部樓層
heicad 發表于 2022-5-7 22:03
什么問題都沒有說?

他沒有報錯,程序能運行,就是跑的很奇怪
回復

使用道具 舉報

ID:999824 發表于 2022-5-8 19:27 | 顯示全部樓層
lkc8210 發表于 2022-5-8 09:58
復位鍵按下,先進外中斷,直到復位鍵放開才離開中斷,結果主循環里的fuwei()里的if(fu==0)永遠不會成立

那應該怎么改,大佬
回復

使用道具 舉報

ID:999824 發表于 2022-5-8 19:27 | 顯示全部樓層
xiaoyuxinke 發表于 2022-5-8 14:32
這種用什么中斷,用匯編幾個FLAG就可以搞定了.

嗚嗚嗚,木得辦法,得用編程
回復

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久国产精品免费一区二区三区 | 成人亚洲精品 | 国产成在线观看免费视频 | 91精品国产综合久久婷婷香蕉 | 日本不卡一区二区三区在线观看 | 国产一区二区不卡 | 中文字幕在线播放第一页 | 中文字字幕在线中文乱码范文 | 新av在线| 美女在线国产 | 日韩在线不卡视频 | 一区亚洲 | 91精品国产色综合久久不卡蜜臀 | 先锋资源站 | 亚洲狠狠 | 中文字幕日韩一区二区 | 欧美午夜精品久久久久免费视 | 国产精品国产精品国产专区不卡 | 欧美视频第三页 | 亚洲高清视频在线观看 | 99re热精品视频 | 成人精品啪啪欧美成 | 欧美一区二区三区在线观看 | 国产成人精品一区二区三区在线观看 | 综合久久综合久久 | 亚洲精品www. | 91国内精精品久久久久久婷婷 | 超碰免费观看 | 国产午夜在线 | 亚洲欧美一区二区三区情侣bbw | 国产精品免费在线 | 亚洲欧洲中文 | h在线 | 国产精品亚洲成在人线 | 97超碰成人 | 亚洲国产欧美在线 | 亚洲精品久久久 | 一区二区三区av | 99在线精品视频 | 成人欧美日韩一区二区三区 | 国产精品久久av |