MSP430:P1OUT=4、P1OUT |=4、P1OUT &-=~8|P3DIR|=BIT0、P3OUT&=~BIT0 的含义的意思

首先,msp430没有P0口的,按P1口来说明
P1OUT = 4; P1.2引脚输出高电平,P1其余引脚输出低电平;
P1OUT |= 4;P1.2置高电平,P1其余引脚不变;
P1OUT &= ~8;即P1OUT &= 0xf7,P1.3置低电平,P1其余引脚不变;

|是或运算符,&是与运算符,具体请参考C语言应用运算符部分!
 
 
没有P0口把就把P0当成P1讲解把
P1OUT=4=0100;所以P1.0,P1.1,P1.3输入P1.2输出
P1OUT |=4=0100 ;所以P1.2输出
P1OUT &-=~8=-(1000)=0111;P1.3输入
不一定对,我自己的理解,我也刚看书,还望高手指点 

下边是 与 或 的详细说明,你仔细看看,这是我当时学习的时候整理的
(1)位于&经常用于测试某个位是1还是0,下面程序测试变量flag的第四位是1还是0.
#define TEST 8
main()
{
  int flag;
  ...;
  if ((flag&TEST)!=0)
    {
      printf("fourth bit is set");
    }
}
注意逻辑运算符优先级比关系运算符优先级低,必须加括号。
位与还常用来对操作数的某些位清零,或者保留某些位: a=a&0xffff 高
#include "msp430f5529.h" #include "oled.h" #include "bmp.h" #include "SysCLK.h" #include <string.h> #include <stdint.h> #include <ctype.h> // 键盘引脚定义 #define ROW_DIR P3DIR #define ROW_OUT P3OUT #define ROW_IN P3IN #define COL_DIR P3DIR #define COL_IN P3IN #define ROW0 BIT0 // P3.0 #define ROW1 BIT1 // P3.1 #define ROW2 BIT2 // P3.2 #define ROW3 BIT3 // P3.3 #define COL0 BIT4 // P3.4 #define COL1 BIT5 // P3.5 #define COL2 BIT6 // P3.6 #define COL3 BIT7 // P3.7 // 键盘布局 char key_value[4][4] = { {'7', '8', '9', '/'}, {'4', '5', '6', '*'}, {'1', '2', '3', '-'}, {'C', '0', '=', '+'} }; // 计算器状态 #define MAX_INPUT 32 char input_buffer[MAX_INPUT] = {0}; uint8_t input_pos = 0; float result = 0; void Keyboard_Init() { // 行设置为输出,列设置为输入 ROW_DIR |= ROW0 | ROW1 | ROW2 | ROW3; COL_DIR &= ~(COL0 | COL1 | COL2 | COL3); // 使能列上拉电阻 P3REN |= COL0 | COL1 | COL2 | COL3; P3OUT |= COL0 | COL1 | COL2 | COL3; } char Key_Scan() { char row, col; for (row = 0; row < 4; row++) { // 拉低当前行 ROW_OUT &= ~(1 << row); __delay_cycles(500); // 消抖 // 检测列 for (col = 0; col < 4; col++) { if (!(COL_IN & (1 << (col + 4)))) { __delay_cycles(500); // 二次消抖 if (!(COL_IN & (1 << (col + 4)))) { while (!(COL_IN & (1 << (col + 4)))); // 等待释放 ROW_OUT |= ROW0 | ROW1 | ROW2 | ROW3; // 恢复行 return key_value[row][col]; } } } // 恢复行电平 ROW_OUT |= (1 << row); } return 0; } // 简单计算函数 float calculate(char* expression) { float num1 = 0, num2 = 0; char op = 0; char* ptr = expression; // 解析第一个数字 while (*ptr && (isdigit(*ptr) || *ptr == '.')) { if (*ptr == '.') { ptr++; float fraction = 0.1f; while (isdigit(*ptr)) { num1 += (*ptr - '0') * fraction; fraction *=
最新发布
04-03
引用\[2\]:最终的到如下程序,可自行对照 #include <msp430g2553.h> void main(void) { WDTCTL = WDTPW + WDTHOLD; //关闭看门狗 P1DIR |= BIT0; //设定P1.0为输出方向 for (;;) { volatile unsigned int i; P1OUT ^= BIT0; //翻转P1.0电平状态 i = 50000; //延时 do (i--); while (i != 0); } } 。 引用\[3\]:新手对该程序还有疑问的应该就剩输出寄存器(PxOUT),该寄存器用于设置对应管脚的输出电平(前提是I/O方向已设置为输出),对应位设置为0,代表该管脚输出低电平;对应位设置为1,代表该管脚输出高电平。 P1DIR |= BIT0; //将P1.0管脚方向设置为输出 P1OUT |= BIT0; //P1.0管脚输出高电平 P1OUT &= ~BIT0; //P1.0管脚输出低电平 。 问题:解释P3SEL |= 0x11; 回答: 在给定的代码中,P3SEL |= 0x11是用来设置P3.0和P3.4两个管脚的功能选择位。P3SEL寄存器用于选择管脚的功能,对应位设置为1时,该管脚将被配置为特殊功能模式。0x11是一个十六进制数,转换为二进制是00010001,表示将P3.0和P3.4两个管脚配置为特殊功能模式。 #### 引用[.reference_title] - *1* [单片机实验说明一>数字口基本使用](https://blog.youkuaiyun.com/ZhangRelay/article/details/109194115)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [MSP430学习笔记(一)--从点灯说起](https://blog.youkuaiyun.com/weixin_45879252/article/details/112387077)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值