用1片74HC138,2片74HC595级联,驱动两个4位数码管,使其循环显示1-9,但不知为何第5位数码管显示的不是5、6、7、8,而是4、5、6、7,求解答!程序与
仿真文件附上。
- void main(void)
- {
- uint16_t i;
- GPIO_config();
- DS1302_Init();
- LEDSCK=0; //清零锁存线
- LEDRCK=0; //清零时钟线
- while(1)
- {
- for(i=1;i<9;i++)
- {
- In_Data(Digital_Code[i]); //送数据百位
- ROW(i);
- delay_ms(100);
- }
- }
- }
复制代码- //74HC138定义
- #define ROW1 LEDA2=0;LEDA1=0;LEDA0=0; //0111 Y0
- #define ROW2 LEDA2=0;LEDA1=0;LEDA0=1; //1011 Y1
- #define ROW3 LEDA2=0;LEDA1=1;LEDA0=0; //1101 Y2
- #define ROW4 LEDA2=0;LEDA1=1;LEDA0=1; //1110 Y3
- #define ROW5 LEDA2=1;LEDA1=0;LEDA0=0; //1110 Y4
- #define ROW6 LEDA2=1;LEDA1=0;LEDA0=1; //1101 Y5
- #define ROW7 LEDA2=1;LEDA1=1;LEDA0=0; //1011 Y6
- #define ROW8 LEDA2=1;LEDA1=1;LEDA0=1; //0111 Y7
- /*****************************************************
- 函数名:74HC138驱动函数
- *****************************************************/
- void ROW(uint8_t h)
- {
- switch(h)
- {
- case 1: ROW1;break;
- case 2: ROW2;break;
- case 3: ROW3;break;
- case 4: ROW4;break;
- case 5: ROW5;break;
- case 6: ROW6;break;
- case 7: ROW7;break;
- case 8: ROW8;break;
- }
- LEDRCK=1;
- _nop_();
- LEDRCK=0;
- _nop_();
- }
- /*****************************************************
- 函数名:74HC595驱动函数
- *****************************************************/
- void In_Data(uint8_t m)
- {
- uint8_t x;
- for(x=0;x<8;x++)
- {
- if(m&0x80)
- {
- LEDSER=1;
- _nop_();
- }
- else
- {
- LEDSER=0;
- _nop_();
- }
- m=m<<1;
- LEDSCK=1;
- LEDSCK=0;
- }
- LEDRCK=0;
- LEDRCK=1;
- LEDRCK=0;
- }
复制代码
-
-
595级联测试.zip
下载积分: 积分 -1 分
140.23 KB, 下载次数: 46, 下载积分: 积分 -1 分
{
for(i=1;i<9;i++)
{
In_Data(Digital_Code[i]); //送数据百位
ROW(i);
delay_ms(100);
}
}
}
把数字9改成数字10就好了,你的i只能够数到1,2,3,4,5,6,7,8
#define ROW4 LEDA2=0;LEDA1=1;LEDA0=1; //1110 Y3
#define ROW5 LEDA2=1;LEDA1=0;LEDA0=0; //1110 Y4
一周热门 更多>