L12312138 2023-02-18 23:36 采纳率: 87.5%
浏览 19
已结题

这样的报错怎么修改才正确

这样的报错怎么解决,还在学习,不能很好解决

#include <LiquidCrystal.h>       //LCD1602显示头文件
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
 int lcd_key     = 0;
int adc_key_in  = 0;
 adc_key_in = analogRead(0);  
#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5

unsigned long seconds;
int s = 0, m = 0, h = 0;   //时间进位
int second=0,minute=0,hour=0;//当前时间
int SECOND = 0, MINUTE = 0, HOUR = 0;  //初始时间
int chose = 0, ButtonDelay = 10;
/** 设置初始时间 */
void set(int h, int m, int s){
    HOUR = h;
    MINUTE = m;
    SECOND = s;  
}
void setup(){    
    for(int i = 2;i <= 13; i++){
       pinMode(i,OUTPUT);  
    }          

    lcd.begin(16, 2);  //初始化LCD1602 
  
    set(12, 30, 50);
}
 
/** 格式化输出  */
void FormatDisplay(int col, int row,int num){   
    lcd.setCursor(col, row); 
    if(num < 10){
        lcd.print("0");
    }   
    lcd.print(num);   
}
 
/** 计算时间 */
void time(){   
    second = (SECOND + seconds) % 60;   //计算秒
    m = (SECOND + seconds) / 60;        //分钟进位
    FormatDisplay(6,1,second);
 
    minute = (MINUTE + m) % 60;  //计算分钟
    h = (MINUTE + m) / 60;       //小时进位
    FormatDisplay(3,1,minute);      
 
    hour = (HOUR + h) % 24;   //计算小时
   FormatDisplay(0,1,hour); 
 
    lcd.setCursor(2, 1);   lcd.print(":");   
    lcd.setCursor(5, 1);   lcd.print(":");  
}
 
 
/** 显示时间  */
void Display(){  
   time();
   
}
 
/** 显示光标 */
void DisplayCursor(int rol, int row){
    lcd.setCursor(rol, row);   
    lcd.cursor();
    delay(100);     
    lcd.noCursor();
    delay(100);    
}
 
  

 
/** 通过按键设置时间 */
void Set_Time(int rol, int row, int &Time){
   DisplayCursor(rol, row); 
   int read_LCD_buttons();
}


 if (adc_key_in < 250)  return btnUP; 
 if (adc_key_in < 450)  return btnDOWN; 
  if (adc_key_in < 850)  return btnSELECT;  
    switch (lcd_key)               // 选择按键
 {
   
   case btnUP:
     {
     Time ++;
     break;
     }
   case btnDOWN:
     {
    Time  --;
     break;
     }
   case btnSELECT:
     {
     lcd.setCursor(9, 1);  lcd.print("SetTime");
        while(1){
       chose++;}
     break;}
 }
            seconds = millis()/1000; 
            Display(); 
            if(chose == 1){
                Set_Time(1, 1, HOUR);      //SetHour
            }else if(chose == 2){ 
                Set_Time(4, 1, MINUTE);    //SetMinute
            }else if(chose == 3){
                Set_Time(7, 1, SECOND);    //SetSecond
            
           
            }
        
    

 
void loop(){ 
    seconds = millis()/1000;    //获取单片机当前运行时间 
    Display();       //显示时间
    Set_Clock();     //设置时间  
}

  • 写回答

2条回答 默认 最新

  • 菜鸟才能学的更多 2023-02-18 23:59
    关注

    存在一些语法错误和逻辑问题:

    1. 在 loop() 函数中调用了未定义的函数 Set_Clock(),应该改为 Set_Time() 函数。

    2. 在 Set_Time() 函数中,int read_LCD_buttons(); 应该放到函数体的开头,而不是结尾。

    3. 在 Set_Time() 函数中,变量 adc_key_in 没有定义,应该在函数开头定义为整型变量。

    4. 在 Set_Time() 函数中,switch 语句的结构不正确,应该把花括号放在 case 语句的下一行。

    5. 在 Set_Time() 函数中,while(1){ chose++;} 是一个死循环,应该将其改为条件语句,如 if (chose >= 3) {chose = 0;}。

    6. 在 loop() 函数中,应该把 Set_Clock() 函数改为 Set_Time() 函数。

    7. 在 loop() 函数中,调用 Set_Time() 函数时应该传递的参数应该是引用类型,如 Set_Time(1, 1, HOUR) 应该改为 Set_Time(1, 1, HOUR)。

    8. 在 loop() 函数中,应该把 Set_Time() 函数的调用放在 if (chose == 1) 的判断语句之前。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月27日
  • 已采纳回答 2月19日
  • 创建了问题 2月18日

悬赏问题

  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真