|
主要功能:
key9:主持人鍵 黃燈
key1~8:搶答人鍵 紅燈
只有主持人按下后,搶答才有效,都有聲音提示
主持人按下前:lcd顯示 SUSPEND 暫停
主持人按下,搶答人按下前://lcd顯示 START 開始 // D9亮//時(shí)間開始倒計(jì)時(shí)
搶答人按下:lcd顯示 AND 結(jié)束 相應(yīng)燈亮//時(shí)間停止
搶答結(jié)束所有按鍵不再起作用
Proteus仿真原理圖:
搶答器1602.PNG (125.44 KB, 下載次數(shù): 107)
下載附件
2020-12-9 00:11 上傳
C程序代碼:
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit rs=P3^5;
- sbit rw=P3^6;
- sbit lcden=P3^7;
- sbit button=P3^0;
- sbit D9=P3^1;
- sbit beep=P3^2;
- uchar table1[]="SUSPEND";//暫停 //要顯示的字表
- uchar table2[]="START ";//開始
- uchar table3[]="AND ";//結(jié)束
- uchar table4[]=" 00:03:00";//搶答時(shí)間
- uchar fen,miao,sfmshi,sfmge,count,temp,flag,num,aa,bb,cc;
- /*************************************************************
- 延時(shí)函數(shù) ms
- *************************************************************/
- void delay(uint t)
- {
- uint x,y;
- for(x=t;x>0;x--)
- for(y=110;y>0;y--);
- }
- /*************************************************************
- lcd1602指令寫入函數(shù)
- *************************************************************/
- void write_com(uchar com)
- {
- P0=com;
- rs=0;//rs低,指令
- rw=0;//低,寫
- lcden=0;
- delay(5);
- lcden=1;
- delay(5);
- lcden=0;
- }
- /*************************************************************
- lcd1602數(shù)據(jù)寫入函數(shù)
- *************************************************************/
- void write_date(uchar date)
- {
- P0=date;
- rs=1;//rs高,數(shù)據(jù)
- rw=0;//低,寫
- lcden=0;
- delay(5);
- lcden=1;
- delay(5);
- lcden=0;
- }
- /*************************************************************
- lcd1602初始化函數(shù)
- *************************************************************/
- void init()
- {
- fen=3;
- miao=0;
- write_com(0x38);//選擇16x2顯示,5x7點(diǎn)陣
- delay(5);
- write_com(0x0f);//開顯示,開光標(biāo),光標(biāo)閃爍
- delay(5);
- write_com(0x06);//讀或?qū)懞,指針加一,光?biāo)加一
- delay(5);
- write_com(0x01);//清屏
- delay(5);
- /***********************************
- 中斷初始化
- ************************************/
- TMOD=0x01;//定時(shí)器T0,方式1
- TH0=(65536-50000)/256;//裝高8位初值
- TL0=(65536-50000)%256;//裝低8位初值
- EA=1;//總中斷開
- ET0=1;
- TR0=0;//定時(shí)器T0關(guān)閉,待主持按下
- }
- /*************************************************************
- 顯示狀態(tài)函數(shù)
- *************************************************************/
- void display1()
- {
- uchar i;
- write_com(0x80);//lcd1602第一行第一位 指令
- delay(5);
- for(i=0;i<7;i++)
- {
- if(flag==0)
- write_date(table1[i]);
- if(flag==1)
- write_date(table2[i]);
- if(flag==2)
- write_date(table3[i]);
- delay(5);
- }
- }
- /*************************************************************
- 初始化時(shí)間函數(shù)
- *************************************************************/
- void display2()
- {
- uchar i;
- write_com(0x80+0x40);//lcd1602第二行第一位 指令
- delay(5);
- for(i=0;i<12;i++)
- {
- write_date(table4[i]);
- delay(5);
- }
- }
- /*************************************************************
- 顯示時(shí)間函數(shù)
- *************************************************************/
- void sfm(uchar com,uchar date)
- {
- sfmshi=date/10;
- sfmge=date%10;
- write_com(0xc0+com);
- delay(5);
- write_date(0x30+sfmshi);
- delay(5);
- write_date(0x30+sfmge);
- delay(5);
- write_com(0x80+17);
- }
- /*************************************************************
- 按鍵檢測(cè)并時(shí)實(shí)還回按鍵號(hào)數(shù)
- *************************************************************/
- uchar keyscan()
- {
- if(P2!=0xff)
- {
- delay(5);//消抖
- if(P2!=0xff)
- switch(P2)
- {
- case 0xfe:num=1;break;
- case 0xfd:num=2;break;
- case 0xfb:num=3;break;
- case 0xf7:num=4;break;
- case 0xef:num=5;break;
- case 0xdf:num=6;break;
- case 0xbf:num=7;break;
- case 0x7f:num=8;break;
- default:break;
- }
- while(P2!=0xff);//松手檢測(cè)
- }
- if(button==0)
- {
- delay(5);
- if(button==0&&cc==0)
- {
- while(button==0);
- num=9;
- TR0=1;
- cc=1;
- beep=0;
- delay(500);
- beep=1;
- }
-
- }
- return num;
- }
- /*************************************************************
- main函數(shù)
- *************************************************************/
- void main()
- {
- init();
- display1();
- display2();
- write_com(0x0c);//開顯示,關(guān)閉光標(biāo),不閃爍
- delay(5);
- while(1)
- {
- keyscan();
- if(num==9&&TR0!=0)
- {display1();aa=1;}
- if(aa==1)
- {
- D9=0;
- flag=1;
- switch(num)
- {
- case 1:
- {P1=0xfe;TR0=0;flag=2;display1();aa=0;break;}
- case 2:
- {P1=0xfd;TR0=0;flag=2;display1();aa=0;break;}
- case 3:
- {P1=0xfb;TR0=0;flag=2;display1();aa=0;break;}
- case 4:
- {P1=0xf7;TR0=0;flag=2;display1();aa=0;break;}
- case 5:
- {P1=0xef;TR0=0;flag=2;display1();aa=0;break;}
- case 6:
- {P1=0xdf;TR0=0;flag=2;display1();aa=0;break;}
- case 7:
- {P1=0xbf;TR0=0;flag=2;display1();aa=0;break;}
- case 8:
- {P1=0x7f;TR0=0;flag=2;display1();aa=0;break;}
- default:break;
- }
- }
- if(flag==2&&bb==0)
- {
- write_com(0x80+12);
- write_date(0x30+num);
- write_date(0x50+7);
- write_date(0x40+9);
- write_date(0x40+14);
- bb=1;
- beep=0;
- delay(500);
- beep=1;
- }
- }
復(fù)制代碼
因文章限制,全部資料在下面壓縮包中........
多路搶答器.zip
(94.28 KB, 下載次數(shù): 64)
2020-12-9 00:18 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|