久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
單片機四路搶答器(倒計時)基于51單片機
[打印本頁]
作者:
123456ld
時間:
2019-11-10 12:03
標題:
單片機四路搶答器(倒計時)基于51單片機
本帖最后由 123456ld 于 2019-11-11 15:09 編輯
基于c51的四路搶答器,本實驗通過數碼管結合矩陣按鍵及獨立按鍵組成四路搶答器。對不同選手的判斷從而在數碼管上顯示那位選手搶答成功暫停計時,或哪三位選手犯規觸發蜂鳴器報警。其中倒計時的開始由獨立按鍵K1實現,對搶答或倒計時的恢復由獨立按鍵K3實現。程序源碼為本人自創,如有不懂,請留言發問。篇幅有限僅提供部分代碼。詳情請下載后查閱。
該程序適用stc89c51單片機
單片機源程序如下:
/****************************************************
* 實驗內容
* 四路搶答器
**************************************************/
#include <reg52.h>
typedef unsigned int u16;
typedef unsigned char u8;
/***********************************************
*
* 變量及引腳定義聲明
*************************************************/
sbit AA = P2^2;
sbit BB = P2^3;
sbit CC = P2^4;
sbit k3 = P3^2;
sbit k4 = P3^3;
sbit beep = P1^5;
int i=0; //初始狀態控制毫秒的兩位數碼管為0
int j=10; //初始狀態控制秒的兩位數碼管為10
int jishu=0; //以10ms為一個劑量,精準控制毫秒的99-0
int cishu=0; //消除最后一秒帶來的影響
int xuanshou=0; //選手編號
int biaozhi=1; //控制搶答開始后只有一個人可以被記錄
int wei1=0 , wei2=0 , wei3=0;
enum position {zero, one, two, three, four, five, six, seven};
u16 code duanxuan[16] = { 0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
/*****************************************************
*
* 子函數申明
******************************************************/
void delay(u16 i); //延時函數
void jvzhen(); //矩陣鍵盤選手確定
void weixuan( u16 i ); //數碼管位選
void timer0(); //定時器初始化
void xianshi(); //數碼管倒計時顯示
void int0(); //中斷0倒計時開始
void int1(); //中斷1問題結束恢復數碼管
void panduan(); //答題選手的判斷
void qiangda(); //選手搶答時的判斷
/*****************************************************
* 主函數
*******************************************************/
void main()
{
int0();
int1();
timer0();
while(1)
{
xianshi();
jvzhen();
panduan();
qiangda();
}
}
void qiangda()
{
if( j==10&&xuanshou!=0 )
{
wei1 = xuanshou;
while(1)
{
xianshi();
weixuan(7);
P0 = duanxuan[wei1];
delay(1);
P0 = 0x00;
beep=~beep;
delay(1);
jvzhen();
if( xuanshou!=wei1 )
{
break;
}
if( k4==0 )
{
break;
}
}
wei2 = xuanshou;
while(1)
{
xianshi();
weixuan(7);
P0 = duanxuan[wei2];
delay(1);
P0 = 0x00;
weixuan(6);
P0 = duanxuan[wei1];
delay(1);
P0 = 0x00;
beep=~beep;
delay(1);
jvzhen();
if( xuanshou!=wei2 )
{
break;
}
if( k4==0 )
{
break;
}
}
wei3 = xuanshou;
while(1)
{
xianshi();
weixuan(7);
P0 = duanxuan[wei3];
delay(1);
P0 = 0x00;
weixuan(6);
P0 = duanxuan[wei2];
delay(1);
P0 = 0x00;
weixuan(5);
P0 = duanxuan[wei1];
delay(1);
P0 = 0x00;
beep=~beep;
delay(1);
jvzhen();
if( k4==0 )
{
break;
}
}
}
}
/* 延時 */
void delay(u16 i)
{
u16 a;
while(i--)
{
for(a = 0; a < 100; a++)
{
;
}
}
}
/* 顯示哪位選手按鍵暫停 */
void panduan()
{
if( i!=0 && xuanshou!=0 )
{
switch( xuanshou )
{
case 1 : TR0=0; weixuan(7); P0=duanxuan[1]; delay(1); P0 = 0x00; break;
case 2 : TR0=0; weixuan(7); P0=duanxuan[2]; delay(1); P0 = 0x00; break;
case 3 : TR0=0; weixuan(7); P0=duanxuan[3]; delay(1); P0 = 0x00; break;
case 4 : TR0=0; weixuan(7); P0=duanxuan[4]; delay(1); P0 = 0x00; break;
}
biaozhi=0;
}
}
/* 矩陣鍵盤選手確定 */
void jvzhen()
{
P1 = 0x0f;
if( (P1!=0x0f&&biaozhi==1) )
{
delay(5);
if( (P1!=0x0f) )
{
switch( P1 )
{
case 0x07 : xuanshou = 1; break;
case 0x0b : xuanshou = 2; break;
case 0x0d : xuanshou = 3; break;
case 0x0e : xuanshou = 4; break;
}
P1=0xf0;
switch( P1 )
{
case (0x70) : xuanshou = xuanshou; break;
}
}
}
}
/* 數碼管位選*/
void weixuan( u16 i )
{
switch(i)
{
case (zero): CC = 0; BB = 0; AA = 0; break; //第零位
case (one): CC = 0; BB = 0; AA = 1; break; //第一位
case (two): CC = 0; BB = 1; AA = 0; break; //第二位
case (three): CC = 0; BB = 1; AA = 1; break; //第三位
case (four): CC = 1; BB = 0; AA = 0; break; //第四位
case (five): CC = 1; BB = 0; AA = 1; break; //第五位
case (six): CC = 1; BB = 1; AA = 0; break; //第六位
case (seven): CC = 1; BB = 1; AA = 1; break; //第七位
}
}
/* 定時器初始化*/
void timer0()
{
TMOD =0x01;
TH0 = (65536-1000)/256;
TL0 = (65536-1000)%256; //1ms
ET0 = 1;
EA = 1;
}
/* 倒計時顯示 */
void xianshi()
{
weixuan(0);
P0 = duanxuan[i%10];
delay(1);
P0 = 0x00;
weixuan(1);
P0 = duanxuan[i/10];
delay(1);
P0 = 0x00;
weixuan(2);
P0 = 0x40;
delay(1);
P0 = 0x00;
weixuan(3);
P0 = duanxuan[j%10];
delay(1);
P0 = 0x00;
weixuan(4);
P0 = duanxuan[j/10];
delay(1);
P0 = 0x00;
}
/* 倒計時開始 */
void int0()
{
EA=1;
IT0=1;
EX0=1;
}
/* 數碼管復位 */
void int1()
{
EX1=1;
IT1=1;
EA=1;
}
復制代碼
所有資料51hei提供下載:
四路搶答器(倒計時).zip
(35.3 KB, 下載次數: 39)
2019-11-10 12:02 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
admin
時間:
2019-11-10 21:14
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产中文字幕亚洲
|
精品久久香蕉国产线看观看亚洲
|
在线观看www高清视频
|
精品日韩一区
|
欧美黄色精品
|
亚洲精品91
|
欧美一区二区在线免费观看
|
综合一区
|
久久久国产一区二区三区
|
欧洲一区二区视频
|
日韩欧美视频
|
免费在线色
|
中文字幕视频在线
|
黄色一级大片在线观看
|
不卡一区二区在线观看
|
久久91精品国产一区二区三区
|
天天操天天射天天舔
|
国产一区二区三区在线看
|
日本淫视频
|
18成人在线观看
|
欧美久久一区二区
|
亚洲码欧美码一区二区三区
|
亚洲一级av毛片
|
久久激情视频
|
久久99精品国产
|
天天干天天色
|
日韩在线视频一区
|
99这里只有精品视频
|
欧美日韩国产一区二区
|
国产成人综合av
|
a久久久久久
|
免费观看一级特黄欧美大片
|
国产农村妇女精品一区
|
国产精品亚洲成在人线
|
亚洲最新网址
|
亚洲高清在线观看
|
男女视频在线观看网站
|
国产日产精品一区二区三区四区
|
亚洲美女一区
|
欧美一区二区三区久久精品
|
成人伊人
|