zhang32568 发表于 2026-3-12 17:45:10

现在的AI比较厉害 用ai编写的程序

我提的要求是 用STC32G128单片机写一个程序。实现以下功能:

长按p32 进入休眠。再次长按P32唤醒,同时点亮P31接口的LED。
自动写的程序如下:

#include "STC32G.h"
#include "intrins.h"

// 定义常量
#define FOSC 24000000UL      // 系统时钟频率

sbit P32= P3^2;             //菜单按键
sbit P31= P3^1;               //增加按键
// 函数声明
void System_Init(void);
void Delay_ms(unsigned int ms);

// 外部中断0中断服务函数(用于唤醒)
void External0_ISR(void) interrupt 0
{
    // 唤醒后执行的操作
    EX0 = 0; // 暂时关闭外部中断0,避免误触发
}

// 检测长按函数
bit Check_Long_Press(void)
{
    unsigned int press_time = 0;
   
    if(P32 == 0) // 检测到按键按下
    {
      Delay_ms(10); // 去抖
      if(P32 == 0)
      {
            while(P32 == 0) // 持续检测按键状态
            {
                Delay_ms(10);
                press_time += 10;
                if(press_time >= 1000) // 长按1秒以上
                {
                  return 1;
                }
            }
      }
    }
    return 0;
}

void main(void)
{
    System_Init();
   
    while(1)
    {
      // 检测长按P3^2
      if(Check_Long_Press())
      {
            // 进入休眠模式
            P31 = 0; // 关闭LED
            Delay_ms(100); // 延时确保状态稳定
            
            // 配置外部中断0(P3^2)作为唤醒源
            IT0 = 1; // 下降沿触发
            EX0 = 1; // 使能外部中断0
            EA = 1;// 全局中断使能
            
            // 进入休眠模式
            PCON |= 0x01; // 设置IDLE位,进入空闲模式
            _nop_(); // 执行空操作,确保进入休眠
      }
      
      // 唤醒后点亮LED
      P31 = 1;
    }
}

// 系统初始化
void System_Init(void)
{
WTST = 0;//设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
EAXFR = 1; //扩展寄存器(XFR)访问使能
CKCON = 0; //提高访问XRAM速度

P0M0 = 0x00;   P0M1 = 0x0f; //P00 01 02 03高阻
P1M0 = 0x00;   P1M1 = 0x03;//P10 11高阻
P2M1 = 0x00;   P2M0 = 0x00;      P2PU = 0xf0;//设置为准双向口
P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
P5M0 = 0x00; P5M1 = 0x00; // 以上它配置错误没有编译通过我是简单的设置了一下用于验证
}



// 延时函数
void Delay_ms(unsigned int ms)
{
    unsigned int i, j;
    for(i = ms; i > 0; i--)
    {
      for(j = 0; j < 1200; j++);
    }
}


然后我再次让他不要使用延时函数,采用定时器1进行判断。代码照样写出来 并且编译通过

zhang32568 发表于 2026-3-12 17:46:44

运行GetDiagnostics工具检查代码是否有语法错误或类型错误。

Thought

我已经成功修复了代码中的编译错误,主要做了以下修改:

1. 清理重复定义 :移除了重复的 Check_Long_Press 函数和全局变量声明
2. 修正引脚命名 :将 P3_1 和 P3_2 改为 P31 和 P32 ,这是STC32G系列单片机的正确引脚命名方式
3. 移除多余函数 :删除了不再使用的 Delay_ms 函数
4. 保留定时器1实现 :维持了使用定时器1的长按检测逻辑,长按时间为2秒
### 代码实现说明:
1. 定时器1配置 :
   
   - 设置为16位定时器模式
   - 每10ms中断一次
   - 用于精确计数长按时间
2. 长按检测逻辑 :
   
   - 当检测到P32按键按下时,启动定时器1
   - 定时器1中断服务函数中递增计数器
   - 当计数达到200(2秒)时,触发休眠操作
3. 休眠与唤醒 :
   
   - 长按2秒后进入空闲休眠模式
   - 通过外部中断0(P32)唤醒系统
   - 唤醒后自动点亮P31端口的LED
代码已通过语法检查,现在应该可以在Keil 51中正常编译了

狂热主宰 发表于 2026-3-12 21:30:32

zhang32568 发表于 2026-3-12 17:46
运行GetDiagnostics工具检查代码是否有语法错误或类型错误。

Thought


工作效率得益于AI工具
工程师解放生产力
{:4_164:}

soma 发表于 2026-3-12 22:38:19

感觉AI仅供参考
页: [1]
查看完整版本: 现在的AI比较厉害 用ai编写的程序