随着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; // 数码管加1sbit 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灭到LED9for(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}; // 横向显示917uchar 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到20if(!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
暂无评论内容