【发布时间】:2021-04-17 21:35:39
【问题描述】:
基本上,我试图将 PIC18F4550 的单个端口用作输入和输出。我打算将 7 段显示器连接到端口的 7 个引脚和同一端口的 4 个引脚。四个输入用于引入从 0 到 15 (F) 的二进制数字,二进制数字将在显示屏上以十进制表示。我使用 PIC C 编译器编译代码。
更新: 在第一条评论之后我修改了代码,我认为它基本上是一样的,我只是直接读取端口 B 的输入并使用 switch-case 来发送对应的十进制数,我还添加了一个默认状态,所以当我连接时它应该是显示中的 0。这是连接图,我的老师告诉我我可以忽略逻辑门,但我不太确定,如果我想添加我只需要使用另一个端口,如端口 D 发送单个高电平或低电平取决于端口 B 的工作方式。
更新 2: 终于成功了,似乎我可以忽略逻辑门这一事实部分正确,但代码比我更容易,我只是添加了一个三端口 D 高以及 74Ls244 和 74HC573 相应输入的 EN 和 OE 的低输出,因此我可以根据端口 B 状态(输出或输入)启用或禁用。谢谢你们。
#include<18F4550.h>
#fuses XT, NOWDT, NOLVP, NOPROTECT, PUT
#use delay(clock = 4M, crystal = 8M)
#use fast_io(b)
void main(){
int8 INDSP;
int8 OUTDSP;
while(true){
SET_TRIS_B(0xFF);
INDSP = input_b()&0x0F;
switch(INDSP){
case 0b00000000:
OUTDSP = 0x3F;
break;
case 0b00000001:
OUTDSP = 0x0C;
break;
case 0b00000010:
OUTDSP = 0x76;
break;
case 0b00000011:
OUTDSP = 0x5E;
break;
case 0b00000100:
OUTDSP = 0x4D;
break;
case 0b00000101:
OUTDSP = 0x5B;
break;
case 0b00000110:
OUTDSP = 0x7B;
break;
case 0b00000111:
OUTDSP = 0x0E;
break;
case 0b00001000:
OUTDSP = 0x7F;
break;
case 0b00001001:
OUTDSP = 0x4F;
break;
case 0b00001010:
OUTDSP = 0x6F;
break;
case 0b00001011:
OUTDSP = 0x79;
break;
case 0b00001100:
OUTDSP = 0x33;
break;
case 0b00001101:
OUTDSP = 0x7C;
break;
case 0b00001110:
OUTDSP = 0x73;
break;
case 0b00001111:
OUTDSP = 0x63;
break;
DEFAULT:
OUTDSP = 0x3F;
break;
}
delay_ms(500);
SET_TRIS_B(0x00);
output_b(OUTDSP);
delay_ms(500);
}
}
【问题讨论】:
-
请提供连接图/原理图。
标签: c microcontroller pic