数码之家

 找回密码
 立即注册
搜索
查看: 1851|回复: 33

用ChatGPT写一个51单片机驱动8x8点阵显示心形的程序

[复制链接]
发表于 2023-2-15 08:36:33 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 snaker 于 2023-2-15 08:36 编辑

试试最近挺火的ChatGPT

1、尝试让他写一个51单片机驱动8x8点阵显示心形的程序,要用到74hc595
image.png
程序如下:
  1. #include <reg51.h>

  2. sbit SHCP = P2^0; // 74HC595芯片的串行时钟输入
  3. sbit STCP = P2^1; // 74HC595芯片的存储时钟输入
  4. sbit DS = P2^2; // 74HC595芯片的串行数据输入

  5. unsigned char code heart[8] = {0x3C, 0x7E, 0xE7, 0xC3, 0xC3, 0xE7, 0x7E, 0x3C}; // 8x8点阵显示的心形图案

  6. void delay(int time) // 延时函数
  7. {
  8.     int i, j;
  9.     for (i = 0; i < time; i++)
  10.         for (j = 0; j < 110; j++);
  11. }

  12. void shift_out(unsigned char val) // 将一个字节数据输出到74HC595芯片
  13. {
  14.     unsigned char i;
  15.     for (i = 0; i < 8; i++)
  16.     {
  17.         SHCP = 0;
  18.         DS = val & 0x80;
  19.         val <<= 1;
  20.         SHCP = 1;
  21.     }
  22. }

  23. void latch() // 存储输出到74HC595芯片的数据
  24. {
  25.     STCP = 0;
  26.     delay(1);
  27.     STCP = 1;
  28. }

  29. void main()
  30. {
  31.     unsigned char i, j;
  32.     P2 = 0x00; // 初始化P2口

  33.     while (1)
  34.     {
  35.         for (i = 0; i < 8; i++) // 遍历8列
  36.         {
  37.             shift_out(~heart[i]); // 输出图案的一列到74HC595芯片
  38.             latch(); // 存储输出到74HC595芯片的数据
  39.             for (j = 0; j < 8; j++) // 遍历8行
  40.             {
  41.                 P0 = 0x01 << j; // 设置P0口对应列的输出状态
  42.                 delay(1); // 稍作延时,使显示效果更佳
  43.             }
  44.         }
  45.     }
  46. }
复制代码
还有个解释
image.png



2、尝试让它写一个51单片机驱动LCD1602的程序
image.png
程序如下:
  1. #include <reg51.h>
  2. #include <intrins.h>

  3. #define LCD_DATA_PORT P0 // LCD1602数据口
  4. sbit RS = P2^5; // 控制命令/数据选择
  5. sbit RW = P2^6; // 控制读写选择
  6. sbit E = P2^7; // 使能端

  7. void delay_us(unsigned int us) // 微秒级延时函数
  8. {
  9.     while (us--)
  10.     {
  11.         _nop_();
  12.         _nop_();
  13.         _nop_();
  14.         _nop_();
  15.     }
  16. }

  17. void delay_ms(unsigned int ms) // 毫秒级延时函数
  18. {
  19.     while (ms--)
  20.     {
  21.         delay_us(1000);
  22.     }
  23. }

  24. void lcd_write_command(unsigned char command) // 写入命令
  25. {
  26.     RS = 0; // 选择命令
  27.     RW = 0; // 写入模式
  28.     LCD_DATA_PORT = command; // 写入数据
  29.     E = 1; // 使能
  30.     delay_us(1);
  31.     E = 0; // 禁能
  32.     delay_ms(1); // 等待指令执行
  33. }

  34. void lcd_write_data(unsigned char data) // 写入数据
  35. {
  36.     RS = 1; // 选择数据
  37.     RW = 0; // 写入模式
  38.     LCD_DATA_PORT = data; // 写入数据
  39.     E = 1; // 使能
  40.     delay_us(1);
  41.     E = 0; // 禁能
  42.     delay_us(50); // 等待数据写入
  43. }

  44. void lcd_init() // LCD1602初始化
  45. {
  46.     lcd_write_command(0x38); // 16x2显示,5x8点阵,8位数据总线
  47.     lcd_write_command(0x08); // 关闭显示
  48.     lcd_write_command(0x01); // 清屏
  49.     lcd_write_command(0x06); // 光标移动方向为右,不移动屏幕
  50.     lcd_write_command(0x0c); // 打开显示,不显示光标,不闪烁
  51. }

  52. void lcd_display_string(unsigned char x, unsigned char y, unsigned char *str) // 在指定位置显示字符串
  53. {
  54.     unsigned char addr;
  55.     if (y == 0)
  56.     {
  57.         addr = 0x80 + x;
  58.     }
  59.     else
  60.     {
  61.         addr = 0xc0 + x;
  62.     }
  63.     lcd_write_command(addr); // 设置显示地址
  64.     while (*str != '\0')
  65.     {
  66.         lcd_write_data(*str); // 写入数据
  67.         str++;
  68.     }
  69. }

  70. void main()
  71. {
  72.     lcd_init(); // 初始化LCD1602
  73.     lcd_display_string(0, 0, "Hello World!"); // 在第一行显示"Hello World!"
  74.     while (1); // 程序进入死循环
  75. }
复制代码


发表于 2023-2-15 08:57:51 | 显示全部楼层
厉害了。这个。
回复 支持 1 反对 0

使用道具 举报

发表于 2023-2-15 08:59:08 | 显示全部楼层
就是个爬虫,到处白票
回复 支持 3 反对 0

使用道具 举报

发表于 2023-2-15 09:04:35 | 显示全部楼层
厉害了厉害了,还要人干啥。
回复 支持 反对

使用道具 举报

发表于 2023-2-15 09:16:25 | 显示全部楼层
我孙坚感觉自己是多余的
回复 支持 反对

使用道具 举报

发表于 2023-2-15 09:21:39 | 显示全部楼层
GPT写程序,本质上应该是搜索。
回复 支持 反对

使用道具 举报

发表于 2023-2-15 09:26:25 | 显示全部楼层
所有资源来自网络,不一定全对
回复 支持 反对

使用道具 举报

发表于 2023-2-15 09:30:16 | 显示全部楼层
初级员工 没活路了
回复 支持 反对

使用道具 举报

发表于 2023-2-15 09:45:33 | 显示全部楼层
感觉这个东西以后可能会产生自我意识,甚至会造反
回复 支持 反对

使用道具 举报

发表于 2023-2-15 10:00:50 | 显示全部楼层
不知道怎么用啊,等我这道了这个消息,都给屏蔽了
回复 支持 反对

使用道具 举报

发表于 2023-2-15 10:01:51 | 显示全部楼层
网络上找资料,一个大数据库
回复 支持 反对

使用道具 举报

发表于 2023-2-15 10:15:42 | 显示全部楼层
试试搜某客程序
回复 支持 反对

使用道具 举报

发表于 2023-2-15 10:23:54 | 显示全部楼层
jkj 发表于 2023-2-15 09:21
GPT写程序,本质上应该是搜索。

确实如此,以这个程序为例,稍有水平的码农都不会这样写的。
回复 支持 反对

使用道具 举报

发表于 2023-2-15 12:31:23 | 显示全部楼层
那不是攻城师要下架了?我们这些小菜鸟要上线了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-15 17:01:21 | 显示全部楼层
jpdd521 发表于 2023-2-15 09:04
厉害了厉害了,还要人干啥。

没有人还是不行
回复 支持 反对

使用道具 举报

发表于 2023-2-15 17:40:59 | 显示全部楼层
能查BUG么?前两天点个屏幕,搞了两天发现并行数据口两个脚画反了,从原理图开始就是反的
回复 支持 反对

使用道具 举报

发表于 2023-2-15 21:19:45 来自手机浏览器 | 显示全部楼层
我这里三日一圩,就是附近三个镇,一天是一个镇的圩日,也就是北方所说的赶集,三天一循环。能写个程序不?就和计算星期一样简单。
回复 支持 反对

使用道具 举报

发表于 2023-2-15 23:23:48 | 显示全部楼层
帮我问一下,用C#写一个telnet通信功能的代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-16 09:48:49 | 显示全部楼层
elecfunwb 发表于 2023-2-15 23:23
帮我问一下,用C#写一个telnet通信功能的代码


image.png

  1. using System;
  2. using System.Net.Sockets;
  3. using System.IO;

  4. class TelnetClient
  5. {
  6.     static void Main()
  7.     {
  8.         try
  9.         {
  10.             // 创建一个TCP/IP socket连接到Telnet服务器
  11.             TcpClient client = new TcpClient("example.com", 23);

  12.             // 获取网络流
  13.             NetworkStream stream = client.GetStream();

  14.             // 获取输入和输出流
  15.             StreamReader reader = new StreamReader(stream);
  16.             StreamWriter writer = new StreamWriter(stream);

  17.             // 发送命令到服务器
  18.             writer.WriteLine("Hello, server!");
  19.             writer.Flush();

  20.             // 读取服务器的响应
  21.             string response = reader.ReadLine();
  22.             Console.WriteLine(response);

  23.             // 关闭连接
  24.             writer.Close();
  25.             reader.Close();
  26.             client.Close();
  27.         }
  28.         catch (Exception e)
  29.         {
  30.             Console.WriteLine("Exception: " + e.Message);
  31.         }
  32.     }
  33. }
复制代码
在这个例子中,我们连接到一个名为example.com的Telnet服务器,并发送一条消息Hello, server!。然后,我们读取服务器的响应并将其打印到控制台。最后,我们关闭连接。
你可以根据需要修改代码以适应你的特定的Telnet服务器。例如,你可能需要更改服务器地址和端口号,或者发送不同的命令。

回复 支持 反对

使用道具 举报

发表于 2023-2-16 09:55:39 | 显示全部楼层
小白的福音,反正能运行就行了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-4-28 02:12 , Processed in 0.140400 second(s), 13 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

快速回复 返回顶部 返回列表