圣龙扬特-AVR电子

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2315|回复: 13
打印 上一主题 下一主题

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

[复制链接]

13

主题

1

好友

322

积分

中级会员

Rank: 3Rank: 3

UID
217
帖子
42
精华
0
注册时间
2013-3-5
在线时间
13 小时
跳转到指定楼层
楼主
发表于 2013-3-5 21:59:56 |只看该作者 |倒序浏览
数码管的8段  不是接在一个P口  而是接在不同的P口   程序中要怎么处理

回复

使用道具 举报

6

主题

0

好友

627

积分

高级会员

Rank: 4

UID
43
帖子
33
精华
0
注册时间
2013-2-27
在线时间
8 小时
沙发
发表于 2013-3-5 22:42:33 |只看该作者
数码管不是分了共阴极和共阳极的么?
不在同一个P口,你就不会先关闭数码管,再送数据,然后再开启这个“共阴”“共阳”的控制脚么?这不就很好的完成了么?
回复

使用道具 举报

2

主题

0

好友

3175

积分

超级版主

Rank: 8Rank: 8

UID
6
帖子
32
精华
0
注册时间
2013-2-26
在线时间
18 小时
板凳
发表于 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);
       .....其他一致
}

回复

使用道具 举报

2

主题

0

好友

419

积分

中级会员

Rank: 3Rank: 3

UID
105
帖子
55
精华
0
注册时间
2013-3-2
在线时间
15 小时
地板
发表于 2013-3-5 22:52:09 |只看该作者
刚开始的时候这个问题确实我点绕!想通了就好了!
回复

使用道具 举报

14

主题

0

好友

3519

积分

超级版主

Rank: 8Rank: 8

UID
50
帖子
115
精华
1
注册时间
2013-2-28
在线时间
39 小时

突出贡献

5#
发表于 2013-3-5 22:54:54 |只看该作者
阿黄加油~加油lu
回复

使用道具 举报

0

主题

0

好友

3014

积分

版主

Rank: 7Rank: 7Rank: 7

UID
5
帖子
2
精华
0
注册时间
2013-2-26
在线时间
2 小时
6#
发表于 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);

}


}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

回复

使用道具 举报

13

主题

1

好友

322

积分

中级会员

Rank: 3Rank: 3

UID
217
帖子
42
精华
0
注册时间
2013-3-5
在线时间
13 小时
7#
发表于 2013-3-5 23:13:00 |只看该作者
谢谢各位  嘿嘿
回复

使用道具 举报

6

主题

0

好友

627

积分

高级会员

Rank: 4

UID
43
帖子
33
精华
0
注册时间
2013-2-27
在线时间
8 小时
8#
发表于 2013-3-5 23:47:12 |只看该作者
  1. #define M_SET_BIT(B,n)  do{B |= (0x01<<n);}while(0)
  2. #define M_CLR_BIT(B,n)  do{B &= ~(0x01<<n);}while(0)

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

  6. int main(void)
  7. {
  8.     M_OPEN_SEG_A();
  9.     //...
  10.    
  11.     return 0;
  12. }
复制代码
这样行么?
回复

使用道具 举报

26

主题

1

好友

3446

积分

超级版主

Rank: 8Rank: 8

UID
7
帖子
140
精华
0
注册时间
2013-2-26
在线时间
20 小时

突出贡献

9#
发表于 2013-3-6 08:45:38 |只看该作者
阿黄,高!
回复

使用道具 举报

0

主题

2

好友

256

积分

中级会员

Rank: 3Rank: 3

UID
122
帖子
11
精华
0
注册时间
2013-3-2
在线时间
4 小时
10#
发表于 2013-3-6 09:14:42 |只看该作者
路过!!
回复

使用道具 举报

0

主题

0

好友

569

积分

高级会员

Rank: 4

UID
35
帖子
14
精华
0
注册时间
2013-2-27
在线时间
6 小时
11#
发表于 2013-3-6 12:05:34 |只看该作者
大黄是马蜂吗 浑身指针
回复

使用道具 举报

13

主题

1

好友

322

积分

中级会员

Rank: 3Rank: 3

UID
217
帖子
42
精华
0
注册时间
2013-3-5
在线时间
13 小时
12#
发表于 2013-3-6 20:54:07 |只看该作者
枯恋凡尘 发表于 2013-3-5 22:46
比如分2个口,P1 P0,P1占用高4BIT,P0占用低4BIT
void display(unsigned char dat)
{  

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

使用道具 举报

67

主题

4

好友

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

UID
2
帖子
343
精华
0
注册时间
2013-2-20
在线时间
368 小时
13#
发表于 2013-3-6 21:52:27 |只看该作者
别人主要提供思路和方法,具体还要靠自己不断琢磨。
回复

使用道具 举报

5

主题

0

好友

393

积分

中级会员

Rank: 3Rank: 3

UID
250
帖子
17
精华
0
注册时间
2013-3-7
在线时间
30 小时
14#
发表于 2013-3-9 18:34:44 |只看该作者
别把 PA的8个 口 当成一个 口用,其实8个口是独立的!PORTA=0xff;与(PORTA|=0x80;  PORTA|=0x40;  PORTA|=0x20;··········)的现象差不多。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

Archiver|手机版|圣龙扬特-AVR电子 ( 鲁ICP备05022832号 )

GMT+8, 2024-12-22 17:23 , Processed in 0.259701 second(s), 19 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部