找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2381|回复: 0
收起左侧

同学课设 求救

[复制链接]
ID:52547 发表于 2013-8-1 17:00 | 显示全部楼层 |阅读模式
我同学要我帮他写段代码,要求是用六个按键(光电传感器类似按键挡一下一个信号,数字的)接在P3口,每个独立按键控制一位数码管显示加或者循环,都相互独立,不知为何我写的代码要不是只能两个数码管可以独立,要不就是只能一个一个抡着按并在相应位上显示,这样就不独立 下面是我的两个程序(弄好请发我邮箱!1902228532@qq.com
#include<reg52.h>//??????????????????λ
#define uint unsigned int
#define uchar unsigned char
sbit d1=P1^0;
sbit d2=P1^1;
sbit d3=P1^2;
sbit d4=P1^3;
sbit d5=P1^4;
sbit d6=P1^5;
sbit d7=P1^6;
sbit dula=P2^6;
sbit wela=P2^7;
sbit zhi0=P3^0;
sbit zhi1=P3^1;
sbit zhi2=P3^2;
sbit zhi3=P3^3;
sbit zhi4=P3^4;
sbit zhi5=P3^5;
sbit zhi6=P3^6;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar num,flag,aa,bb,cc,ba,sh,g,din,pin_value;
//void display(uchar aa,uchar bb,uchar cc,uchar ba,uchar sh,uchar g,uchar din);
void zhiscan();
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
  for(y=250;y>0;y--);
}
void main()
{
   
while(1)
  {
  if(flag==0)
        {zhiscan();  //flag=1;
          delay(250);
        }     //display(aa,bb,cc,ba,sh,g,din);
        }
  d1=1;d2=1; d3=1; d4=1;d5=1; d6=1; d7=1;
               /* delay(250);
       dula=1;
       P0=table[num];
       dula=0; */
   
  
}
void zhiscan()
{
P3=0xff;
pin_value=P3;
switch(pin_value)
{
case 0xfe:zhi0=0;
wela=1;P0=0xfe;wela=0;if(zhi0==0)din++;d1=0;delay(10);
dula=1;P0=table[din];dula=0;delay(10);if(din==10)din=0;
break;
case 0xfd:zhi1=0;
wela=1;P0=0xfd;wela=0;if(zhi1==0)g++;d2=0;delay(10);
dula=1;P0=table[g];dula=0;delay(10);if(g==10)g=0;
break;
case 0xfb:zhi2=0;
wela=1;P0=0xfb;wela=0;if(zhi2==0)sh++;d3=0;delay(10);
dula=1;P0=table[sh];dula=0;if(sh==10)sh=0;delay(10);
break;
case 0xf7:zhi3=0;
wela=1;P0=0xf7;wela=0;if(zhi3==0)ba++;d4=0;delay(10);
dula=1;P0=table[ba];dula=0;if(ba==10)ba=0;delay(10);
break;
case 0xef:zhi4=0;
wela=1;P0=0xef;wela=0;if(zhi4==0)cc++;d5=0;delay(10);
dula=1;P0=table[cc];dula=0;if(cc==10)cc=0;delay(10);
break;
case 0xdf:zhi5=0;
wela=1;P0=0xdf;wela=0;if(zhi5==0)bb++;d6=0;delay(10);
dula=1;P0=table[bb];dula=0;if(bb==10)bb=0;delay(10);
break;
case 0xbf:zhi6=0;
wela=1;P0=0xbf;wela=0;if(zhi6==0)aa++;d7=0;delay(10);
dula=1;P0=table[aa];dula=0;if(aa==10)aa=0;delay(10);
break;
}}

#include<reg52.h>//只可以两个工作且只能轮流
#define uint unsigned int
#define uchar unsigned char
sbit d1=P1^0;
sbit d2=P1^1;
sbit d3=P1^2;
sbit d4=P1^3;
sbit d5=P1^4;
sbit d6=P1^5;
sbit d7=P1^7;
sbit dula=P2^6;
sbit wela=P2^7;
sbit zhi0=P3^0;
sbit zhi1=P3^1;
sbit zhi2=P3^2;
sbit zhi3=P3^3;
sbit zhi4=P3^4;
sbit zhi5=P3^5;
sbit k1=P3^6;
sbit k2=P3^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar num,flag;
void zhiscan();
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
  for(y=250;y>0;y--);
}
void main()
{
if(k1==0)
{
P1=~P1;
}
if(k2==0)  
        {
     delay(1);
     if(k2==0)
     {
      d7=0;
                          delay(1);
               d7=1;
     }
              }
while(1)
  {      
   
   if(flag==0){
             zhiscan();

            }
  d1=1;d2=1; d3=1; d4=1;d5=1; d6=1;
               
   
  
}}
void zhiscan()
{
if(zhi0==0)
   { wela=1;
P0=0xfe;
wela=0;
P3=0xff;
     delay(250);
     if(zhi0==0)
     {
      d1=0;
                          delay(250);
      num++;
                          delay(250);
      if(num==16)
       num=0;
     }
     while(!zhi0);
     delay(250);
     while(!zhi0);
                delay(250);
       dula=1;
       P0=table[num];
       dula=0;
            
    }
       if(zhi1==0)
   {  wela=1;
               P0=0xfd;
               wela=0;
               P3=0xff;
     delay(250);
     if(zhi1==0)
     {
      d2=0;
                          delay(250);
      num++;
                          delay(250);
      if(num==16)
       num=0;
     }
     while(!zhi1);
     delay(250);
     while(!zhi1);
                delay(250);
       dula=1;
       P0=table[num];
       dula=0;
    }
        if(zhi2==0)   
          {       wela=1;
               P0=0xfb;
               wela=0;
               P3=0xff;
     delay(250);
     if(zhi2==0)
     {
           d3=0;
                          delay(250);
      num++;
                          delay(250);
      if(num==16)
       num=0;
     }
     while(!zhi2);
     delay(250);
     while(!zhi2);
                delay(250);
       dula=1;
       P0=table[num];
       dula=0;
    }
   if(zhi3==0)
   
       {  wela=1;
               P0=0xf7;
               wela=0;
               P3=0xff;
     delay(250);
     if(zhi3==0)
     {
      d4=0;
                          delay(250);
      num++;
                          delay(250);
      if(num==16)
       num=0;
     }
     while(!zhi3);
     delay(250);
     while(!zhi3);
                delay(250);
       dula=1;
       P0=table[num];
       dula=0;
    }
   if(zhi4==0)
   
         {         wela=1;
               P0=0xef;
               wela=0;
               P3=0xff;
     delay(250);
     if(zhi4==0)
     {
      d5=0;
                          delay(250);
      num++;
                          delay(250);
      if(num==16)
       num=0;
     }
     while(!zhi4);
     delay(250);
     while(!zhi4);
                delay(250);
       dula=1;
       P0=table[num];
       dula=0;
    }
  if(zhi5==0)
   
        {  wela=1;
               P0=0xdf;
               wela=0;
               P3=0xff;
     delay(250);
     if(zhi5==0)
     {
      d6=0;
                          delay(250);
      num++;
                          delay(250);
      if(num==16)
       num=0;
     }
     while(!zhi5);
     delay(250);
     while(!zhi5);
                delay(250);
       dula=1;
       P0=table[num];
       dula=0;
            
}
  }

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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