我正在用PIC微控制器进行这个串口通信项目.我正在使用CCS C For PIC作为编程软件.代码现在运行良好,但我想提高我的编程技能(我是一个初学者).尤其是这if条声明让我感到困扰.因为他们太多了.我怎样才能改进这一点呢?

#define bt1 pin_a0
#define bt2 pin_a1
#define bt3 pin_a2
#define bt4 pin_a3
#define bt5 pin_a4
#define bt6 pin_c0
#define bt7 pin_c1
#define bt8 pin_c2
#define bt9 pin_c3
#define bt10 pin_c4
#define bt11 pin_d0
#define bt12 pin_d1
#define bt13 pin_d2
#define bt14 pin_d3
#define bt15 pin_d4
#define enable pin_c5
#define tx pin_c6
#define rx pin_c7

#int_rda
void rda_isr(void)
{
  disable_interrupts(int_rda);
  output_high(pin_d7);
}

void main()
{
  set_tris_a(0xFF);
  set_tris_b(0x00);
  set_tris_c(0xFF);
  set_tris_d(0xFF);
  set_tris_e(0x00);

  output_high(tx);
  output_low(rx);
  output_high(enable);

  enable_interrupts(int_rda);
  enable_interrupts(GLOBAL);

  lcd_init();

  while(TRUE)
  {
    if(input(bt1))     puts("\fbuton 1");
    if(input(bt2))     puts("\fbuton 2");
    if(input(bt3))     puts("\fbuton 3");
    if(input(bt4))     puts("\fbuton 4");
    if(input(bt5))     puts("\fbuton 5");
    if(input(bt6))     puts("\fbuton 6");
    if(input(bt7))     puts("\fbuton 7");
    if(input(bt8))     puts("\fbuton 8");
    if(input(bt9))     puts("\fbuton 9");
    if(input(bt10))     puts("\fbuton 10");
    if(input(bt11))     puts("\fbuton 11");
    if(input(bt12))     puts("\fbuton 12");
    if(input(bt13))     puts("\fbuton 13");
    if(input(bt14))     puts("\fbuton 14");
    if(input(bt15))     puts("\fbuton 15");
  }
}

推荐答案

  1. 将您的按钮别针放入数组:
const unsigned char pins[] = {bt1, bt2, ... bt_15};
  1. 循环访问此数组
  while(TRUE)
  {
      for(int index = 1; index <= sizeof(pins); index++)
      {
          if(input(pins[index - 1]))     printf("\fbuton %d", index);
      }
  }

C++相关问答推荐

如何在C中的空指针函数中传递浮点值

librsvg rsvg_handle_get_dimensions获取像素大小与浏览器中的渲染大小没有不同

了解一些CLIPS原语数据类型

为什么写入系统调用打印的字符数不正确?

C语言中字符数组声明中的标准

使用NameSurname扫描到两个单独的字符串

GCC引发不明确的诊断消息

如何在C语言中正确打印图形

用gcc-msse 2编译的C程序包含AVX 1指令

这个计算C中阶乘的函数正确吗?

在for循环中指向数组开头之前

为什么未初始化的 struct 的数组从另一个数组获取值?

覆盖读取函数,但当文件描述符为3或4时,我有问题

不确定如何处理此编译错误

无法识别C编程语言的语法,如书中所示

我不知道为什么它不能正常工作,我用了get()和fget(),结果是一样的

使用正则表达式获取字符串中标记的开始和结束

宏观;S C调深度

C23标准是否向后兼容?

C 预处理器中的标记分隔符列表