|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
请大家帮忙看看8051与CD4094程序错在哪里? |
作者:cxiang2001 栏目:单片机 |
请大家帮忙看看8051与CD4094程序错在哪里? 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 于 2006/2/20 19:51:00 发布:
是CD4094吧? |
3楼: | >>参与讨论 |
作者: cxiang2001 于 2006/2/21 10:56:00 发布:
是的啊 是CD4094 |
4楼: | >>参与讨论 |
作者: AIRWILL 于 2006/2/21 21:28:00 发布:
出啥问题了啦? |
5楼: | >>参与讨论 |
作者: cxiang2001 于 2006/2/22 9:53:00 发布:
对不起,我问题没描述清楚 是这样的: 我硬件电路是没错的,用的是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); } } } |
|
|
Copyright © 1998-2006 tgdrjb.cn 浙ICP证030469号 |