找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2812|回复: 5
收起左侧

大神帮忙指点一下。。这是乒乓球自动控制装置部分模块。。怎样通过按键控制乒乓球....

[复制链接]
ID:64215 发表于 2014-8-14 16:56 | 显示全部楼层 |阅读模式
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define lcd P0
sbit IN1=P2^1;
sbit IN0=P2^0;
sbit key1=P3^1;
sbit key2=P3^0;
sbit trig=P1^0;
sbit echo=P3^2;
sbit en=P2^7;
sbit rw=P2^5;
sbit rs=P2^6;
sbit busybit=P0^7;
//sbit P24=P2^4;
//sbit P26=P2^6;
//sbit P27=P2^7;
bit test_flag;
uchar num,num1,gao_num=1,di_num=6;
uchar tab[]="0123456789";
void wr_com(uchar com,busyflag);
unsigned char timer1;
void juli();
void delay1(uchar i)
{ uchar x,y;
  for(x=i;x>0;x--)
   for(y=125;y>0;y--);
}
void delay(uint temp)         //延时
{
while(temp--);
//1620-14.99ms
//520-5ms
//5-450ns
}
void lcd_init(void)         //1602初始化
{
delay(1650);//time
wr_com(0x38,0);
delay(550);//time
wr_com(0x38,0);
delay(550);
wr_com(0x38,0);
wr_com(0x38,1);
wr_com(0x08,1);
wr_com(0x01,1);
wr_com(0x06,1);
wr_com(0x0c,1);
}
void init(void)                  //外部中断  和  定时器初始化
{
// P24=0;
// P26=1;
// P0=0x00;
// P26=0;
// P27=1;
// P0=0xff;
// P27=0;
TMOD=0x01;
TH0=0;
TL0=0;
TR0=0;//
IT0=1;
EX0=1;
EA=1;
lcd_init();
}
void testbusy(void)//read com       
{
busybit=1;
en=0;
rs=0;
rw=1;
delay(5);
en=1;
delay(5);
while (busybit);
en=0;
}
void wr_dat(uchar dat,busyflag)           //写操作
{
if(busyflag)
testbusy();
en=0;
rs=1;
rw=0;
lcd=dat;
delay(5);
en=1;
delay(5);
en=0;
}
void wr_com(uchar com,busyflag)                   //写指令
{
if(busyflag)
testbusy();
en=0;
rs=0;
rw=0;
lcd=com;
delay(5);
en=1;
delay(5);
en=0;
}
uint test_distance(void)                         //距离
{
uint value;
TH0=0;
TL0=0;
trig=0;
_nop_();
trig=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
trig=0;
while(!echo);
TR0=1;
while(echo);
TR0=0;
value=TH0*256+TL0;
return value;
}
void int0_srv() interrupt 0                                        //外部定时器终端
{
test_flag=1;
}
void key()                                                                   //按键
{
if(key1==0)
{
         delay(5);
            if(key1==0)
          {  
              num++;
              if(num==4)
               num=3;
              while(!key1);

          }
}
if(key2==0)
          {
             delay(5);
             if(key2==0)
             {if(num!=0)
             num--;
                         else
                         num=0;
              while(!key2);
             }
             }

}
void dispose()
{
  switch(num)
  {
  case 0:gao_num=1;
         di_num=6;
                 break;
  case 1:gao_num=2;
         di_num=5;
                 break;
  case 2:gao_num=3;
         di_num=4;
                 break;
  case 3:gao_num=4;
         di_num=3;
                 break;
  case 4:gao_num=5;
         di_num=2;
                 break;
  case 5:gao_num=6;
         di_num=1;
                 break;
  case 6:gao_num=0;
         di_num=0;
                 break;
//  case 7:gao_num=0;
//         di_num=0;
//                 break;
  }
}
void qudong()
{         
        uchar i;
        IN0=0;
  if(di_num!=0)
           {
           for(i=0;i<di_num;i++)
              {
                  IN1=0;
                  delay1(10);
        }
                }
         for(i=0;i<gao_num;i++)
            {
                IN1=1;
                delay1(10);
                }
                }

void main()                                                         //主函数                                                                             //距离显示
{ uint value;
uint a,b,c,d,e;
init();
  while(1){

if(test_flag)
  {               
   test_flag=0;  
   EA=0;
   value=test_distance();
   a=value/100;
   b=a/2;
   c=b*340;
   e=c/10;
   a=e/1000;
   b=(e%1000)/100;
   c=((e%1000)%100)/10;
   d=e%10;
   delay(10);
   EA=1;}
  key();
  dispose();
  qudong();
  wr_com(0x80,1);
  delay(5);
  wr_dat(tab[a],1);
  delay(5);
  wr_dat('.',1);
  delay(5);
  wr_dat(tab[b],1);
  delay(5);
  wr_dat(tab[c],1);
  delay(5);
  wr_dat(tab[d],1);
  delay(5);
  wr_dat('m',1);
  delay(5);
  }
}


回复

使用道具 举报

ID:1 发表于 2014-8-14 20:44 | 显示全部楼层
电路图呢  没有电路图 无法看啊
回复

使用道具 举报

ID:1 发表于 2014-8-14 20:51 | 显示全部楼层
sbit key1=P3^1;
sbit key2=P3^0; 这里定义了 2个按键
回复

使用道具 举报

ID:64215 发表于 2014-8-15 08:53 | 显示全部楼层
恩呢。。
回复

使用道具 举报

ID:64215 发表于 2014-8-15 08:54 | 显示全部楼层
admin 发表于 2014-8-14 20:51
sbit key1=P3^1;
sbit key2=P3^0; 这里定义了 2个按键

你有乒乓球自动控制装置的程序吗?
回复

使用道具 举报

ID:195259 发表于 2017-5-5 19:56 | 显示全部楼层
整体发一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表