OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5661|回复: 5

怎样将PB和PA端口中的几位同时操作

[复制链接]

2

主题

6

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2013-9-12
在线时间
1 小时
发表于 2014-10-14 17:12:56 | 显示全部楼层 |阅读模式
5金钱
在弄一个两位数码管动态显示程序,共两路,其中端口配置如下:

 RCC->APB2ENR|=1<<3;    //使能PORTB时钟     
 RCC->APB2ENR|=1<<2;    //使能PORTA时钟 
 RCC->APB2ENR|=1<<4;    //使能PORTC时钟
 //LED PB.15    


 //LED SHU MA GUAN
 GPIOA->CRL&=0X000FFFF0;
 GPIOA->CRL|=0X33300003;
 GPIOA->ODR|=7<<5;
// GPIOA->ODR|=1<<6;
// GPIOA->ODR|=1<<7;

 GPIOA->CRH&=0XFFF00FF0;
 GPIOA->CRH|=0X00033003;
 GPIOA->ODR|=1<<8;
 GPIOA->ODR|=3<<11;
// GPIOA->ODR|=1<<12;

 GPIOB->CRL&=0X000FFF00;
 GPIOB->CRL|=0X33300033;
 GPIOB->ODR|=3<<0;
// GPIOB->ODR|=1<<1;
 GPIOB->ODR|=7<<5;
// GPIOB->ODR|=1<<6;
// GPIOB->ODR|=1<<7;

 GPIOB->CRH&=0X00000000;
 GPIOB->CRH|=0X33333333;
 GPIOB->ODR|=0xff<<8;
其中一组数码管全部由PB口的PB5-PB12控制各段。另外一组为PA口的一部分和PB口的一部分组合成的,我的问题是,如何同时操作其中一组数码管,使其显示数值,同时不影响与本数码管无关的端口。
例如,要想显示0,改怎样写呢,是GPIOB->ODR=0xa360这样,还是GPIOB->BSRR=0xff这样,或者是其他方式呢,求大神指教下,初学软件;

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

2170

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5783
金钱
5783
注册时间
2013-11-22
在线时间
1212 小时
发表于 2014-10-14 19:54:02 | 显示全部楼层
数码管各段怎么接的 有原理图吗 数码管共阴共阳?
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2013-9-12
在线时间
1 小时
 楼主| 发表于 2014-10-15 09:33:16 | 显示全部楼层
回复【2楼】lycreturn:
---------------------------------
数码管是共阴极的,端口为PB5-PB12为位选,管脚依次为b,f,a,g,c,dp,d,e。PB13,PB14为位选。另外一组是:PA5-8,PA11,PA12,PB0,PB1,位选和前面一组是一样的。现在就是想能够操作一组数码管。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-10-15 23:39:01 | 显示全部楼层
回复【3楼】aallon:
---------------------------------
上个原理图看下。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

2170

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5783
金钱
5783
注册时间
2013-11-22
在线时间
1212 小时
发表于 2014-10-16 22:54:00 | 显示全部楼层
回复【3楼】aallon:
---------------------------------
你这样试试  比如让数码管“01”
用端口PB5-PB12显示“0”  需要拉高a b c d e f,拉低g dp,那么可以通过或的方式拉高他们GPIOB->ODR|=0X1AE0;  但是要在之前先清除掉PB5-PB12的位,清除他们用与的方式:GPIOB->ODR&=0XE01F;
当然你还得打开位选,GPIOB->ODR&=~(3<<13);直接用IO口驱动估计不怎么亮;
然后用PA5-8,PA11,PA12,PB0,PB1显示”1“ 需要拉高b c,拉低a d e f g dp,清除对应的位可以这样GPIOA->ODR&=0XE61F;GPIOB->ODR&=0XFFFC; 然后拉高他们就这样 
GPIOA->ODR|=0X0820;GPIOB->ODR|=0X0000;  总得来说可以这样

GPIOB->ODR&=0XE01F; //清除数码管1的段  关显示
GPIOA->ODR&=0XE61F;//清除数码管2的段  关显示
GPIOB->ODR&=0XFFFC;//清除数码管2的段  关显示
GPIOB->ODR&=~(3<<13);//打开位选PB13,PB14,低电平有效
GPIOB->ODR|=0X1AE0;//数码管1显示“0”
GPIOA->ODR|=0X0820;//数码管2显示“1”
GPIOB->ODR|=0X0000; //数码管2显示“1”  显示“1”这句可以不用  单显示其他的数字可能就需要了
delay_ms(100);//延时一下

仅供参考 有的地方还可以合并   你可以先试试这个
回复

使用道具 举报

10

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1841
金钱
1841
注册时间
2014-6-27
在线时间
982 小时
发表于 2014-10-17 09:12:39 | 显示全部楼层
回复【3楼】aallon:
---------------------------------
这个简单啊,你做一个宏就行了,直接给个8位数据,设置对应位就行了。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-30 09:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表