• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
阿成0
博客园    首页    新随笔    联系   管理    订阅  订阅

我的抢答器

#include<at89x51.h>
#define uchar unsigned char
uchar shu=0;
uchar u=0xfe;
uchar shu1[]={10,0};
uchar sh=0;
uchar sh1[]={10,0};
uchar shu2;
uchar d;
uchar x;
uchar i=0;
uchar n=1;
uchar code ledcode[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
                        0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; /*定义一维数组,显示0-f的段码*/
uchar code ledcode1[]={0x40,0x4f,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //0到9的 有PH
void delay(uchar a)
{
 uchar b;
 for(;a>0;a--)
     for(b=0;b<125;b++) 
       ;
}
void led(void)
{
 P2=0XbF;
 P0=ledcode[shu%10];
 delay(5);
 P2=0x7f;
 P0=ledcode[shu/10];
 delay(5);
 P2=0XDF;
 P0=0xbf;
 delay(5);
 P2=0XeF;
 P0=0xbf;
 delay(5);
 P2=0XF7;
 P0=ledcode[shu1[0]/10];
 delay(5);
 P2=0XFb;
 P0=ledcode1[shu1[0]%10];
 delay(5);
 P2=0XFd;
 P0=ledcode[shu1[1]/10];
 delay(5);
 P2=0XFe;
 P0=ledcode[shu1[1]%10];
 delay(5);
}
uchar jianpan(void)  //键盘扫描函数
{
   uchar hang,lie;
   P3 =0xf0;  //P3口低4位输出0,高4位输出1
   if((P3&0xf0)!=0xf0) //判断是否有键按下
     {
    delay(10);  //延时去抖动
    if((P3&0xf0)!=0xf0) //再次判断是否有键按下
      { 
     hang=0xfe;     //逐行扫描初值1111 1110
     while((hang&0x10)!=0)    //判断4行是否扫描结束  0001 0000
       {
       P3=hang;                     /*逐行开放行值送P3*/
    if((P3&0xf0)!=0xf0)   //判断本行是否有键按下
     {
       lie=(P3&0xf0);   //把列的数据送key
       P3=0xf0;   //P3口低4位输出0,高4位输出1
       while((P3&0xf0)!=0xf0)//等待键松开
         {led();}
       d=lie|(hang&0x0f);
       return(lie|(hang&0x0f));  //返回所按的键代码 
     }
       else
     {hang=(hang<<1)|0x01;}  //左移准备开放下一行
    }
   }
    else{}
  }
   else{}
}
void swi(uchar a)
{
 switch(a)
        {
   case 0x7e:
   if(n==0)
   {
   shu=1;
   TR0=0;
   TR1=0;
   n=n+2;
  
   }
   break;

   case 0xbe:
   if(n==0)
     {
   shu=2;
   TR0=0;
   TR1=0;
   n=n+2;
   }
   break;

   case 0xde:
   if(n==0)
   {
   shu=3;
   TR0=0;
   TR1=0;
   n=n+2;
   }
   break;

   case 0xee:
   if(n==0)
   {
   shu=4;
   TR0=0;
   TR1=0;
   n=n+2;
   }
   break;

   case 0x7d:
   if(n==0)
   {
   shu=5;
   TR0=0;
   TR1=0;
   n=n+2;
   }
   break;

   case 0xbd:
   if(n==0)
   {
   shu=6;
   TR0=0;
   TR1=0;
  n=n+2;
   }
   break;

   case 0xdd:
   if(n==0)
   {
   shu=7;
   TR0=0;
   TR1=0;
   n=n+2;
   }
   break;

   case 0xed:
   if(n==0)
   {
   shu=8;
   TR0=0;
   TR1=0;
   n=n+2;
   }
   break;

   case 0x7b:
  if(n==0)
   {
   shu=9;
   TR0=0;
   TR1=0;
   n=n+2;
   }
   break;

   case 0xbb:
   if(n==0)
   {
   shu=10;
   TR0=0;
   TR1=0;
   n=n+2;
   }
   break;

   case 0xdb:
   if(n==0)
   {
   shu=11;
   TR0=0;
   TR1=0;
   n=n+2;
   }
   break;

   case 0xeb:
   if(n==0)
   {
   shu=12;
   TR0=0;
   TR1=0;
   n=n+2;
   }
   break;

   case 0x77:
   if(n==0)
   {
   shu=13;
   TR0=0;
   TR1=0;
   n=n+2;
   }
   break;

   case 0xb7:
   if(n==0)
   {
   shu=14;
   TR0=0;
   TR1=0;
   n=n+2;
   }
   break;

   case 0xd7:
   if(n==0)
   {
   shu=15;
   TR0=0;
   TR1=0;
   n=n+2;
   }
   break;

   case 0xe7:
   n--;
   if((n==-2)|(n==-1))
      {
    n=0;
   }
   i++;
   if(i==1)
      {
    TR0=1;
    TR1=1;
   }
   if(i==2)
      {
    i=0;
    TR0=0;
    TR1=0;
    P1=0XFF;
      shu=0;
         shu1[0]=10;
      shu1[1]=0;
   }
   break;
  }
}
void t0(void) interrupt 1
{
  TH0=(65536-1000)/256;
  TL0=(65536-1000)%256;
  
   shu2++;
   if(shu2==10)
      {
    shu2=0;
    shu1[1]--;
    if(shu1[1]==(-1))
      {
    shu1[1]=99;
    shu1[0]--;
   
    if(shu1[0]==(-1))
       {
     shu1[0]=0;
     shu1[1]=0;
     n=1;
    }
   
   }
    }  
}
void t1(void) interrupt 3
{
 TH1=(65536-50000)/256;
 TL1=(65536-50000)%256;
 P1=u;
 u=(u<<1)|(u>>7);
 if((shu1[1]==0)&(shu1[0]==0))
    {
  P1=!P1;
 }
}
void main(void)
{
 TMOD=0X11;
 TH0=(65536-1000)/256;
 TL0=(65536-1000)%256;
 TH1=(65536-50000)/256;
 TL1=(65536-50000)%256;
 EA=1;
 ET0=1;
 ET1=1;
 
 //TR0=1;
 while(1)
      {
       led();
    x=jianpan();
    swi(x);

    }   
}

刚刚学单片机花了几天时间来弄这个,大家多指教啊,呵呵

posted @ 2010-12-29 12:47  阿成0  阅读(289)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3