标题: 抢答器程序 [打印本页]

作者: 小青年    时间: 2016-4-4 14:14
标题: 抢答器程序
#include<reg51.h>

#define uchar unsigned char

#define dula P0       
#define wela P2       
sbit beep=P2^3;
sbit k1 =P3^4;
sbit k2 =P3^5;
sbit k3 =P3^6;
sbit k4 =P3^7;
uchar key,j,k,daojishi=5,wei;
bit begin,end,clear,fangui;
uchar a0,b0=16;c0=16;d0=16;
unsigned int pp;
unsigned char code weitable[]={0x8f,0x4f,0x2f,0x1f};
                                                //数码管各位的码表
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
                        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};

void delay(unsigned char i)
{
  for(j=i;j>0;j--)
    for(k=125;k>0;k--);
}

void display1(uchar wei,uchar shu)//在任意一位显示任意的数字
{
   wei=wei-1;
   wela|=0xf0;//给P2.4-P2.7置1
   P0=table[shu];
   wela=wela&weitable[wei];//给P2需要显示的那一位置1,其他置0
   delay(5);
}

void display(uchar a,uchar b,uchar c,uchar d)
{                                                  //一次显示4个数字,且每位显示数字可自定。
   display1(1,a);
   display1(2,b);
   display1(3,c);
   display1(4,d);
}
void keyscan()
{
        if(k1==0)
        {
                while(k1==0);
                key= 1;
        }
        if(k2==0)
        {
                while(k2==0);
                key=2;
        }
        if(k3==0)
        {
                while(k3==0);
                begin =1;
        }
        if(k4==0)
        {
                while(k4==0);
                clear = 1;
        }
}
void main()
{
        TMOD=0x01;
       
        TH0=(65536-46080)/256;
        TL0=(65536-46080)%256;
        ET0=1;
        EA=1;
        a0=table[16];
        beep =1;
        P1=0xff;
        begin=0;
        key=0;
        end = 0;
        fangui = 0;
        while(1)
        {
                keyscan();//按键扫描
                if(begin)
                {
                        if(!end)
                                TR0=1;//开始计时
                                if(pp==20)//定时1s
                                {
                                        pp=0;
                                        daojishi--;
                                }
                                if(key!=0)
                                {
                                        a0=key;
                                        end = 1;
                                        daojishi = 0;
                                }
                                if(!daojishi)
                                {
                                        TR0=0;
                                        pp=0;
                                }

                }
                else
                {       
                        if(key!=0)
                        {
                                fangui=1;
                                a0 = key;
                        }
                }
                if(clear)
                {
                        a0=0;key=0;begin=0;fangui=0;beep=1;daojishi=5;clear=0;
                        b0=16;c0=16;d0=16;P1=0xff;pp=0;end = 0;
                }
                d0 = daojishi;
                display(a0,b0,c0,d0);
                if(fangui)       
                {
                        beep=0;
                        P1=0x00;;
                }

        }
}

void time0() interrupt 1
{        TH0=(65536-46080)/256;
        TL0=(65536-46080)%256;
        pp++;
}



作者: admin    时间: 2016-4-4 14:29
电路图能分享吗
作者: 傲娇的奔奔    时间: 2016-5-30 15:26
好东西,谢谢
作者: MX安心    时间: 2016-6-20 11:18
东西非常不错
作者: xinshouxuexi    时间: 2016-7-30 22:21
学习了,谢谢啦
作者: cassie666    时间: 2017-12-5 11:02
很赞,学习到了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1