oszp1688com 发表于 2013-3-5 21:59:56

数码管的8段 不是接在一个P口 程序中要怎么处理

数码管的8段  不是接在一个P口  而是接在不同的P口   程序中要怎么处理

avrbase_lei 发表于 2013-3-5 22:42:33

数码管不是分了共阴极和共阳极的么?
不在同一个P口,你就不会先关闭数码管,再送数据,然后再开启这个“共阴”“共阳”的控制脚么?这不就很好的完成了么?

枯恋凡尘 发表于 2013-3-5 22:46:06

本帖最后由 枯恋凡尘 于 2013-3-5 23:09 编辑

比如分2个口,P1 P0,P1占用高4BIT,P0占用低4BIT
void display(unsigned char dat)
{  
   /*位选代码省略*/
    P1&=(dat|0x0F);
    P0&=(dat|0XF0);
}
这种是比较集中的IO,再分散的用指针,你现在也看不懂,不写了吧。
/*下面的是指针版本,没有验证过,有错请提出*/
typedef struct seg    {   
         void (*set_a)(unsigned char i);   
         void (*set_b)(unsigned char i);   
         void (*set_c)(unsigned char i);   
         void (*set_d)(unsigned char i);   
         void (*set_e)(unsigned char i);   
         void (*set_f)(unsigned char i);   
         void (*set_g)(unsigned char i);   
         void (*set_h)(unsigned char i);   
} seg_led,*p_seg_led;
/*定义一个变量*/
seg_led seg;
void set_io_a(unsigned char dat)
{
         if(dat!=0)
         {
                 P1.0=1;
         }
         else
         {
                 P1.0=0;
         }
}
void init_seg(p_seg_led seg)
{
         seg.set_a=set_io_a;
        .....其他一致懒的写
}

void display(p_seg_led s,unsigned char dat)
{
      s->set_a(dat>>7);
       .....其他一致
}

多啦A梦 发表于 2013-3-5 22:52:09

刚开始的时候这个问题确实我点绕!想通了就好了!

小毛驴 发表于 2013-3-5 22:54:54

阿黄加油~加油lu

北美海豹 发表于 2013-3-5 22:59:26

void subDisplay(char charDaata)
{
    if(charDaata&0x01)
  {
     PORTA|=1<<6;
  }
  else
{
    PORTA&=~(1<<6);

}

--------
    if(charDaata&0x80)
  {
     PORTB|=1<<7;
  }
  else
{
    PORTB&=~(1<<7);

}


}

oszp1688com 发表于 2013-3-5 23:13:00

谢谢各位  嘿嘿

avrbase_lei 发表于 2013-3-5 23:47:12

#define M_SET_BIT(B,n)  do{B |= (0x01<<n);}while(0)
#define M_CLR_BIT(B,n)  do{B &= ~(0x01<<n);}while(0)

#define M_OPEN_SEG_A()  M_SET_BIT(P1, 0) //表示P1口第一个引脚, P10
#define M_CLOSE_SEG_A() M_CLR_BIT(P1, 0)
//ABCDEFGH, 类推

int main(void)
{
    M_OPEN_SEG_A();
    //...
   
    return 0;
}这样行么?

铜河 发表于 2013-3-6 08:45:38

阿黄,高!

yingmulufei 发表于 2013-3-6 09:14:42

路过!!

★一辉︿♂︿ 发表于 2013-3-6 12:05:34

大黄是马蜂吗 浑身指针

oszp1688com 发表于 2013-3-6 20:54:07

枯恋凡尘 发表于 2013-3-5 22:46 static/image/common/back.gif
比如分2个口,P1 P0,P1占用高4BIT,P0占用低4BIT
void display(unsigned char dat)
{  


写具体一点点咯  本来看的就很吃力了:'(  最好来点注释 嘻嘻

箫天 发表于 2013-3-6 21:52:27

别人主要提供思路和方法,具体还要靠自己不断琢磨。

xzwj 发表于 2013-3-9 18:34:44

别把 PA的8个 口 当成一个 口用,其实8个口是独立的!PORTA=0xff;与(PORTA|=0x80;  PORTA|=0x40;  PORTA|=0x20;··········)的现象差不多。
页: [1]
查看完整版本: 数码管的8段 不是接在一个P口 程序中要怎么处理