找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機8位競賽搶答器調研,模塊劃分與接口定義文檔+Proteus仿真程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:701488 發(fā)表于 2020-3-3 12:01 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


使用at89c51實現(xiàn)功能
單片機源程序:
#include<reg51.h>
#include<lcd1602.h>
sbit sjjia=P1^0;         //定義時間加按鈕        
sbit sjjian=P1^1;                  //定義時間減按鈕
sbit kaishi=P1^2;                  //定義開始按鈕
sbit fuwei=P1^3;                  //定義復位按鈕
sbit soud=P1^4;                          //報警按鈕
sbit led_r=P1^5;                  //定義搶答成功指示
sbit led_y=P1^6;                   //定義闡述時間到指示

unsigned char num[]={'0','1','2','3','4','5','6','7','8','9'},num2;
unsigned char model,time,temp;

void init()        //初始化函數(shù)
{
        TMOD=0x01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        ET0=1;
        TR0=0;
        EA=1;
        P1=0x0f;

        model=0;
        time=30;
}

void delay(unsigned char i)        //延時函數(shù)
{
        unsigned char j,k;
        while(i--)
                for(j=100;j>0;j--)
                        for(k=100;k>0;k--);
}

void star() //啟動
{
        lcd_xml(0x80);lcd_xsj("     welcome    ");
        delay(100);
        lcd_xml(0xc0);lcd_xsj(" 8 Way Responder");
        delay(80);
}

void led_num() //刷新倒計時
{
        lcd_xml(0x80);lcd_xsj(" Countdown :    ");
        lcd_xml(0x8d);lcd_xsj2(num[time/10]);
        lcd_xml(0x8e);lcd_xsj2(num[time%10]);
}

void reset()        //復位
{
        TR0=0;
        P1=0x0f;

        led_r=0;
        led_y=0;
        P2=0xff;
        model=0;
        time=10;
        led_num();
        lcd_xml(0xc0);lcd_xsj("   Not started  ");        
}

void Not_started()
{
        if(sjjia==0)
        {
                delay(10);
                if(sjjia==0)
                {
                        time++;
                        if(time==100) time=0;
                        led_num();
                }
        }
        if(sjjian==0)
        {
                delay(10);
                if(sjjian==0)
                {
                        time--;
                        if(time==0) time=99;
                        led_num();
                }
        }
        if(kaishi==0)
        {
                delay(10);
                if(kaishi==0)
                {
                        model=1;
                        TR0=1;
                        lcd_xml(0xc0);lcd_xsj(" Start Responder");
                        soud=1;delay(10);soud=0;
                }
        }
}

void anjian()
{

        if(P2 != 0xff)
        {
                delay(5);
                if(P2 != 0xff)
                {
                        temp=~P2;
                        model=3;
                        led_r=1;
                        soud=1;delay(10);soud=0;        
                        switch(temp)
                        {
                                case 0x01:num2=1;break;
                                case 0x02:num2=2;break;
                                case 0x04:num2=3;break;
                                case 0x08:num2=4;break;
                                case 0x10:num2=5;break;
                                case 0x20:num2=6;break;
                                case 0x40:num2=7;break;
                                case 0x80:num2=8;break;                        
                        }
                        lcd_xml(0xc0);lcd_xsj(" Competitor:   ");
                        lcd_xml(0xce);lcd_xsj2(num[num2]);

                        time=60;
                        P2=temp;
                }        
        }
}

void finish()
{
        if(!time)
        {
                led_y=1;
                lcd_xml(0xc0);lcd_xsj("      End       ");        
        }
}

void main()
{
        init();
        lcd_init();
        star();
        reset();
        while(1)
        {
                if(fuwei==0)        //復位鍵檢測
                {
                        delay(1);
                        if(fuwei==0)
                                reset();
                }
                switch(model)
                {
                        case 0:Not_started();break;
                        case 1:anjian();break;
                        case 2:finish();break;
                        case 3:break;
                        default : model=0;break;        
                }
        }
}

void timee() interrupt 1        //1s函數(shù)中斷
{
        unsigned char a;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        a++;        //是否滿1s
        if(a==24)
        {
                a=0;
                if(model==1 || model==3)
                {
                        time--;
                        led_num();
                        if(time==0)
                        {
                                model=2;
                                soud=1;delay(20);soud=0;
                        }
                }
        }
}

全部資料51hei下載地址:
電子綜合設計.7z (811.36 KB, 下載次數(shù): 161)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:890070 發(fā)表于 2021-10-18 10:54 | 只看該作者
剛好需要 很棒
回復

使用道具 舉報

板凳
ID:977459 發(fā)表于 2021-11-23 13:23 | 只看該作者
有顯示得分的程序嗎?
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

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