找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 13636|回復(fù): 10
收起左側(cè)

八位競(jìng)賽搶答器 單片機(jī)課程設(shè)計(jì) PPT文檔 仿真 程序等下載

  [復(fù)制鏈接]
ID:112317 發(fā)表于 2016-4-7 03:07 | 顯示全部樓層 |閱讀模式
PPT文檔: 2.png 仿真: 1.png 0.png
以上壓縮包所有資料下載: 八路搶答器單片機(jī)課程設(shè)計(jì).rar (168.9 KB, 下載次數(shù): 219)


侯從彬;呂衛(wèi)偉;劉艷平;朱強(qiáng)

實(shí)驗(yàn)要求:

1:  兩個(gè)兩位的數(shù)碼管,

一個(gè)用來(lái)顯示倒計(jì)時(shí)時(shí)間,

一個(gè)用來(lái)顯示選手的編號(hào)

2: 主持人控制兩個(gè)按鍵K1-K2:

功能鍵K1:搶答開(kāi)始,開(kāi)始倒時(shí)揚(yáng)聲器響。

 

功能鍵K2 功能1:清除顯示(時(shí)間從倒計(jì)時(shí)的最大時(shí)間開(kāi)始,選手編號(hào)顯示清零);

功能2:設(shè)置倒計(jì)時(shí)的時(shí)間。

 

八位選手各控制一鍵,待主持人按下開(kāi)始鍵后,第一個(gè)按下?lián)尨疰I的選手的編號(hào)將被顯示。揚(yáng)聲器停,其他鍵均被屏蔽,至到主持人再次按下開(kāi)始鍵。

實(shí)驗(yàn)?zāi)K分析:

  1. 數(shù)碼管的使用:

共陰極: 1.001.jpg

 

 

 

(1)

 

選端 置數(shù)功能  P00P07

 

輸入

0X3F

0X06

0X5B

0X4F

0X66

0X6D

0X7D

0X07

0X7F

0X6F

顯示

0

1

2

3

4

5

6

7

8

9

 

 

 

(2)

 

段選端: 控制功能   D0..D1;

D0=0 啟動(dòng)置數(shù);

D0=1  停止置數(shù);

 

例如:置D0=0;P0=0X3F;

則數(shù)碼管顯示數(shù)字 0

 

2 .

本實(shí)驗(yàn)需要兩個(gè)數(shù)碼管同時(shí)顯示,實(shí)際上是達(dá)不到同時(shí)顯示的;但可以利“視覺(jué)暫留效應(yīng)”達(dá)到此效果;

同時(shí)也要考慮到消除數(shù)碼管顯示抖動(dòng)現(xiàn)象;

這就需要實(shí)驗(yàn)者熟練應(yīng)用              delay() 延時(shí)函數(shù);

 

              d1=0;

              P0=tab[num/10];//倒計(jì)時(shí)控制

              delay(5);

              d1=1;

              d2=0;

              P0=tab[num%10];

              delay(5);

              d2=1;

其中的              delay(5)              就是為了達(dá)到一上所敘述的目的             

 

<二>、

蜂鳴器:

1.002.jpg

 

只要在BUZ 端接地即可鳴叫。

 

<二、程序框圖>

 

                主函數(shù):



實(shí)物圖連接: 1.014.jpg

P1口接8選手開(kāi)關(guān),在ZK1 ZK2為主持人開(kāi)關(guān),功能與題目要求一樣

P0 口為數(shù)碼管位選 。

注意:P0口使用時(shí)必須接上拉電阻否則為高阻態(tài) 。

P2口的分別用作主持人開(kāi)關(guān)(P2^0P2^1)兩數(shù)碼管段選(P2^4...P2^7);

 

 

實(shí)驗(yàn)程序分析:

 

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

#define  max 20

uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,};

sbit d1=P2^4;//**************段選

sbit d2=P2^5;

sbit x1=P2^6;

sbit x2=P2^7;

sbit k1=P1^0;//*********************八位選手開(kāi)關(guān)

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 zk1=P2^0;//*****************************主持人開(kāi)關(guān)zk1              zk2

sbit zk2=P2^1;

sbit buz=P2^2;//*******************蜂鳴器

uchar num,aa;

uchar f,flag;

void jianpan();

 

void init(void)

{

TMOD=0X01;//***************T0,模式1,定時(shí)

TL0=0XB0; //********************定時(shí)50ms

   TH0=0X3C;

   ET0=1;    //**************開(kāi)中斷

   EA=1;

   num=max;//置倒計(jì)時(shí)計(jì)數(shù)初值

}

 

void delay(uint xms)

{

   uint x,y;

   for(x=xms;x>0;x--)

    for(y=110;y>0;y--);

 

}

/**********************************************

倒計(jì)時(shí)  選手號(hào)顯示函數(shù)

**********************************************/

void display()

{d1=0;         //控制開(kāi)始置數(shù)

P0=tab[num/10];//倒計(jì)時(shí)控制取最高位

delay(5);

d1=1;          //停止置數(shù)操作

 

d2=0;

P0=tab[num%10];//倒計(jì)時(shí)取最低位

delay(5);

d2=1;

 

x1=0;         //控制開(kāi)始置數(shù)

P0=tab[flag/10];//選手號(hào)控制

delay(5);

x1=1;         //停止置數(shù)操作

x2=0;

P0=tab[flag%10];

delay(5);

x2=1;

}

/**********************************************************主函數(shù)部分

**********************************************************/void main()

{             

init();

while(1)

{ jianpan();display();}              }

 

/***************************************

中斷控制倒計(jì)時(shí)

*************************************/

void timer0(void) interrupt 1

{

   TL0=0XB0; //******重裝初值,定時(shí)50ms

   TH0=0X3C;

   aa++;

   if(aa==20)//**********************************1秒到了

    {

     aa=0;//**************************************計(jì)數(shù)清零

num--;

if(num==0)//倒計(jì)時(shí)為0時(shí)迅速變?yōu)?/span>初值同時(shí)關(guān)中斷停止倒計(jì)時(shí)

{   num=max;

TR0=0;   }

 

buz=0;//***************要求蜂鳴器響

delay(20);//**************************蜂鳴器響,特別注意時(shí)間為一秒buz=1;

                

     }  

}

/**************************************************

按鍵控制   程序的核心部分

****************************************************/

void jianpan()

{

if(zk1==0&flag=0)

{

delay(5);//消除數(shù)碼管抖動(dòng)操作

flag=0;//數(shù)碼管顯示0

display();

TR0=1;//ZK1鍵按下,開(kāi)中斷以此控制只有當(dāng)此鍵按下時(shí)才搶答

}

if(zk2==0&&TR0==0)//注意這里要求TR0=0;

{

delay(5);//消除抖動(dòng)

if(zk2==0&&TR0==0)

if(flag==0)

{num--;buz=0;delay(20);buz=1;}

if(num==0)

num=max;                           

if(flag!=0)//ZK2鍵清零操作

{

flag=0;

num=max;//倒計(jì)時(shí)顯示最大值

TR0=0;//注意此時(shí)關(guān)中斷,不再進(jìn)行倒計(jì)時(shí)

buz=0;

delay(20);

buz=1;   

}

while(!zk2)//倒計(jì)時(shí)中ZK2 鍵不可影響

display();

                            }

 

/**********************************************************TR0控制搶答先后順序

*********************************************************/

 

if(k1==0&&TR0==1)//注意此時(shí)TR0=1才執(zhí)行以下按鍵操作

{             

buz=0;

delay(20);

buz=1;

delay(5);

flag=1;

TR0=0;//此鍵按下關(guān)中斷,其他選手按鍵不再受影響                           

display();

}

/*************************************

以下原理相同

*************************************/

if(k2==0&&TR0==1)

buz=0;delay(20);buz=1;

delay(5);

flag=2;

TR0=0;             

display();

}

 

if(k3==0&&TR0==1)

{             

buz=0;delay(20);buz=1;

delay(5);

flag=3;

TR0=0;

display();

}

if(k4==0&&TR0==1)

{             

buz=0;delay(20);buz=1;

delay(5);

flag=4;

TR0=0;                           

display();   }

if(k5==0&&TR0==1)

{

delay(5);

flag=5;                    

TR0=0;

display();                                                           

}

if(k6==0&&TR0==1)

{             

buz=0;delay(20);buz=1;

                                

delay(5);

                      

flag=1;

                      

TR0=0;

display();          }

 

                           

if(k7==0&&TR0==1)

buz=0;delay(20);

buz=1;

delay(5);

flag=7;

TR0=0;

display();

}

 

if(k8==0&&TR0==1)

buz=0;delay(20);

buz=1;

delay(5);

flag=8;

TR0=0;                                                                                         

display();  

}

             

}

 

 

1.

此實(shí)驗(yàn)最大的特點(diǎn)便是中斷的巧妙應(yīng)用

另外要注意延遲函數(shù)對(duì)數(shù)碼管顯示效果的影響

2.

控制選手先后順序時(shí),設(shè)置了兩個(gè)條件:按鍵和TR0,

TR0則是控制關(guān)鍵,也是主持人按鍵控制的關(guān)鍵

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

ID:561708 發(fā)表于 2019-6-13 14:46 | 顯示全部樓層
感覺(jué)挺難,第一次做的時(shí)候頭緒都沒(méi)有,看了你這之后好多了
回復(fù)

使用道具 舉報(bào)

ID:508547 發(fā)表于 2019-4-12 16:13 | 顯示全部樓層
很棒,對(duì)于初學(xué)者來(lái)說(shuō)收獲很大
回復(fù)

使用道具 舉報(bào)

ID:480493 發(fā)表于 2019-3-23 15:18 | 顯示全部樓層
在哪里下載
回復(fù)

使用道具 舉報(bào)

ID:339284 發(fā)表于 2018-6-2 17:04 | 顯示全部樓層
這個(gè)可以 有點(diǎn)干貨
回復(fù)

使用道具 舉報(bào)

ID:264470 發(fā)表于 2017-12-20 20:25 | 顯示全部樓層
這個(gè)很詳細(xì).得到很大收獲
回復(fù)

使用道具 舉報(bào)

ID:259031 發(fā)表于 2017-12-8 13:28 | 顯示全部樓層
很棒,收貨很多
回復(fù)

使用道具 舉報(bào)

ID:209984 發(fā)表于 2017-6-11 13:50 | 顯示全部樓層
樓主的protues不能修改,怎么樣改變只讀模式啊
回復(fù)

使用道具 舉報(bào)

ID:208278 發(fā)表于 2017-6-8 10:57 | 顯示全部樓層
感謝樓主 收益良多啊
回復(fù)

使用道具 舉報(bào)

ID:150661 發(fā)表于 2016-11-28 00:56 | 顯示全部樓層
翻譯后都是errors
回復(fù)

使用道具 舉報(bào)

ID:126068 發(fā)表于 2016-6-10 12:05 | 顯示全部樓層
寫(xiě)得真棒
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表