• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

哪个大哥帮我看这段代码是什么意思,stm32f4的!

难忘今宵 2017-03-28 浏览量:1545

哪个大哥帮我看这段代码是什么意思,stm32f4的!

/通过拼凑的方法向OLED输出一个8位数据
//data:要输出的数码
//8位对应的引脚为PE6/PE5/PB6/PC11/PC9/PC8/PC7/PC6/
void OLED_Data_Out(u8 data)
{
u16 dat=data&0X0F;
GPIOC->ODR&=~(0XF<<6);//清空6~9
GPIOC->ODR|=dat<<6;//D[3:0]-->PC[9:6]
GPIO_Write(GPIOC,dat<<6);
PCout(11)=(data>>4)&0X01;//D4
PBout(6)=(data>>5)&0X01;//D5
PEout(5)=(data>>6)&0X01;//D6
PEout(6)=(data>>7)&0X01;//D7 

最后那四行是输出高四位,这我能看明白,但前面那几行我实在看不懂,它用ODR寄存器来输出低四位,它是怎么做到让PC9.8.7.6输出低四位的?哪位大哥帮小弟解释一下!

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 0xF是1111,在左移6位后,就是对应的6789位。

    &=~是清零,两个数只要有一个为1就把ODR对应的位置成0。

    |=是赋值,0是低电平,1是高电平,这个就不用多说了吧。

    • 发布于 4小时前
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:2
  • 嗨,您好,這幾行就是再輸出低4位喔
    u16 dat=data&0X0F; //取得低4位
    GPIOC->ODR&=~(0XF<<6);//清空6~9
    GPIOC->ODR|=dat<<6;//D[3:0]-->PC[9:6],左位移對應的Register欄位並寫入
    GPIO_Write(GPIOC,dat<<6); //左位移寫入GPIO低4位,但這行會將其他位也改動到,這行應該有問題,應該要去掉
    以上供參考
    • 发布于4小时前
    • 举报
    • 评论 0
    • 0
    • 0

  • 移位输出

    其实这种程序就是简单的串转并的程序

    • 发布于3小时前
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

哪个大哥帮我看这段代码是什么意思,stm32f4的!