给你一个示例,任意端口组合,动态驱动数码管。
- #include <reg51.H>
-
- sbit LED0=P1^6;
- sbit LED1=P3^5;
- sbit LED2=P2^3;
- sbit LED3=P2^2;
- sbit LED4=P3^3;
- sbit LED5=P1^4;
- sbit LED6=P2^6;
- sbit LED7=P3^7;
-
- sbit wei0=P2^4;
- sbit wei1=P1^5;
- sbit wei2=P3^4;
- sbit wei3=P1^0;
-
- unsigned char data table[17]={
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71,0x00};
-
- void LED_dula(unsigned char dat)
- {
- LED0=dat &0x01;
- LED1=dat>>1&0x01;
- LED2=dat>>2&0x01;
- LED3=dat>>3&0x01;
- LED4=dat>>4&0x01;
- LED5=dat>>5&0x01;
- LED6=dat>>6&0x01;
- LED7=dat>>7&0x01;
- }
-
- void LED_wela(unsigned char dat)
- {
- wei0=dat &0x01;
- wei1=dat>>1&0x01;
- wei2=dat>>2&0x01;
- wei3=dat>>3&0x01;
- }
-
- void Delay_ms(unsigned int t)
- {
- unsigned int i,j;
- for(i=t;i>0;i--)
- for(j=120;j>0;j--);
- }
-
- void main()
- {
- unsigned int i,j,k;
- while (1)
- {
- LED_wela(0xff); //位消隐
- LED_dula(table[i]); //传段码
- LED_wela(~(0x01<<i)); //传位码
- i=++i%4; //位循环计数
- if(++j>=1000) //移动显示
- {
- j=0;
- table[16]=table[0];
- for(k=0;k<16;k++)
- table[k]=table[k+1];
- }
- Delay_ms(1); //控制主循环周期
- }
- }
复制代码
|