世俱杯 2025

登录 免费注册 世俱杯 2025 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

请大家帮忙看看8051与CD4094程序错在哪里?

作者:cxiang2001 栏目:单片机
请大家帮忙看看8051CD4094程序错在哪里?
请大家帮忙看看8051CD4094程序错在哪里?

void SEND_BIT(unsigned CHAR NUMBER,bit i)
{
       if(NUMBER/4==0) {LED_D1=i;}
  else if(NUMBER/4==1) {LED_D2=i;}
  else if(NUMBER/4==2) {LED_D3=i;}
  else if(NUMBER/4==3) {LED_D4=i;}
  

       /* if((NUMBER/4)==0) {LED_D1=i;LED_D2=0;LED_D3=0;LED_D4=0;}
  else if((NUMBER/4)==1) {LED_D2=i;LED_D1=0;LED_D3=0;LED_D4=0;}
  else if((NUMBER/4)==2) {LED_D3=i;LED_D1=0;LED_D2=0;LED_D4=0;}
  else if((NUMBER/4)==3) {LED_D4=i;LED_D1=0;LED_D2=0;LED_D3=0;}
  */
  LED_CLK=0;
   _nop_();
  _nop_();
  _nop_();
  _nop_();
  LED_CLK=1;
    _nop_();
  _nop_();
    _nop_();
  _nop_();
  
}



void Led_Onebit(unsigned CHAR bitNUMBER,unsigned int Disp_data)
{
  unsigned CHAR i=0;
  unsigned CHAR shiftdata=0;
  unsigned CHAR pp;
// CLS_BIT;
{ LED_STR=0;LED_S1=1;LED_S2=1;LED_S3=1;LED_S4=1;} //关闭显示   避象传输过程中,各LED的"暗红"现象
SWITCH(bitNUMBER%4)  //表示某区中的第几位
{
  case 0:pp=(Disp_data/1000)%10;LED_S1=0;break;
  case 1:pp=(Disp_data/100)%10;LED_S2=0;break;
  case 2:pp=(Disp_data/10)%10;LED_S3=0;break;
  case 3:pp= Disp_data%10;LED_S4=0;break;
  default:break;
}
   
    //shiftdata=DISP_CODE[pp];
   if(bitNUMBER==8)
   shiftdata=0xad;
   else shiftdata=0xbf;
    for(i=0;i<8;i++)
     {

      if(shiftdata&0x80)   SEND_BIT(bitNUMBER,1);  
                     else  SEND_BIT(bitNUMBER,0);
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     shiftdata<<=1;
    
     }
   LED_STR=1;  //置后
   LED_CLK=0;
   
}


* - 本贴最后修改时间:2006-2-22 9:59:35 修改者:cxiang2001

2楼: >>参与讨论
dguoli911
CD4094吧?
 
3楼: >>参与讨论
cxiang2001
是的啊
CD4094

4楼: >>参与讨论
AIRWILL
出啥问题了啦?
 
5楼: >>参与讨论
cxiang2001
对不起,我问题没描述清楚
是这样的:
我硬件电路是没错的,用的是8052单片机,现在是用LED_D1,LED_D2,LED_D3,LED_D4,LED_S1,LED_S2,LED_S3,LED_S4,LED_STR,LED_CLK,共10根线来驱动16个数码管,分为四组1,2,3,4,每组并联四个数码管(均通过LED_S1,LED_S2,LED_S3,LED_S4实现位选)  出现的问题是,单独显示第一组,第三组都是正确的,但是,单独显示第二组或第四组都是无显示,若同时显示四组16个数码管,则第2组与第1组雷同,但不完全相同;第四组与第3组雷同,但不完全相同  现在的程序是:  请各位帮忙给看看-----------非常感谢


void SEND_TO_CD4094(unsigned CHAR bitnum)
{
  unsigned CHAR i=0;  //show Zone
  unsigned CHAR TEMP[4]={0};
  unsigned CHAR pp=0;
  
      if(bitnum==0) {TEMP[0]=0xbb;TEMP[1]=0xbb;TEMP[2]=0xb7;TEMP[3]=0x3d;}
else if(bitnum==1) {TEMP[0]=0x88;TEMP[1]=0xb7;TEMP[2]=0x3d;TEMP[3]=0x89;}
else if(bitnum==2) {TEMP[0]=0x3d;TEMP[1]=0x3d;TEMP[2]=0xbf;TEMP[3]=0xbf;}
else if(bitnum==3) {TEMP[0]=0xad;TEMP[1]=0xad;TEMP[2]=0x89;TEMP[3]=0xaf;}

   for(i=0;i<8;i++)
      {
         if(TEMP[0]&0x80)  P0|=(1<<4);  else P0&=~(1<<4); //Zone 1
     if(TEMP[1]&0x80)  P0|=(1<<5);  else P0&=~(1<<5);  //Zone 2
      if(TEMP[2]&0x80)  LED_D3=1;  else LED_D3=0; //Zone 3
     if(TEMP[3]&0x80)  LED_D4=1;  else LED_D4=0; //Zone 4
      
             
     LED_CLK=0;
     _nop_();
     _nop_(); _nop_();
     _nop_(); _nop_();
     _nop_();
      LED_CLK=1;
     _nop_();
     _nop_(); _nop_();
     _nop_(); _nop_();
     _nop_();
           

      TEMP[0]<<=1; TEMP[1]<<=1; TEMP[2]<<=1; TEMP[3]<<=1;
      }

   
}


void Led_Onebit(unsigned CHAR bitnumber)
{
  unsigned CHAR i=0;
  unsigned CHAR shiftdata=0;
  unsigned CHAR pp=0;

    LED_STR=0;   //关闭显示   避象传输过程中,各LED的"暗红
  SEND_TO_CD4094(bitnumber);
  SWITCH(bitnumber)  //表示某区中的第几位
  {
   case 0:LED_S1=0;LED_S2=1;LED_S3=1;LED_S4=1;break;
   case 1:LED_S2=0;LED_S1=1;LED_S3=1;LED_S4=1;break;
   case 2:LED_S3=0;LED_S2=1;LED_S1=1;LED_S4=1;break;
   case 3:LED_S4=0;LED_S2=1;LED_S3=1;LED_S1=1;break;
   default:break;
  }
  LED_STR=1;
  delay(1);

}


void main(void)
{
   Init_devices();

  
  for(;;)
  {  delay(2);
    for(Disp_Bit=0;Disp_Bit<4;Disp_Bit++)
      {Led_Onebit(Disp_Bit);
        delay(2);
  
                       }
  }
  

}


参与讨论
昵称:
讨论内容:
 
 
相关帖子
我想测试某芯片的电器特性该怎么测?
请大家看看偶这样的数据接受与存放有问题吗 ?
请问21IC的FTP下载的KeilC51v750a_Full.rar的解压密码!
寻求电磁炉成熟方案芯片,
c语言的问题:怎么能使单片机判断从串口读的指令已经结束了呢?


Copyright © 1998-2006 tgdrjb.cn 浙ICP证030469号