2401_85796067 2024-06-19 15:52 采纳率: 20%
浏览 5
已结题

Porteus和Keil

img


在主系统机PC端安装“串口调试助手”应用软件,远程控制8*8点阵的显示。控制要求,当在“串口调试助手”输入指令01H时,单片机接收后并发送应答信号01H,显示屏显示“[爱心] ”;当在“串口调试助手”输入指令02H时,单片机接收后并发送应答信号
02H,显示屏显示“H”。

  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-06-19 22:29
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题分析: 我们需要完成以下3个任务:
    1. 在PC端安装“串口调试助手”应用软件
    2. 远程控制8*8点阵的显示
    3. 根据接收到的指令进行相应的操作,发送应答信号并在显示屏上显示相应的内容 解决方案:
    4. 在PC端安装“串口调试助手”应用软件 串口调试助手是一款串口通信调试工具,它能够帮助我们发送和接收串口数据。在PC端安装串口调试助手的过程,并不在此次问题的范围内。假设我们已经安装好了串口调试助手,并已经连接上串口。
    5. 远程控制88点阵的显示 我们需要使用单片机控制88点阵的显示,可以选用常见的单片机如STC89C52、AVR、Arduino等。 具体方案如下: 首先我们需要设计一个电路板,包涵单片机、8*8点阵、串口模块等元器件。这里不再赘述电路设计的细节。 接下来,我们需要编写单片机的程序或Arduino脚本。此处我们选用Arduino为例。我们需要编写代码,实现以下功能: a. 等待串口输入数据 b. 当接收到数据时,根据不同的指令,发送不同的应答信号,并在点阵上显示相应的内容 c. 如果指令无法识别,发送错误码并在点阵上显示错误信息 代码如下:
    void setup(){
      // 初始化串口
      Serial.begin(9600);
      // 设置8*8点阵的引脚
      pinMode(13, OUTPUT);
      pinMode(12, OUTPUT);
      pinMode(11, OUTPUT);
      pinMode(10, OUTPUT);
      pinMode(9, OUTPUT);
      pinMode(8, OUTPUT);
      pinMode(7, OUTPUT);
      pinMode(6, OUTPUT);
    }
    void loop(){
      if(Serial.available() > 0){  // 如果串口有数据可读
        int cmd = Serial.read();   // 读取指令
        switch(cmd){
          case 0x01:
            Serial.write(0x01);    // 发送应答信号01H
            heart();                // 显示心形符号
            break;
          case 0x02:
            Serial.write(0x02);    // 发送应答信号02H
            display_H();            // 显示H
            break;
          default:
            Serial.write(0xFF);    // 发送错误码
            display_error();        // 显示错误信息
            break;
        }
      }
    }
    // 显示心形符号
    void heart(){
      byte heart[8] = {
        B00000,
        B01010,
        B11111,
        B11111,
        B01110,
        B00100,
        B00000,
        B00000
      };
      for(int i = 0; i < 8; i++){
        digitalWrite(i+6, HIGH);
        for(int j = 0; j < 8; j++){
          digitalWrite(j+9, bitRead(heart[i], j));
          delay(1);
        }
        digitalWrite(i+6, LOW);
      }
    }
    // 显示H
    void display_H(){
      byte letter_H[8] = {
        B10001,
        B10001,
        B10001,
        B11111,
        B11111,
        B10001,
        B10001,
        B10001
      };
      for(int i = 0; i < 8; i++){
        digitalWrite(i+6, HIGH);
        for(int j = 0; j < 8; j++){
          digitalWrite(j+9, bitRead(letter_H[i], j));
          delay(1);
        }
        digitalWrite(i+6, LOW);
      }
    }
    // 显示错误信息
    void display_error(){
      byte error[8] = {
        B00111,
        B01000,
        B10000,
        B10000,
        B10000,
        B01000,
        B00111,
        B00000
      };
      for(int i = 0; i < 8; i++){
        digitalWrite(i+6, HIGH);
        for(int j = 0; j < 8; j++){
          digitalWrite(j+9, bitRead(error[i], j));
          delay(1);
        }
        digitalWrite(i+6, LOW);
      }
    }
    
    1. 根据接收到的指令进行相应的操作,发送应答信号并在显示屏上显示相应的内容 我们已经在上一步中编写了代码,实现了以上功能。当串口接收到数据时,程序会根据指令进行相应的操作。如果指令无法识别,将会发送错误码并在点阵上显示错误信息。 案例: 假设我们在串口调试助手中输入指令01H,单片机将会接收到该指令并发送应答信号01H,同时在点阵上显示一个心形符号。 输入指令02H,单片机将会接收到该指令并发送应答信号02H,同时在点阵上显示字母“H”。 如果我们输入其他指令,例如03H,则单片机将会发送错误码并在点阵上显示错误信息。
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月13日
  • 已采纳回答 9月5日
  • 创建了问题 6月19日

悬赏问题

  • ¥15 用verilog实现tanh函数和softplus函数
  • ¥15 Hadoop集群部署启动Hadoop时碰到问题
  • ¥15 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启
  • ¥15 QTableWidget重绘程序崩溃
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站