⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 3.c

📁 有线 无线 双模式八路抢答器 使用无线收发模块 编码解码芯片
💻 C
字号:
                        /**********************************/
                        /*有线/无线双模式多功能八路抢答器 */
                        /*    设计:陈金玉 吴振铨         */
                        /*     广东工业大学信息工程学院   */
                        /*         04应用电子2班          */
                        /*         2006年4月25日          */
                        /**********************************/
#include"reg51.h"
unsigned char i;//显示抢答路数
int k ,s;
sbit set=P3^7;
sbit beeper=P3^6;
sbit time=P3^4;
sbit en5027=P3^3;
sbit dp=P0^6;
sbit w1=P2^7;
sbit w2=P2^6;
sbit w3=P2^5;
sbit w4=P2^4;
unsigned char code table[]={
        0xC0,/*0*/
        0xF9,/*1*/
        0xA4,/*2*/
        0xB0,/*3*/
        0x99,/*4*/
        0x92,/*5*/
        0x82,/*6*/
        0xF8,/*7*/
        0x80,/*8*/
        0x90,/*9*/};
void init(void);
void t0init(void);
void mode1(void);//有线模式
void mode2(void);//无线模式
unsigned char mode1readkeys(void);
unsigned char mode2readkeys(void);
void display1(void);
void display2(void);
void displaytime(int k);
time0()interrupt 1 using 1//T0中断服务程序(50ms)
{ unsigned char a;
  a++;
  TH0=-50000/256;
  TL0=-50000%256;
  if(a>20)
     { 
       a=0;
       k++;
      }
	 if(k>99)
	 k=0;
}

void t0init(void)//T0初始化
{TMOD=0x61;
TH0=-50000/256;
TL0=-50000%256;
TH1=-10;
TH0=-10;
EA=1;
ET0=1;
TR0=1;

}
void delay(void)//延时
{
for(s=0;s<700;s++)
;
}
void displaytime(int k)//LED显示时间
{unsigned char n,m;
 w3=0;
 n=k%10;
 P0=table[n];
 delay();
 delay();
 w3=1;
 delay();
 w4=0;
 m=k/10;
 P0=table[m];
 delay();
 delay();
 w4=1;
delay();
}
void clock(void)//
{  w1=1;
   w2=1;
  t0init();
  displaytime( k);
 }
void main(void)
{

  init();
  if(set==1)//默认为有线模式
     mode2();
  else
     mode1();
}

void init(void)//初始化
{
en5027=1;
set=0;
P2=0xF0;
P0=0xFF;
P1=0xFF;
w1=1;
w2=1;
w3=1;
w4=1;
i=0;
}
/*unsigned char mode1readkeys(void)
{
  unsigned char j;
  int k;
  P1=0xFE;
  for(j=0;j<3;j++)
   {
     if((P1&0xF0)!=0xF0)
	  	{
	       switch (P1)
		     {
	          case 0xEE:
	          i=1;
	          break;
              case 0xDE:
           	  i=2;
	          break; 
              case 0xBE:
	          i=3;
         	  break;
              case 0xED:
	          i=4;
	          break;
              case 0xDD:
    	      i=8;
	          break;
              case 0xBD:
	          i=7;
	          break;
              case 0xEB:
 	          i=6;
	          break;
              case 0xDB:
	          i=5;
	          break;
              default:
              return 0;
              break;
             }
           return i;
         }
	 k=P1;
	 k=~k;
	 k=k<<1;
	 k=~k;
     P1=k;
   }
}*/
unsigned char mode1readkeys(void)//模式1读取按键
{
  P1=0xFE;
     if((P1&0xFE)!=0xFE)
	  	{
	       switch (P1)
		     {
	          case 0xEE:
	          i=1;
	          break;
              case 0xDE:
           	  i=2;
	          break; 
              case 0xBE:
	          i=3;
              break;
              default:
              return 0;
              break;
             }
           return i;
         }
   P1=0xFD;
     if((P1&0xFD)!=0xFD)
	  	{
	       switch (P1)
		     {
	          case 0xED:
	          i=4;
	          break;
              case 0xDD:
           	  i=8;
	          break; 
              case 0xBD:
	          i=7;
              break;
              default:
              return 0;
              break;
             }
           return i;
         }
     P1=0xFB;
     if((P1&0xFB)!=0xFB)
	  	{
	       switch (P1)
		     {
	          case 0xEB:
	          i=6;
	          break;
              case 0xDB:
           	  i=5;
	          break; 
              default:
              return 0;
              break;
             }
           return i;
         }
 
}
unsigned char mode2readkeys(void)//模式2读取按键
{
  unsigned char n;
  n=P2;
  n=(n&0x0F);
  i=n;
  return i;
}
void display1(void)
{
 w1=0;
 P0=table[i];
}
void display2(void)
{
 w2=0;
 P0=table[i];
}
void mode1(void)//模式1
{
 w1=0;
 dp=0;
 i=0;
 time=0;
   if(time==1)
       while(1)
		  {
		 
	       clock();
		   }
 while(i==0||i>8)
      { 
       mode1readkeys();
	   }
 P1=0xFF;
 beeper=0;
 display1();
 beeper=0;
  while(1)
   {
    unsigned int t;
    for(t=0;t<20000;t++)
       {
        if(t>15000)
            beeper=1;
         else
          beeper=0;
         }
     }
}
void mode2(void)//模式2
{
 en5027=0;//打开无线接收
 w2=0;
 dp=0;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
 i=0;
 time=0;
   if(time==1)
       while(1)
		  {
		 
	       clock();
		   }
 while(!(i==1||i==2||i==4||i==8))
      { 
       mode2readkeys();
	   }
 P1=0xFF;
 beeper=0;
 if(i==4)
    i=3;
 if(i==8)
    i=4;
 display2();
 beeper=0;
 en5027=1;//关闭无线接收
 while(1)
   {
     unsigned int t;
    for(t=0;t<20000;t++)
        {
        if(t>15000)
            beeper=1;
         else
          beeper=0;
         }
     }
 }






⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -