You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于4位输入生成对应字符的PIC18F4520编程实现求助

PIC18F4520 4路输入转字符实现代码(XC8环境)

第一步:PORTA端口初始化

PIC18F4520的PORTA引脚默认复用模拟输入功能,需要先关闭AD功能再设置为输入模式:

#include <xc.h>
// 请根据你的硬件配置修改配置位,以下为示例配置位
#pragma config OSC = HS, WDT = OFF, LVP = OFF, PBADEN = OFF

void IO_Init(void)
{
    ADCON1 = 0x0F; // 将所有PORTA引脚设置为数字IO模式
    TRISA |= 0x0F; // RA0~RA3设为输入,对应连接A、B、C、D四路信号
}

第二步:输入转字符功能实现

采用查表法实现4位输入到字符的映射,执行效率最高,仅需对照你提供的真值表修改映射数组的内容即可:

unsigned char InputToChar(void)
{
    // 读取PORTA低4位,屏蔽高位干扰,得到范围0~15的输入索引
    unsigned char input_idx = PORTA & 0x0F;
    
    // 映射表:请对照你的真值表按顺序替换每个位置的字符即可
    // 数组下标0对应输入DCBA=0000,下标1对应DCBA=0001,以此类推
    unsigned char map_table[16] = {
        '0', '1', '2', '3',
        '4', '5', '6', '7',
        '8', '9', 'A', 'B',
        'C', 'D', 'E', 'F'
    };
    
    return map_table[input_idx];
}

使用说明

  • 若你的输入信号是RA0对应最高位,可将读取输入的代码修改为input_idx = (PORTA & 0x0F) >> 3 | (PORTA & 0x07) << 1调整位序
  • 若输入信号存在抖动,可在读取PORTA前增加10~20ms的软件延时,或做3次读值一致性判断再查表
  • 若你需要输出七段数码管的段码,直接将map_table的内容替换为对应真值表的段码值即可

内容的提问来源于stack exchange,提问作者Fiidisks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 01:24:03