WUWEWU 发表于 2023-3-31 23:36:21

大神帮看看chatGPT搞的温控器代码靠谱么?微信小程序端口在6楼,目前还能用

本帖最后由 WUWEWU 于 2023-4-1 11:44 编辑

程序是用STC89C52单片机,用12864 OLED显示屏显示的温控器代码,带温度设定-20-150度 及PID参数设定,上下限超温报警输出,按键4颗,(1 设定(长按5秒进入),2 换行按键,3 加键 4 减键),重新检查确定无误 再写一份好吗?
原程序如下

#include <STC89C5xRC.H>
#define LCD_DB P0
#define LCD_RS P2_4
#define LCD_EN P2_5

unsigned char kp,kp_r;//kp记录现在按键的状态,kp_r用来记录前一时刻按键状态,互锁
unsigned char cnt,flag; //cnt是计数器,flag是标志位
unsigned int set_T,now_T,P; //set_T是设定温度,now_T是当前温度,P是PID算法计算出的控制量
sbit beep = P1^5; //超温报警蜂鸣器

/**********************************************
函数名:LCD_delay_us()
功能: us级延迟函数
实现过程: 连续5次不进行循环控制体现延时的稳定性
入口参数: nus,需要的us数
出口参数: 无
作者: 吴好862210674@qq.com
修改日志:
************************************************/
void LCD_delay_us(unsigned char nus) //晶体管液晶显示屏延时函数,单位为微秒
{
    unsigned char i;
    while (nus--)
    {
      i = 12;
      while (--i);
    }
}

/**********************************************
函数名:LCD_write_com()
功能: 向LCD写入指令,其他关于位逻辑操作的地方与之类似
实现过程: 总线操作,往寄存器中写数据,使能拉高触发上升沿
入口参数: com,要写入的指令值
出口参数: 无
作者: 吴好862210674@qq.com
修改日志:
************************************************/
void LCD_write_com(unsigned char com)
{
    LCD_RS = 0; //RS=0,写入指令
    LCD_DB = com; //写入指令
    LCD_EN = 1; //使能拉高
    LCD_delay_us(2); //延时2us
    LCD_EN = 0; //使能拉低
}

/**********************************************
函数名:LCD_write_data()
功能: 向LCD写入数据
实现过程: 总线操作,往寄存器中写数据,使能拉高触发上升沿
入口参数: dat,要写入的数据值
出口参数: 无
作者: 吴好862210674@qq.com
修改日志:
************************************************/
void LCD_write_data(unsigned char dat)
{
    LCD_RS = 1; //RS=1,写入数据
    LCD_DB = dat; //写入数据
    LCD_EN = 1; //使能拉高
    LCD_delay_us(2); //延时2us
    LCD_EN = 0; //使能拉低
}

/**********************************************
函数名:LCD_init()
功能: 初始化LCD显示屏
实现过程: 依次写入指令,实现初始化
入口参数: 无
出口参数: 无
作者 吴好862210674@qq.com
修改日志:
************************************************/
void LCD_init(void)
{
    LCD_write_com(0x38); //8位数据总线,2行显示,5x7点阵字符
    LCD_write_com(0x0c); //显示开,光标关,光标闪烁关
    LCD_write_com(0x06); //文字不动,地址自动加1
    LCD_write_com(0x01); //清屏
}

/**********************************************
函数名:LCD_show_char()
功能: 在LCD上显示一个字符
实现过程: 先写入地址,再写入数据
入口参数: x,y,字符的位置;dat,要显示的字符
出口参数: 无
作者: 吴好862210674@qq.com
修改日志:
************************************************/
void LCD_show_char(unsigned char x,unsigned char y,unsigned char dat)
{
    unsigned char addr;
    if (y == 0) addr = 0x80 + x; //第一行
    else addr = 0xc0 + x; //第二行
    LCD_write_com(addr); //写入地址
    LCD_write_data(dat); //写入数据
}

/**********************************************
函数名:LCD_show_str()
功能: 在LCD上显示一个字符串
实现过程: 循环调用LCD_show_char()函数
入口参数: x,y,字符串的位置;*str,要显示的字符串
出口参数: 无
作者: 吴好862210674@qq.com
修改日志:
************************************************/
void LCD_show_str(unsigned char x,unsigned char y,unsigned char *str)
{
    while (*str != '\0')
    {
      LCD_show_char(x++,y,*str++);
    }
}

/**********************************************
函数名:key_scan()
功能: 按键扫描函数
实现过程: 通过P3口读取按键状态,判断按键是否按下
入口参数: 无
出口参数: 无
作者: 吴好862210674@qq.com
修改日志:
************************************************/
void key_scan(void)
{
    kp_r = kp; //记录前一时刻按键状态
    kp = P3; //读取按键状态
    if (kp != kp_r) //如果按键状态发生改变
    {
      cnt = 0; //计数器清零
      if (kp == 0x0f) flag = 0; //如果所有按键都没有按下,标志位清零
    }
    else
    {
      cnt++; //计数器加1
      if (cnt == 20) //如果计数器达到20,说明按键已经按下超过100ms
      {
            flag = 1; //标志位置1
            cnt = 0; //计数器清零
      }
    }
}

/**********************************************
函数名:beep_alarm()
功能: 超温报警函数
实现过程: 蜂鸣器发出声音
入口参数: 无
出口参数: 无
作者: 吴好862210674@qq.com
修改日志:
************************************************/
void beep_alarm(void)
{
    beep = 1; //蜂鸣器拉高
    delay_ms(100); //延时100ms
    beep = 0; //蜂鸣器拉低
    delay_ms(100); //延时100ms
}

/**********************************************
函数名:PID_control()
功能: PID控制函数
实现过程: 根据当前温度和设定温度计算出控制量P
入口参数: 无
出口参数: 无
作者: 吴好862210674@qq.com
修改日志:
************************************************/
void PID_control(void)
{
    float Kp = 1.0, Ki = 0.1, Kd = 0.01; //PID参数
    static float err_sum = 0, last_err = 0; //误差累计和,上一次误差
    float err = set_T - now_T; //当前误差
    err_sum += err; //误差累计和
    P = Kp * err + Ki * err_sum + Kd * (err - last_err); //PID控制量
    last_err = err; //更新上一次误差
}

/**********************************************
函数名:main()
功能: 主函数
实现过程: 初始化,循环读取温度并控制温度
入口参数: 无
出口参数: 无
作者: 吴好862210674@qq.com
修改日志:
************************************************/
void main(void)
{
    LCD_init(); //LCD初始化
    while (1)
    {
      key_scan(); //按键扫描
      if (flag == 1) //如果有按键按下
      {
            if ((kp & 0x01) == 0) //如果第一颗按键按下
            {
                set_T--; //设定温度减1
                if (set_T < -20) set_T = -20; //设定温度下限为-20度
            }
            if ((kp & 0x02) == 0) //如果第二颗按键按下
            {
                set_T++; //设定温度加1
                if (set_T > 150) set_T = 150; //设定温度上限为150度
            }
            if ((kp & 0x04) == 0) //如果第三颗按键按下
            {
                //进入PID参数设定模式
            }
            if ((kp & 0x08) ==

*****以下是chatGPT修改过的*****

//向LCD写入指令
void LCD_write_com(unsigned char com)
{
    LCD_RS = 0; //RS置0,选择指令寄存器
    LCD_DB = com; //写入指令
    LCD_EN = 1; //使能拉高
    LCD_delay_us(2); //延时
    LCD_EN = 0; //使能拉低
}

/**********************************************
函数名:LCD_write_data()
功能: 向LCD写入数据
实现过程: 总线操作,往寄存器中写数据,使能拉高触发上升沿
入口参数: dat,要写入的数据值
出口参数: 无
作者: 吴好862210674@qq.com
修改日志:
************************************************/
void LCD_write_data(unsigned char dat)
{
    LCD_RS = 1; //RS置1,选择数据寄存器
    LCD_DB = dat; //写入数据
    LCD_EN = 1; //使能拉高
    LCD_delay_us(2); //延时
    LCD_EN = 0; //使能拉低
}

/**********************************************
函数名:LCD_init()
功能: 初始化LCD
实现过程: 按照LCD的初始化流程,写入指令
入口参数: 无
出口参数: 无
作者: 吴好862210674@qq.com
修改日志:
************************************************/
void LCD_init()
{
    LCD_write_com(0x38); //8位数据总线,2行显示,5x7点阵字符
    LCD_write_com(0x0c); //开显示,关光标,不闪烁
    LCD_write_com(0x06); //光标右移,字符不移动
    LCD_write_com(0x01); //清屏
}

/**********************************************
函数名:LCD_display()
功能: 在LCD上显示字符串
实现过程: 循环写入每个字符
入口参数: str,要显示的字符串
出口参数: 无
作者: 吴好862210674@qq.com
修改日志:
************************************************/
void LCD_display(unsigned char *str)
{
    while (*str)
    {
      LCD_write_data(*str++);
    }
}

/**********************************************
函数名:key_scan()
功能: 按键扫描函数
实现过程: 通过检测按键的电平变化,判断按键是否按下
入口参数: 无
出口参数: 无
作者: 吴好862210674@qq.com
修改日志:
************************************************/
void key_scan()
{
    kp_r = kp; //记录前一时刻按键状态
    if (P3_0 == 0) //检测按键1是否按下
    {
      kp = 1;
    }
    else if (P3_1 == 0) //检测按键2是否按下
    {
      kp = 2;
    }
    else if (P3_2 == 0) //检测按键3是否按下
    {
      kp = 3;
    }
    else if (P3_3 == 0) //检测按键4是否按下
    {
      kp = 4;
    }
    else
    {
      kp = 0;
    }
}

/**********************************************
函数名:PID()
功能: PID算法计算控制量
实现过程: 根据设定温度和当前温度计算出PID控制量
入口参数: 无
出口参数: 无
作者: 吴好862210674@qq.com
修改日志:
************************************************/
void PID()
{
    int err, err_last, integral, derivative; //误差、上一时刻误差、积分、微分
    static int integral_sum = 0; //积分累加器
    err = set_T - now_T; //计算误差
    integral_sum += err; //累加误差
    if (integral_sum > 1000) //积分限幅
    {
      integral_sum = 1000;
    }
    else if (integral_sum < -1000)
    {
      integral_sum = -1000;
    }
    integral = integral_sum; //积分项
    derivative = err - err_last; //微分项
    P = 10 * err + 2 * integral + 5 * derivative; //PID控制量
    err_last = err; //记录上一时刻误差
}

/**********************************************
函数名:main()
功能: 主函数
实现过程: 初始化,循环检测按键,采集温度,计算PID控制量,控制蜂鸣器报警,显示温度和PID控制量
入口参数: 无
出口参数: 无
作者: 吴好862210674@qq.com
修改日志:
************************************************/
void main()
{
    TMOD = 0x01; //定时器0工作在模式1
    TH0 = 0xfc; //定时器0初值,1ms
    TL0 = 0x18;
    TR0 = 1; //启动定时器0
    ET0 = 1; //开定时器0中断
    EA = 1; //开总中断
    LCD_init(); //初始化LCD
    set_T = 25; //设定温度为25度
    while (1)
    {
      key_scan(); //按键扫描
      if (kp_r == 0 && kp == 1) //按键1按下
      {
            flag = 1; //标志位置1
            cnt = 0; //计数器清零
      }
      if (flag == 1 && kp == 1) //按键1持续按下
      {
            cnt++; //计数器累加
            if (cnt == 100) //长按5秒
            {
                cnt = 0; //计数器清零
                flag = 0; //标志位置0
                LCD_write_com(0x01); //清屏
                LCD_display("Set Temp:"); //显示设定温度
                while (1)
                {
                  key_scan(); //按键扫描
                  if (kp_r == 0 && kp == 2) //按键2按下
                  {
                        set_T++; //设定温度加1
                        if (set_T > 150) //温度上限
                        {
                            set_T = 150;
                        }
                  }
                  if (kp_r == 0 && kp == 3) //按键3按下
                  {
                        set_T--; //设定温度减1
                        if (set_T < -20) //温度下限
                        {
                            set_T = -20;
                        }
                  }
                  if (kp_r == 0 && kp == 4) //按键4按下
                  {
                        flag = 1; //标志位置1
                        cnt = 0; //计数器清零
                        break; //退出设定温度模式
                  }
                  LCD_write_com(0xc0); //光标移到第二行第一列
                  LCD_display("    "); //清空显示
                  LCD_write_com(0xc0); //光标移到第二行第一列
                  LCD_display("Set Temp:"); //显示设定温度
                  LCD_write_data(set_T / 10 + '0'); //显示设定温度的十位数
                  LCD_write_data(set_T % 10 + '0'); //显示设定温度的个位数
                }
            }
      }
      else if (flag == 1 && kp != 1) //按键1松开
      {
            flag = 0; //标志位置0
            cnt = 0; //计数器清零
      }
      if (now_T > set_T + 5 || now_T < set_T - 5) //超温报警
      {
            beep = 1; //蜂鸣器报警
      }
      else
      {
            beep = 0; //蜂鸣器停止报警
      }
      LCD_write_com(0x80); //光标移到第一行第一列
      LCD_display("Now Temp:"); //显示当前温度
      LCD_write_data(now_T / 10 + '0'); //显示当前温度的十位数
      LCD_write_data(now_T % 10 + '0'); //显示当前温度的个位数
      LCD_display(" Set Temp:"); //显示设定温度






再次修改整理后
****/

void LCD_write_com(unsigned char com) //写命令函数
{
    LCD_RS = 0; //RS置0
    LCD_DB = com; //写入数据
    LCD_EN = 1; //使能置1
    LCD_delay_us(1); //延迟1us
    LCD_EN = 0; //使能置0
}

/**********************************************
函数名:LCD_write_data()
功能: 向LCD写入数据
实现过程: 总线操作,往寄存器中写数据,使能拉高触发上升沿
入口参数: dat,写入的数据
出口参数: 无
作者: 吴好862210674@qq.com
修改日志:
************************************************/

void LCD_write_data(unsigned char dat) //写数据函数
{
    LCD_RS = 1; //RS置1
    LCD_DB = dat; //写入数据
    LCD_EN = 1; //使能置1
    LCD_delay_us(1); //延迟1us
    LCD_EN = 0; //使能置0
}

/**********************************************
函数名:LCD_init()
功能: 初始化LCD
实现过程:
入口参数: 无
出口参数: 无
作者: 吴好862210674@qq.com
修改日志:
************************************************/

void LCD_init(void) //总初始化函数
{
    LCD_write_com(0x38); //功能设定
    LCD_write_com(0x38); //功能设定
    LCD_write_com(0x38); //功能设定

    LCD_write_com(0x08); //关闭显示
    LCD_write_com(0x01); //清屏
    LCD_write_com(0x06); //光标不加,整屏左移

    LCD_write_com(0x0f); //开显示,有光标,光标闪烁
}

/**********************************************
函数名:LCD_display_one_char()
功能: 在LCD上显示一个字符
实现过程: 调用LCD_write_data()函数
入口参数: x,要显示字符的行;y,要显示字符的列;dat,要显示的字符
出口参数: 无
作者: 吴好862210674@qq.com
修改日志:
************************************************/

void LCD_display_one_char(unsigned char x, unsigned char y, unsigned char dat)
{
    unsigned char address;
    if (x == 0) //确定地址
      address = 0x80 + y;
    else if (x == 1)
      address = 0xc0 + y;
    else if (x == 2)
      address = 0x94 + y;
    else
      address = 0xd4 + y;
    LCD_write_com(address); //写地址
    LCD_write_data(dat); //写字符
}

/**********************************************
函数名:LCD_display_string()
功能: 在LCD上显示一个字符串
实现过程: 调用LCD_display_one_char()函数
入口参数: x,要显示字符串的行;y,要显示字符串的列;*dat,指向要显示的字符串的指针
出口参数: 无
作者: 吴好862210674@qq.com
修改日志:
************************************************/

void LCD_display_string(unsigned char x, unsigned char y, unsigned char *dat)
{
    while (*dat)
    {
      LCD_display_one_char(x, y++, *dat++);
    }
}

/**********************************************
函数名:key_scan()
功能: 按键扫描函数,根据按键情况返回相应值
实现过程: 根据电路图写代码
入口参数: 无
出口参数: 返回按键值,0表示无按键,1表示设定键,2表示换行键,3表示加键,4表示减键
作者: 吴好862210674@qq.com
修改日志:
************************************************/

unsigned char key_scan(void) //按键扫描
{
    unsigned char value = 0;
    kp = P2 & 0x0f; //读取按键值
    if (kp != kp_r) //判断是否有按键按下
    {
      cnt = 0;
      flag = 0; //计数器计数器清0
    }
    else
    {
      if (++cnt > 100)
      {
            cnt = 0;
            flag = 1; //计数器溢出,标志位置1
      }
    }
    if (flag && kp) //如果计数器溢出,且当前有按键按下
    {
      flag = 0;
      value = kp; //返回按键值
    }
    kp_r = kp; //记录当前按键状态
    return value;
}

/**********************************************
函数名:get_one_temperature()
功能: 读取一次温度值
实现过程: 循环读取温度传感器,返回温度值
入口参数: 无
出口参数: 返回读取到的温度值
作者: 吴好862210674@qq.com
修改日志:
************************************************/

unsigned char get_one_temperature() //读取一次温度函数
{
    unsigned char temp_H, temp_L;
    unsigned int temperature;
    //开始转换
    P1 = 0xfe; //拉低DS18B20总线
    LCD_delay_us(1); //延迟1us
    P1 = 0; //释放总线
    while (P1 & 0x01); //等待DS18B20回应
    LCD_delay_us(30); //延迟30us
    P1 = 0xfe; //拉低DS18B20总线
    LCD_delay_us(1); //延迟1us
    P1 = 0; //释放总线
    while (P1 & 0x01); //等待DS18B20回应
    LCD_delay_us(100); //延迟100us

    //开始读取温度值
    P1 = 0xfe; //拉低DS18B20总线
    LCD_delay_us(1); //延迟1us
    P1 = 0; //释放总线
    while (P1 & 0x01); //等待DS18B20回应
    LCD_delay_us(30); //延迟30us
    temp_L=P1; //读取温度低8位
    P1 = 0xfe; //拉低DS18B20总线
    LCD_delay_us(1); //延迟1us
    P1 = 0; //释放总线
    while (P1 & 0x01); //等待DS18B20回应
    LCD_delay_us(30); //延迟30us
    temp_H=P1; //读取温度高8位

    //计算温度值
    temperature = ((unsigned int)temp_H) << 8;
    temperature |= temp_L;
    temperature >>= 4;
    return (unsigned char)temperature;
}

/**********************************************
函数名:MatrixK()
功能: 计算Matrix的逆矩阵
实现过程: 矩阵运算公式实现
入口参数: *in,输入矩阵;*out,输出矩阵
出口参数: 1表示Matrix可逆,0表示Matrix不可逆
作者: 吴好862210674@qq.com
修改日志:
************************************************/

unsigned char MatrixK(double *in, double *out) //计算Matrix的逆矩阵
{
    double A, B;
    double t, p;
    unsigned char i, j, m, k;

    //将一维数组in转换为二维数组A
    for (i = 0; i < 5; i++)
      for (j = 0; j < 5; j++)
            A = *(in + i * 5 + j);

    //将B设为单位矩阵
    for (i = 0; i < 5; i++)
      for (j = 0; j < 5; j++)
            B = (i == j) ? 1.0 : 0.0;

    //高斯消元法求B的逆矩阵
    for (k = 0; k < 5; k++)
    {
      t = 1.0 / A;
      A = 1.0;
      for (j = 0; j < 5; j++)
            B *= t;
      for (i = k + 1; i < 5; i++)
      {
            t = A[i

WUWEWU 发表于 2023-3-31 23:50:12

这人工智能简单的写一段可以,写完整的够呛

lb0857 发表于 2023-4-1 01:26:03

chat是论坛推荐的那款吗

WUWEWU 发表于 2023-4-1 05:35:29

lb0857 发表于 2023-4-1 01:26
chat是论坛推荐的那款吗
(引用自3楼)

微信找到的新端口

chunjiu 发表于 2023-4-1 06:35:50

估计不会靠谱,还是需要自己验证的 (没看代码哈)。

之前让它写的 Python 小程序都要手工修正的。

WUWEWU 发表于 2023-4-1 09:25:26

#小程序://智能对话/hdZWvBYHIp1A10p
分享给大家,目前还能用

kingqxj 发表于 2023-4-1 09:33:54

直接写完整的不靠谱,他也不会直接写出完整的。你要一个功能一个功能的引导和确认。出错了提示他怎么修改是可以的。我昨天花了两个小时自己0代码让它写了一个受重力影响的弹弓射击游戏。发上来给大家体验一下。
包含了整个引导过程和最终代码。没做界面美化。有时间可以对目标物和子弹进行美化,就是使用一个png的图片。它是可以实现的。整了俩小时实在懒得继续了

Elex 发表于 2023-4-1 10:09:23

这些AI给你写的代码,大都是网上搜集的学生设计的代码搬过来给你,只能参考一下。你敢用于实际开发生产可能会被坑死{:titter:}

john78 发表于 2023-4-1 10:30:42

MatrixK() ---- 这个 什么用途?

WUWEWU 发表于 2023-4-1 11:32:41

叫它帮写代码没指望了,今天又与AI探讨了极紫外线,有点意思

WUWEWU 发表于 2023-4-1 11:39:54

又问了一下高数的一个问题回答也是不靠谱,还真像是网上收集整理来的答案,

WUWEWU 发表于 2023-4-1 11:50:37

又问了几个政治问题,看样子也是收集了官方的答案,学精了 中立姿态,估计美版的回答会不一样

tuitj2 发表于 2023-4-1 11:55:03

WUWEWU 发表于 2023-4-1 09:25
#小程序://智能对话/hdZWvBYHIp1A10p
分享给大家,目前还能用
(引用自6楼)

你分享的这个用浏览器打开?还是在微信里,微信小程序里没搜到。

WUWEWU 发表于 2023-4-1 12:04:20

tuitj2 发表于 2023-4-1 11:55
你分享的这个用浏览器打开?还是在微信里,微信小程序里没搜到。
(引用自13楼)

#小程序://智能对话/hdZWvBYHIp1A10p

WUWEWU 发表于 2023-4-1 12:07:55

tuitj2 发表于 2023-4-1 11:55
你分享的这个用浏览器打开?还是在微信里,微信小程序里没搜到。
(引用自13楼)

微信里面收索 关键字 智能对话,出来后找个这个图标 第一个

wxws 发表于 2023-4-1 12:21:02

这个小程序可以,速度很快呀

WUWEWU 发表于 2023-4-1 12:22:29

又问了太阳能电池方面的问题

WUWEWU 发表于 2023-4-1 12:23:06

wxws 发表于 2023-4-1 12:21
这个小程序可以,速度很快呀
(引用自16楼)

是的,方便,不用注册花钱

onepcb_xg 发表于 2023-4-1 13:05:12

Elex 发表于 2023-4-1 10:09
这些AI给你写的代码,大都是网上搜集的学生设计的代码搬过来给你,只能参考一下。你敢用于实际开发生产可能 ...
(引用自8楼)

把生成的代码,当作体力输入工作的辅助,再修修改改,还有些价值。

网上或论坛中,参考一些非硬件专业且有相当硬件经验的工程师的量产PCB,再自由发挥的,测试或批量的话,可能是填不满的坑

startwar0418 发表于 2023-4-1 14:05:45

幸存派友情提示,请别“人”帮忙时要说请

WUWEWU 发表于 2023-4-1 14:05:51

onepcb_xg 发表于 2023-4-1 13:05
把生成的代码,当作体力输入工作的辅助,再修修改改,还有些价值。

网上或论坛中,参考一些非硬件专业且 ...
(引用自19楼)

我就是只会简单分段写代码,组合在一起 一大堆问题就来了,代码之间的关联,衔接,配合,搞不定,所以以前学了一段时间就放弃了,转攻硬件,想现在再拾回来比较难了,chatGPT也干不了这事

onepcb_xg 发表于 2023-4-1 15:02:04

BING,现在似乎应用到CHATGPT3.5 PLUS或4.0级别了,代码生成能力更强。把需求描述细致些,生成的代码可用性更强,然后配合些从代码生成流程图的工具,组装裁减代码模块就省心省力多了。当然检查是少不了的。

相对来说,一次设计好一个稍复杂些,能量产的PCB,需要考虑的问题复杂多了。

PowerAnts 发表于 2023-4-2 11:46:22

WUWEWU 发表于 2023-4-1 14:05
我就是只会简单分段写代码,组合在一起 一大堆问题就来了,代码之间的关联,衔接,配合,搞不定,所以以 ...
(引用自21楼)

单片机开发比硬件容易上手10倍

tuitj2 发表于 2023-4-3 08:29:59

WUWEWU 发表于 2023-4-1 12:07
微信里面收索 关键字 智能对话,出来后找个这个图标 第一个
(引用自15楼)

收到!感谢!

yuyu87 发表于 2023-4-3 08:47:07

你这个不是chatGPT,

WUWEWU 发表于 2023-4-3 12:16:35

我用了两个版本的,这个版本的回答

WUWEWU 发表于 2023-4-3 12:17:49

这个版本不能问敏感内容,会提示被封号

PowerAnts 发表于 2023-4-3 18:34:54

楼主牛逼,天文地理无所不好

WUWEWU 发表于 2023-4-3 21:42:31

PowerAnts 发表于 2023-4-3 18:34
楼主牛逼,天文地理无所不好
(引用自28楼)

唉遗憾,现在只混的一个民科称号,靠修点破烂度日,要文凭没文凭,要工作没工作,做民科还被人笑话,食不果腹,还是各位大神可以啊,技术专业,可以独当一面旗

WUWEWU 发表于 2023-4-3 22:05:21

本帖最后由 WUWEWU 于 2023-4-3 22:06 编辑

PowerAnts 发表于 2023-4-3 18:34
楼主牛逼,天文地理无所不好
(引用自28楼)

顺便科普一下单晶硅电池方面的话题,以前在半导体材料研究所就是搞这些课题的。
单晶硅电池是一种常见的太阳能电池,是以单晶硅为原材料制造出的光伏电池。在太阳光的照射下,光线激发电子跃迁至导带使电路中产生电流。

禁带宽度(也称带隙宽度)是半导体材料中的一个关键参数,是指对于电子而言,电子在价带(价电子能量带)和导带(导电子能量带)之间的能量差异。 在单晶硅电池中,禁带宽度是指在厘米-1(电子伏特)单位下测量的价带和导带之间的能量差异。禁带宽度越大,抑制温度效应和捕获效应的能力越强,电池的电性能力越高。单晶硅电池的禁带宽度一般约为1.12 eV,这比较适合太阳能电池的应用。

总的来说,禁带宽度是影响光伏材料能够吸收和转换太阳能的能力和效率的一个重要参数,对于单晶硅电池来说,其禁带宽度比较适合太阳能电池的应用。
单晶硅电池的禁带宽度是影响其转化率和效率的一个重要参数。提高单晶硅电池的禁带宽度是提高其性能的关键之一。以下是一些提高单晶硅电池禁带宽度的方法:

1. 选择更高质量的硅材料:单晶硅电池的禁带宽度与硅材料质量相关,因此,选择更高质量的硅材料制造单晶硅电池,可以提高其禁带宽度。

2. 添加掺杂材料:添加含有更高离子化能的掺杂材料,如硼、铝、镓等,可以提高禁带宽度。同时,掺杂物浓度也是影响禁带宽度的因素之一。

3. 调整单晶硅制备工艺:改变单晶硅的生长速率、成品温度等制备工艺参数,可以提高单晶硅电池的晶格质量和禁带宽度。

4. 提高光吸收效率:提高单晶硅电池对太阳光的吸收效率,可以增加光子量,提高电子的激发程度,从而提高禁带宽度。

5. 优化单晶硅电池结构:优化单晶硅电池的结构,如在单晶硅电池上添加反射层、透明电极等,可以提高其能量吸收和辐射转化效率,从而提高禁带宽度。

总的来说,提高单晶硅电池的禁带宽度,需要从硅材料、掺杂材料、制备工艺、光吸收效率和电池结构等多个方面入手,采取合适的措施和优化策略,才能够有效地提高其禁带宽度。
单晶硅具有一定的光谱吸收能力,其光谱吸收峰值位于比较窄的波段范围内。一般来说,单晶硅的光谱吸收峰值位于可见光谱和红外光谱之间,主要在近紫外和远红外两个波段比较强。

具体来说,在波长为250~400 nm的紫外光谱范围内,单晶硅具有较高的吸收率;而在波长为800~1200 nm的红外光谱范围内,单晶硅的吸收率也比较大。

需要注意的是,虽然单晶硅具有一定的谱段吸收能力,但它的吸收能力较弱,不能充分利用整个光谱能量,并且在光谱范围较窄的范围内,导致其转化效率较低。因此,对于太阳能电池等光伏应用来说,需要采取优化电池结构和材料组合等多种措施,才能够更充分地利用光能,提高转化效率和性能。
掺杂材料的配比是影响单晶硅电池性能的重要因素。一般来说,掺杂材料需要按照一定的配比比例添加,以使其在单晶硅中达到理想的浓度。

掺杂材料的浓度、类型和配比会影响单晶硅电池的电学性质和光学性能。研究表明,不同的掺杂浓度配比对单晶硅禁带宽度、电子迁移率、载流子浓度等电学特性和电池转化效率有不同的影响。

在单晶硅制备过程中,常用的掺杂材料包括硼、磷、铝和锗等。以硼和磷为例,它们的掺杂浓度一般在10E13至10E16 cm-3范围内,而它们的配比则根据掺杂浓度来确定。例如,当硅中需要掺杂浓度为1.5×10E16 cm-3时,硼和磷的配比可以为1:1。

需要注意的是,在掺杂材料的配比过程中,要结合实际情况综合考虑,包括掺杂材料的实际浓度、制备工艺条件等多个因素。这需要对单晶硅电池制备工艺进行专门的实验设计和分析,以确定最合适的掺杂材料配比。

PowerAnts 发表于 2023-4-3 23:38:51

WUWEWU 发表于 2023-4-3 21:42
唉遗憾,现在只混的一个民科称号,靠修点破烂度日,要文凭没文凭,要工作没工作,做民科还被人笑话,食不 ...
(引用自29楼)

研究挣钱,凭一个人的能力让家庭人均收入达到工作地的平均工资,会发现天文地理没啥好研究的,最好的风景永远在前方

ZHAOBAO511 发表于 2023-5-12 09:35:18

写了一个时间片51程序,结果没有一个能用的,求不注册的直接能用的类似网页。

WUWEWU 发表于 2024-2-21 09:56:27

ZHAOBAO511 发表于 2023-5-12 09:35
写了一个时间片51程序,结果没有一个能用的,求不注册的直接能用的类似网页。 ...
(引用自32楼)

微信公众号搜搜这个加关注就行,不用注册,这个一直能正常使用

ZHAOBAO511 发表于 2024-2-21 10:05:54

WUWEWU 发表于 2024-2-21 09:56
微信公众号搜搜这个加关注就行,不用注册,这个一直能正常使用
(引用自33楼)

好的,谢谢。
页: [1]
查看完整版本: 大神帮看看chatGPT搞的温控器代码靠谱么?微信小程序端口在6楼,目前还能用