• 方案介紹
    • 1.? 簡(jiǎn)介
    • 2.? 主要功能
    • 3.? 源程序(Keil5)
    • 4.? 仿真proteus8.6
    • 5.? 設(shè)計(jì)報(bào)告
    • 6.? 資料清單
    • 7.? 資料獲取鏈接
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

基于51單片機(jī)的8路搶答器設(shè)計(jì)(三)!!!

04/18 08:26
570
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

單片機(jī)仿真設(shè)計(jì)合集資料獲取.pdf

共1個(gè)文件

資料清單:C程序+仿真+設(shè)計(jì)報(bào)告+使用說(shuō)明+元件清單+操作視頻

仿真版本:Proteus8.6及以上版本

程序編譯:Keil5 C51

編程語(yǔ)言:C語(yǔ)言

設(shè)計(jì)編號(hào):【O03】

1.? 簡(jiǎn)介

? 本文提出了一種基于51單片機(jī)的8路搶答器設(shè)計(jì)。該設(shè)計(jì)在硬件方面主要采用AT89C51單片機(jī)作為主控核心,結(jié)合獨(dú)立按鍵、數(shù)碼管、蜂鳴器。搶答限定時(shí)間為20S,在按下開(kāi)始搶答后開(kāi)始倒計(jì)時(shí),當(dāng)選手搶答后顯示對(duì)應(yīng)的搶答選手編碼,在按下答題計(jì)時(shí)鍵,選手在30S倒計(jì)時(shí)內(nèi)開(kāi)始答題。支持修改搶答時(shí)間和答題時(shí)間。

2.? 主要功能

a.主持人按下?lián)尨痖_(kāi)始按鍵,搶答者才可以開(kāi)始搶答,數(shù)碼管搶答倒計(jì)時(shí)20S。

b.搶答者按下按鍵,數(shù)碼管顯示搶答者的編號(hào)和剩余時(shí)間倒計(jì)時(shí)。

c.按下答題計(jì)時(shí)鍵,選手在30S倒計(jì)時(shí)內(nèi)開(kāi)始答題。

d.在開(kāi)始搶答之前可以通過(guò)按鍵修改搶答時(shí)間和答題時(shí)間。

3.? 源程序(Keil5)

本設(shè)計(jì)采用keil5 C51軟件(內(nèi)附安裝包)實(shí)現(xiàn)程序設(shè)計(jì)。如需用keil4打開(kāi)程序,可自行通過(guò).c和.h文件新建工程即可。

#include<at89x51.h>
#define uchar unsigned char
#define uint unsigned int
char s;
uchar num=0;
char time=20;	//搶答時(shí)間
char datitime=30;	//答題限時(shí)時(shí)間
uint tt,t1;	//T0,T1定時(shí)器定一秒時(shí)
bit flag,s_flag=1,b_flag,fall_flag;	//標(biāo)志位
bit K_startcountflag,K_timecountflag;	//時(shí)間調(diào)整標(biāo)志位
sbit K0=P3^0;
sbit beep=P3^7;         //蜂鳴器輸出口
sbit rled=P3^1;		//指示燈輸出口
sbit K1=P1^0;		
sbit K2=P1^1;
sbit K3=P1^2;
sbit K4=P1^3;
sbit K5=P1^4;
sbit K6=P1^5;
sbit K7=P1^6;
sbit K8=P1^7;
sbit K_Time=P3^2;	//答題計(jì)時(shí)鍵
sbit K_startcount=P3^3;	//開(kāi)始搶答時(shí)間加鍵
sbit K_startjian=P3^4;	//開(kāi)始搶答時(shí)間減鍵
sbit K_timecount=P3^5;	//答題計(jì)時(shí)時(shí)間加鍵
sbit K_timejian=P3^6;	//答題計(jì)時(shí)時(shí)間減鍵
void delay(uchar ms)
{
	uchar y;
	for(;ms>0;ms--)
		for(y=120;y>0;y--);
}
uchar code tabledu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x40};
uchar code tablewe[]={0XFE,0XFD,0XFB,0XF7};
void T0_Init(void)
{
	TMOD=0X01;
	TH0=(65536-2000)/256;
	TL0=(65536-2000)%256;
	TH1=(65536-2000)/256;
	TL1=(65536-2000)%256;
	ET0=1;
	ET1=1;
	EA=1;
	P0=0;
}
void Key_Scan(void)		//開(kāi)始鍵掃描
{
	if(K0==0)
	{
		delay(10);
		if(K0==0)
		{
			while(!K0);
			TR0=1;
			s=time;
			tt=0;
			flag=1;
			s_flag=1;
			b_flag=1;
			num=0;
			beep=1;
			rled=1;
			fall_flag=0;	//清除違規(guī)標(biāo)志位
			K_startcountflag=0;
			K_timecountflag=0;
		}
	}
}
void Scan(void)		//八路熱鍵掃描(哪個(gè)鍵先按下,哪個(gè)優(yōu)先級(jí)最高)
{
	if(K1==0)
	{
		delay(10);
		if(K1==0)
		{
			while(!K1);
			num=1;		//數(shù)碼管顯示1號(hào)"1"
			TR0=0;		//關(guān)閉定時(shí)器0,時(shí)間停止
			TR1=1;		//打開(kāi)定時(shí)器1,使揚(yáng)聲器響一聲
			s_flag=0;	//關(guān)閉開(kāi)始鍵標(biāo)志位,使再按其他七個(gè)鍵不會(huì)響應(yīng)
		}
	}
	if(K2==0)			//下面七個(gè)鍵的處理同上
	{
		delay(10);
		if(K2==0)
		{
			while(!K2);
			num=2;		
			TR0=0;
			TR1=1;
			s_flag=0;	//重要
		}
	}
	if(K3==0)
	{
		delay(10);
		if(K3==0)
		{
			while(!K3);
			num=3;
			TR0=0;
			TR1=1;
			s_flag=0;
		}
	}
	if(K4==0)
	{
		delay(10);
		if(K4==0)
		{
			while(!K4);
			num=4;
			TR0=0;
			TR1=1;
			s_flag=0;
		}
	}
	if(K5==0)
	{
		delay(10);
		if(K5==0)
		{
			while(!K5);
			num=5;
			TR0=0;
			TR1=1;
			s_flag=0;
		}
	}

4.? 仿真proteus8.6

? 本設(shè)計(jì)采用proteus8.6軟件(內(nèi)附安裝包)實(shí)現(xiàn)仿真設(shè)計(jì),如下圖所示。proteus軟件一般存在高低版本兼容問(wèn)題,該仿真是通過(guò)proteus8.6導(dǎo)出的,所以請(qǐng)盡量使用proteus8.6打開(kāi)文件,低于proteus8.6的版本不能夠正常使用,高于proteus8.6的版本除了proteus8.8/8.9理論上可以正常使用。

初始界面:

開(kāi)始倒計(jì)時(shí):

選手搶答:

答題計(jì)時(shí):

5.? 設(shè)計(jì)報(bào)告

設(shè)計(jì)報(bào)告主要包括硬件電路、軟件設(shè)計(jì)、仿真調(diào)試等等,僅供參考。

6.? 資料清單

設(shè)計(jì)資料主要包括C程序+仿真+設(shè)計(jì)報(bào)告+使用說(shuō)明+元件清單+操作視頻等。

7.? 資料獲取鏈接

百度網(wǎng)盤(pán)下載鏈接:【O03】百度網(wǎng)盤(pán)下載鏈接

更多單片機(jī)仿真設(shè)計(jì)合集:單片機(jī)仿真設(shè)計(jì)合集

  • 單片機(jī)仿真設(shè)計(jì)合集資料獲取.pdf
    下載

相關(guān)推薦