让AI识别电路图,帮你进行编码(以51单片机为例)
这里使用的AI大模型使用的是 Copilot。(两个前提:1. 科学上网、2. 有微软账号)
今天测试了一下Copilot识别图片的能力,能力还是可圈可点的。
首先准备一张电路图
注意以下两点:
- 图片不能太大
太大上传不了,尽量不大于1MB
- 图片不能太模糊 不要使用截图保存的方式把电路图放在本地,请使用PDF导出图片的方式。注意导出的时候选择合适清晰度的导出,满足第一点的同时还要满足你放大后你用肉眼能识别每个引脚的标号
至少像这张图一样的清晰度,下面这张图上传CSDN可能会被吃像素,真正的清晰度请点击链接查看
上传电路图
点击这个按钮就可以.
上传电路图后,追加一些信息。以及你的目的。
提问方式
- 简要介绍一下你的这张图片是什么。
- 你要让AI做什么(你的目的)
- 向AI介绍你的环境,以及约束条件。例如你使用的是Keil(环境),使用C语言编写程序(约束条件)
- 功能点1……
- 功能点2……
- ……
最终效果
因为它有联系上下文对话的能力,所以一开始我是先让看图,然后问一下比较简单的问题。然后我让他完成了流水灯的功能,这是他给出的程序.
#include<reg52.h>// 包含8051单片机的寄存器定义voiddelay(unsignedint time);// 延时函数声明voidmain(){unsignedchar i;while(1){for(i =0; i <8; i++){
P2 =~(0x01<< i);// 依次点亮P2口的LEDdelay(50000);// 调用延时函数}}}voiddelay(unsignedint time){unsignedint i, j;for(i =0; i < time; i++)for(j =0; j <100; j++);}
我具体没有去运行,参照电路图,再看看程序应该没有什么问题,身边有开发板的同学帮我测试一下~
这是我让他实现的第二个功能: 在按下独立按键K1时,数码管的第一位显示1;按下K2时,显示2,并且包含按键消抖功能。
#include<reg52.h>// 包含8051单片机的寄存器定义
sbit K1 = P3^0;// 定义K1按键连接在P3.0
sbit K2 = P3^1;// 定义K2按键连接在P3.1
sbit SEG_A = P2^0;// 数码管段选引脚
sbit SEG_B = P2^1;
sbit SEG_C = P2^2;
sbit SEG_D = P2^3;
sbit SEG_E = P2^4;
sbit SEG_F = P2^5;
sbit SEG_G = P2^6;
sbit SEG_DP = P2^7;// 数码管小数点引脚voiddelay(unsignedint time);// 延时函数声明voiddisplayDigit(unsignedchar digit);// 数码管显示函数声明unsignedchardebounceKey(sbit key);// 按键消抖函数声明voidmain(){while(1){if(debounceKey(K1)==0){// 如果按下K1displayDigit(1);// 显示数字1}elseif(debounceKey(K2)==0){// 如果按下K2displayDigit(2);// 显示数字2}}}voiddelay(unsignedint time){unsignedint i, j;for(i =0; i < time; i++)for(j =0; j <120; j++);}voiddisplayDigit(unsignedchar digit){switch(digit){case1:
P2 =0xF9;// 数码管显示1的段码break;case2:
P2 =0xA4;// 数码管显示2的段码break;default:
P2 =0xFF;// 关闭数码管break;}}unsignedchardebounceKey(sbit key){if(key ==0){// 检测按键是否按下delay(20);// 延时20ms进行消抖if(key ==0){// 再次检测按键是否按下while(key ==0);// 等待按键释放return0;// 按键按下}}return1;// 按键未按下}
基本上思路就是这样, 通过ai我们可以节省大量的时间.
其实不只是Copilot,ChatGPT-4o和Claude也可上传图片,甚至是pdf,表格之类的文档,输入的功能更加强大,只不过各有各的优缺点。
比如,ChatGPT-4o的使用有限制,Claude需要的网络环境比较纯净才行,否则容易封号,且账号注册相较于前两者是最难注册的。
版权归原作者 百色彭于晏 所有, 如有侵权,请联系我们删除。