单片机ai编程-ai生成嵌入式代码-ai写stm32代码

随着openai的不断升级,现在ai的编程能力也大幅提升甚至媲美某些专业人员了。今天试了一下使用ai自动编写生成单片机代码,发现ai生成嵌入式代码完全没有问题了,这个stm32代码写的又快又准,真的厉害。

需求是这样的:给我写一个51单片机代码,要求:51单片机,要求将小灯从LED9依次亮到LED2,然后从LED2灭到LED9 ,间隔时间0.75秒,用按键1来控制小灯的亮灭;将数码管从-20加到20,按键2每按一次加1,按键5控制数码管的亮灭;点阵显示横向动画显示917,按键3控制点阵的移动和停止,按键8控制点阵的亮灭

单片机ai编程-ai生成嵌入式代码-ai写stm32代码插图

不到一分钟chat gpt就写了出来,要知道这个就算是专业人员也要写上1-2个小时了,而且有可能还出错实际弄好可能得1-2天,但是有了ai这个工作效率直线提升。所以建议大家一定要学会利用ai在自己的工作中。

这里发上来生成的完整代码:

#include <reg51.h>

#define uchar unsigned char
#define uint unsigned int

// 定义按键
sbit key1 = P3^0;  // 控制小灯
sbit key2 = P3^1;  // 数码管加1
sbit key5 = P3^2;  // 数码管显示开关
sbit key3 = P3^3;  // 点阵控制移动
sbit key8 = P3^4;  // 点阵显示开关

// 定义 LED 小灯控制引脚
sbit LED9 = P1^7;
sbit LED8 = P1^6;
sbit LED7 = P1^5;
sbit LED6 = P1^4;
sbit LED5 = P1^3;
sbit LED4 = P1^2;
sbit LED3 = P1^1;
sbit LED2 = P1^0;

// 定义数码管显示控制
uchar segCode[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; // 0-9编码
uchar ledState = 0; // 小灯控制状态
uchar displayOn = 0; // 数码管控制状态
uchar number = 0; // 显示的数字
uchar dotMatrixOn = 0; // 点阵开关
uchar dotMatrixState = 0; // 点阵移动状态

// 延时函数
void delay(uint x)
{
    uchar i, j;
    for(i = x; i > 0; i--)
        for(j = 112; j > 0; j--);
}

// 小灯流水灯逻辑
void ledFlow()
{
    uchar i;
    if(ledState)
    {
        // 从LED9到LED2亮,再从LED2灭到LED9
        for(i = 0; i < 8; i++)
        {
            P1 = ~(0x80 >> i);  // 从 LED9 到 LED2亮
            delay(750);  // 0.75秒延时
        }
        for(i = 0; i < 8; i++)
        {
            P1 = ~(0x01 << i);  // 从 LED2到LED9灭
            delay(750);
        }
    }
    else
    {
        P1 = 0xFF;  // 全灭
    }
}

// 数码管显示逻辑
void displayNumber(uchar num)
{
    if(displayOn)
    {
        P2 = segCode[num % 10];  // 显示个位数
    }
    else
    {
        P2 = 0xFF;  // 不显示
    }
}

// 点阵显示逻辑
void dotMatrixDisplay()
{
    uchar pattern[] = {0x91, 0x7E, 0x91};  // 横向显示917
    uchar i;

    if(dotMatrixOn)
    {
        if(dotMatrixState)  // 点阵移动
        {
            for(i = 0; i < 3; i++)
            {
                P0 = pattern[i];  // 点阵显示
                delay(500);
            }
        }
        else  // 静止显示
        {
            P0 = pattern[0];
            delay(500);
        }
    }
    else
    {
        P0 = 0x00;  // 点阵灭
    }
}

// 主函数
void main()
{
    uchar count = 0;  // 点阵移动计数
    while(1)
    {
        // 按键1控制小灯亮灭
        if(!key1)
        {
            delay(10);  // 防抖
            if(!key1)
            {
                ledState = !ledState;  // 切换亮灭状态
                while(!key1);  // 等待松开按键
            }
        }
        ledFlow();

        // 按键2控制数码管加1,范围-20到20
        if(!key2)
        {
            delay(10);
            if(!key2)
            {
                if(number < 20)
                {
                    number++;
                }
                displayNumber(number);
                while(!key2);
            }
        }

        // 按键5控制数码管亮灭
        if(!key5)
        {
            delay(10);
            if(!key5)
            {
                displayOn = !displayOn;
                while(!key5);
            }
        }

        // 按键3控制点阵移动/停止
        if(!key3)
        {
            delay(10);
            if(!key3)
            {
                dotMatrixState = !dotMatrixState;
                while(!key3);
            }
        }

        // 按键8控制点阵亮灭
        if(!key8)
        {
            delay(10);
            if(!key8)
            {
                dotMatrixOn = !dotMatrixOn;
                while(!key8);
            }
        }
        dotMatrixDisplay();
    }
}

© 版权声明
THE END
喜欢就支持一下吧
分享