找回密码
 立即注册
查看: 85|回复: 3

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

[复制链接]
  • 打卡等级:以坛为家III
  • 打卡总天数:618
  • 最近打卡:2026-03-23 18:06:27

30

主题

141

回帖

691

积分

高级会员

积分
691
发表于 2026-3-12 17:45:10 | 显示全部楼层 |阅读模式
我提的要求是 用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进行判断。代码照样写出来 并且编译通过
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:618
  • 最近打卡:2026-03-23 18:06:27

30

主题

141

回帖

691

积分

高级会员

积分
691
发表于 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中正常编译了
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:197
  • 最近打卡:2026-03-23 00:01:06
已绑定手机

14

主题

223

回帖

1343

积分

金牌会员

DIY玩家

积分
1343
发表于 2026-3-12 21:30:32 | 显示全部楼层
zhang*** 发表于 2026-3-12 17:46
运行GetDiagnostics工具检查代码是否有语法错误或类型错误。

Thought

工作效率得益于AI工具
工程师解放生产力

真正的学徒往往怀着大师的心
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:745
  • 最近打卡:2026-03-23 00:00:20
已绑定手机

19

主题

3337

回帖

6925

积分

论坛元老

积分
6925
发表于 2026-3-12 22:38:19 | 显示全部楼层
感觉AI仅供参考
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-3-23 23:09 , Processed in 0.125072 second(s), 62 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表