单片机开发者的福音: 让AI看电路图帮你编写程序
这里使用的人工智能是 OpenAI公司开发的 ChatGPT.为了让AI用起来更加的顺手我们可以选择单片机工程师这个训练好的模型,当然用原本的ChatGPT-4o也是挺好用的.
第0步 需要准备东西
1. 科学上网
2. 电路图 (可以是pdf文件\也可是高清的png或者jpg图片)
第1步 寻找一个适合自己的模型
可以点开链接直达这个模型单片机工程师 with keil uvision 5,或者登录后按照下图的方式找到这个模型.
第2步 沟通方式
公式 : 介绍+目的+要求
例子:
因为chatGPT 联系上下文的能力很强, 除了第一次沟通的时候发送文件和介绍之外,在此对话的时候就可以不用发送了.就是当做一个仆人一样来对话就好, 它给我们程序,我们拿去编译 下载就好,不满足我们的要求就接着和它沟通,只要你把问题和你想要的效果描述清楚,它基本上都能完成的很好,大大提高你的工作效率.
看看这次AI的回答:
我们可以看到 , 它给出了
#include "lcd1602.h"
#include "ds1302.h"
这两个库我们是没有的,所以呢 我们具体的情况还要给ai说明白,我们没有ds1302这个芯片, 也没有lcd1602.h这个库,需要自己写
进一步说明情况
请看ai的这次回答: 我个人认为应该是没什么问题,它把lcd1602模块给单独拿来出来方便我们复用,下面是ai的回答:
好的,我们可以不使用DS1302芯片,直接在程序中预设时间信息为“23:55”,并使用定时器来模拟时间的递增。以下是修改后的完整代码,包括LCD1602的驱动程序和时间的显示功能。
LCD1602驱动程序 (
lcd1602.h
和lcd1602.c
)lcd1602.h
#ifndef _LCD1602_H_ #define _LCD1602_H_ #include <reg51.h> sbit RS = P2^0; // RS引脚 sbit RW = P2^1; // RW引脚 sbit E = P2^2; // E引脚 sbit D4 = P2^4; // 数据引脚 D4 sbit D5 = P2^5; // 数据引脚 D5 sbit D6 = P2^6; // 数据引脚 D6 sbit D7 = P2^7; // 数据引脚 D7 void LCD_Init(void); void LCD_Cmd(unsigned char cmd); void LCD_Data(unsigned char dat); void LCD_ShowString(unsigned char x, unsigned char y, char *str); void LCD_ShowNum(unsigned char x, unsigned char y, unsigned int num, unsigned char len); void LCD_ShowChar(unsigned char x, unsigned char y, char ch); #endif
lcd1602.c
#include "lcd1602.h" // 延时函数 void Delay(unsigned int ms) { unsigned int i, j; for (i = 0; i < ms; i++) for (j = 0; j < 114; j++); } // 发送命令到LCD void LCD_Cmd(unsigned char cmd) { RS = 0; RW = 0; E = 1; D4 = cmd & 0x10; D5 = cmd & 0x20; D6 = cmd & 0x40; D7 = cmd & 0x80; E = 0; E = 1; D4 = cmd & 0x01; D5 = cmd & 0x02; D6 = cmd & 0x04; D7 = cmd & 0x08; E = 0; Delay(2); } // 发送数据到LCD void LCD_Data(unsigned char dat) { RS = 1; RW = 0; E = 1; D4 = dat & 0x10; D5 = dat & 0x20; D6 = dat & 0x40; D7 = dat & 0x80; E = 0; E = 1; D4 = dat & 0x01; D5 = dat & 0x02; D6 = dat & 0x04; D7 = dat & 0x08; E = 0; Delay(2); } // 初始化LCD1602 void LCD_Init(void) { LCD_Cmd(0x02); // 初始化指令 LCD_Cmd(0x28); // 4位数据接口, 2行显示, 5x7点阵 LCD_Cmd(0x0C); // 显示开,光标关 LCD_Cmd(0x06); // 数据输入后,光标右移 LCD_Cmd(0x01); // 清屏 } // 显示字符串 void LCD_ShowString(unsigned char x, unsigned char y, char *str) { unsigned char addr; if (y == 0) addr = 0x80 + x; else addr