SweetIncubus 2019-04-05 22:03 采纳率: 0%
浏览 504

Arduino串口通信和数码管问题

本人做的项目需要串口通信,根据读取不同的值在数码管上显示不同的数字

char buf;    //定义串口发送的内容
//设置阴极接口
int a = 1;
int b = 2;
int c = 3;
int d = 4;
int e = 5;
int f = 6;
int g = 7;
int p = 8;
//设置阳极接口
int d4 = 9;
int d3 = 10;
int d2 = 11;
int d1 = 12;
unsigned char num[17][8] =
{
  //a  b  c  d  e  f  g  h
  {0, 0, 0, 0, 0, 0, 1, 1},     //0
  {1, 0, 0, 1, 1, 1, 1, 1},     //1
  {0, 0, 1, 0, 0, 1, 0, 1},     //2
  {0, 0, 0, 0, 1, 1, 0, 1},     //3
  {1, 0, 0, 1, 1, 0, 0, 1},     //4
  {0, 1, 0, 0, 1, 0, 0, 1},     //5
  {0, 1, 0, 0, 0, 0, 0, 1},     //6
  {0, 0, 0, 1, 1, 1, 1, 1},     //7
  {0, 0, 0, 0, 0, 0, 0, 1},     //8
  {0, 0, 0, 0, 1, 0, 0, 1},     //9
  {1, 1, 1, 0, 1, 1, 1, 0},     //A
  {1, 1, 1, 1, 1, 1, 1, 0},     //B
  {1, 0, 0, 1, 1, 1, 0, 0},     //C
  {1, 1, 1, 1, 1, 1, 0, 0},     //D
  {1, 0, 0, 1, 1, 1, 1, 0},     //E
  {1, 0, 0, 0, 1, 1, 1, 0},     //F
  {0, 0, 0, 0, 0, 0, 0, 0},     //.
};
void setup()
{
Serial.begin(9600);   //设置比特率,此行若去掉则数码管正常显示
  pinMode(d1, OUTPUT);
  pinMode(d2, OUTPUT);
  pinMode(d3, OUTPUT);
  pinMode(d4, OUTPUT);
  pinMode(a, OUTPUT);
  pinMode(b, OUTPUT);
  pinMode(c, OUTPUT);
  pinMode(d, OUTPUT);
  pinMode(e, OUTPUT);
  pinMode(f, OUTPUT);
  pinMode(g, OUTPUT);
  pinMode(p, OUTPUT);
}
void loop()
{
  buf = Serial.read();
  if (buf == 'a')
  {
    for (int q = 0; q < 125; q++)
    {
      Display(1, 0);
      Display(2, 0);
      Display(3, 0);
      Display(4, 0);
    }
  }
}
void Display(unsigned char com, unsigned char n)    //显示函数,com可选数值范围1-4,num可选数值范围0-9
{
  digitalWrite(a, HIGH);     //去除余晖
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  digitalWrite(p, HIGH);
  switch (com)          //选通位选
  {
    case 1:
      digitalWrite(d1, HIGH);  //选择位1
      digitalWrite(d2, LOW);
      digitalWrite(d3, LOW);
      digitalWrite(d4, LOW);
      break;
    case 2:
      digitalWrite(d1, LOW);
      digitalWrite(d2, HIGH);  //选择位2
      digitalWrite(d3, LOW);
      digitalWrite(d4, LOW);
      break;
    case 3:
      digitalWrite(d1, LOW);
      digitalWrite(d2, LOW);
      digitalWrite(d3, HIGH);  //选择位3
      digitalWrite(d4, LOW);
      break;
    case 4:
      digitalWrite(d1, LOW);
      digitalWrite(d2, LOW);
      digitalWrite(d3, LOW);
      digitalWrite(d4, HIGH);  //选择位4
      break;
    default: break;
  }
  digitalWrite(a, num[n][0]);     //a查询码值表
  digitalWrite(b, num[n][1]);
  digitalWrite(c, num[n][2]);
  digitalWrite(d, num[n][3]);
  digitalWrite(e, num[n][4]);
  digitalWrite(f, num[n][5]);
  digitalWrite(g, num[n][6]);
  digitalWrite(p, num[n][7]);
}

其中,加上Serial.begin(9600); 之后,数码管最上边一段不会显示
图片说明

去掉的话就可正常显示
图片说明

请问各位大佬,这是怎么回事?该怎么改?

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-09 16:17
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码