单片机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();
}
}
#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();
    }
}
#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
喜欢就支持一下吧
分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容