OpenEdv-开源电子网

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

如题,PC0到PC7为DATA0到DATA7,怎么操作才能只改变PC0到PC7呢?

[复制链接]

17

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2014-4-16
在线时间
5 小时
发表于 2014-7-22 11:06:44 | 显示全部楼层 |阅读模式
5金钱
如题,PC0到PC7为DATA0到DATA7,怎么操作才能只改变PC0到PC7呢?比如操作数码管。

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

使用道具 举报

3

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2012-10-15
在线时间
4 小时
发表于 2014-7-22 11:14:43 | 显示全部楼层
u16 data;
  //data为你要写入的数据
 data &= 0x00ff;   //高8为全为0
 GPIOC->BSRR = data ; //将数据写入 对应位输出1
 data ^= 0x00ff;
 GPIOC->BRR = data ; //将数据写入 对应位输出0
回复

使用道具 举报

17

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2014-4-16
在线时间
5 小时
 楼主| 发表于 2014-7-22 12:32:50 | 显示全部楼层

我调的是四位共阳数码管 用的两片锁存芯片74HC573


附电路图:







程序如下:

main 函数的:

#include "stm32f10x.h"
#include "74hc573.h"

u8 DuanMa[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
u8 WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char tempdata[8];
void Display(unsigned char firstbit,unsigned char n);
u16 NUM=0;


int main(void)
{
  //HC573Init();
  LED_GPIO_Config();
 while(1)
  {
   NUM++;
   if(NUM==10000)NUM=0;
   tempdata[0]=DuanMa[NUM/1000];
   tempdata[1]=DuanMa[(NUM%1000)/100];
   tempdata[2]=DuanMa[((NUM%1000)%100)/10];
   tempdata[3]=DuanMa[((NUM%1000)%100)%10];
   //HC573_DPY_num(NUM);
   Display(0,4);
   delay_nus(0xff);
    } 
}


void Display(unsigned char firstbit,unsigned char n)
{
 unsigned char i=0;

  GPIO_SetBits(GPIOC, 0xff & 0xff);
  GPIO_ResetBits(GPIOC, (~0xff & 0xff));
   HC573_LE_D_H();
  //delay_nus(1);
  HC573_LE_D_L();
 
  GPIO_SetBits(GPIOC, (WeiMa[i+firstbit]) & 0xff);
  GPIO_ResetBits(GPIOC, (~(WeiMa[i+firstbit]) & 0xff));
  //DATAOUT(WeiMa[i+firstbit]);
  HC573_LE_W_H();
  //delay_nus(1);
  HC573_LE_W_L();
 
  GPIO_SetBits(GPIOC, (tempdata) & 0xff);
  GPIO_ResetBits(GPIOC, (~(tempdata) & 0xff));
  //DATAOUT(tempdata);
  HC573_LE_D_H();
  //delay_nus(1);
  HC573_LE_D_L();
 
  //delay_nus(1);
 
   i++;
   if(i==n)
  i=0;
}






74HC573.C的

void LED_GPIO_Config(void)
{
 GPIO_InitTypeDef GPIO_InitStructure;
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
 //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);


 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|

GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
 GPIO_Init(GPIOC, &GPIO_InitStructure);

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
 GPIO_Init(GPIOA, &GPIO_InitStructure);                                  

}





void delay_nus(u16 time)// ???±1us
{
 u16 i=0;
 while(time--)
  {
   i=12;
   while(i--);
  }
}



感觉的都没问题的,调了好久显示不对,我想显示0-9999的。帮帮忙啊!谢谢!

回复

使用道具 举报

17

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2014-4-16
在线时间
5 小时
 楼主| 发表于 2014-7-22 12:34:30 | 显示全部楼层
回复【2楼】Okbu:
---------------------------------
这个我知道的,但是数码管跳不对,有经验吗?帮忙看看!
回复

使用道具 举报

17

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2014-4-16
在线时间
5 小时
 楼主| 发表于 2014-7-22 12:44:21 | 显示全部楼层
原子哥,帮帮忙呐!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-7-23 00:07:40 | 显示全部楼层
回复【5楼】天使的诺言:
---------------------------------
建议仿真解决问题。
你这个用仿真器,很好处理。
单步跟踪,看输出状态,然后分析问题。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

17

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2014-4-16
在线时间
5 小时
 楼主| 发表于 2014-7-23 08:56:08 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
谢谢原子哥,问题解决了!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-4 20:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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