随着openai的不断升级,现在ai的编程能力也大幅提升甚至媲美某些专业人员了。今天试了一下使用ai自动编写生成单片机代码,发现ai生成嵌入式代码完全没有问题了,这个stm32代码写的又快又准,真的厉害。
需求是这样的:给我写一个51单片机代码,要求:51单片机,要求将小灯从LED9依次亮到LED2,然后从LED2灭到LED9 ,间隔时间0.75秒,用按键1来控制小灯的亮灭;将数码管从-20加到20,按键2每按一次加1,按键5控制数码管的亮灭;点阵显示横向动画显示917,按键3控制点阵的移动和停止,按键8控制点阵的亮灭
不到一分钟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