| 
 
| 最近在做2片74hc595的级联 动态显示5位数码管电路图如下: 其中主要的数据传输函数是这样的:
 /****************发送位码和段码给HC595******************* /
 void HC595_In(uint8_t data)
 {
 uint8_t i;
 for(i = 0; i < 8; i++)                                 // 循环8次,刚好移完8位
 {
 LPC_GPIO1->FIOCLR = HC595_SCLK;                    // 先将移位寄存器时钟控制引脚置0
 if(((data << i) & 0x80))
 LPC_GPIO1->FIOSET = HC595_SI;                  // 最高位与data左移的最高位进行逻辑运算,为1则发送1,否则发送0
 else
 LPC_GPIO1->FIOCLR = HC595_SI;
 LPC_GPIO1->FIOSET = HC595_SCLK;                    // 再将时钟置为1,产生移位时钟上升沿,使移位寄存器的数据移位(左移)
 NOP();
 }
 }
 /****************HC595的并行输出***************/
 void HC595_Out(void)
 {
 LPC_GPIO1->FIOCLR = HC595_PD;
 LPC_GPIO1->FIOCLR = HC595_CS;
 NOP();
 
 LPC_GPIO1->FIOSET = HC595_PD;
 LPC_GPIO1->FIOSET = HC595_CS;
 NOP();
 }
 /****************数据显示*******************************************/
 void HC595_Display(uint8_t num)   //只显示两位
 {
 uint8_t shi,ge;
 shi = num /10;
 ge = num % 10;
 
 HC595_In(wei[0]);      //对应的位选码
 HC595_In(duan[shi]); //对应的段选码
 HC595_Out();
 Delay_ms(5);
 
 HC595_In(wei[1]);
 HC595_In(duan[ge]);
 HC595_Out();
 Delay_ms(5);
 }
 
 问题是:数字显示没问题,也就是段选都是对的。然而,位选是明显的错误。显示的位置根本不对应啊。
 第一次发帖求助,希望大家多多帮忙。
 
 
 | 
 
×本帖子中包含更多资源您需要 登录 才可以下载或查看,没有账号?注册 
  |