This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
您好、
这个问题可能 看起来有点幼稚、但能听到我的声音。
当时、每个 PxIN 寄存器中的每个位反映相应 I/O 引脚上的输入信号值
引脚配置为 I/O 功能。 这些寄存器是只读的。
•位= 0:输入为低电平
•位= 1:输入为高电平
这是数据表中给出的值。 我的问题是、如果我将一个引脚设置为输出高电平、那么对于 PxIN 寄存器中的特定位、它是否会显示为高电平。?
谢谢你。
Viswanath
您好、Viswanath、
那么、我假设您的 LED 连接到 P1.0 - P1.3、但我不会100%低估您对端口3所做的工作?
您可以设置 P3.0-P3.3。 输出低电平、并在 for 循环中将1从 P3.0移位到 P3.3。
在 P3.4 - P3.6上启用下拉电阻之前。 那么、您的按钮连接在哪里以及它们是如何连接的?
P3.0-P3.3。 以某种方式连接到 P3.4 - P3.6?
此外、为什么您不直接将 P3OUT 和 P3IN 写入变量、而是使用逻辑 OR 写入?
在您修改的代码中、开关结构选择访问变量"t3" 、与之前的帖子相比、它从未写入、这是针对吗?
为什么您不简单地将按钮连接到启用上拉/下拉的输入引脚并读取相应的输入寄存器?
Viswanath、
因此、您有12个按钮、您可以逐行激活这些按钮、并检查 P3.4-P3.6上的输入以检查列、对吧?
但您使 t2 = t2 | p3IN、这意味着您之前的循环值存储在 t2上、因为您在 for 循环中循环0x01、0x02、0x04、0x08、我希望在 t2右侧的末尾有0xXF? 您可以通过调试器检查这一点吗?
此外、您将 p 写入 KEY 和此值、或者将其写入 P1.0、这意味着您将已启用行的值写入 P1IN、我希望所有 LED 都正确亮起? 这意味着您需要确保在不再按下按钮时 LED 已关闭。
那么、当您调试这个项目时、在没有按下按钮时、变量键的值是多少?
这意味着您是否可以更具体地说什么不起作用? 变量是什么样的?
希望这有道理。
你(们)好。
感谢你的帮助。 我已经编辑了代码、该代码起作用。
这就是我想要做的。
#include /* * main.c *// /const char keystypad[]={'1'、'2'、'3'、'4'、'5'、'6'、'7'、'8'、'9'、'*'、'0'、'#'}; unsigned int key= 0x00; unsigned int p; unsigned int keydetect ( {) unsigned int temp、i、t2; P=15; for (i=0;i<4;i++) { 温度= 0x00; T2=0x00; P3DIR = 0x00; P3DIR = BIT0|BIT1|BIT2|BIT3; P3OUT &= 0x00; P3REN = 0x70; 温度=(0x01<<i); P3OUT =温度; T2 = P3IN; 开关(T2) { 情况0x11: { P=0; 中断; } 情况0x21: { P=1; 中断; } 情况0x41: { P=2; 中断; } 情况0x12: { P=3; 中断; } 情况0x22: { P=4; 中断; } 情况0x42: { P=5; 中断; } 情况0x14: { P=6; 中断; } 情况0x24: { P=7; 中断; } 情况0x44: { P=8; 中断; } 情况0x18: { P=9; 中断; } 情况0x28: { P=10; 中断; } 情况0x48: { P=11; 中断; } } 返回 p; } void led() { P1DIR = BIT0|BIT1 |BIT2 | BIT3; key=keydetect(); P1OUT = KEY; } unsigned int main() { WDTCTL = WDTPW | WDTHOLD; PM5CTL0 &=~LOCKLPM5; while (1) { LED); } }
我只需要思考如何处理按键的去抖、但稍后会这样做
感谢您的所有帮助。
Viswanath。