数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 3006|回复: 33

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

[复制链接]
发表于 2023-2-15 08:36:33 | 显示全部楼层 |阅读模式
本帖最后由 snaker 于 2023-2-15 08:36 编辑

试试最近挺火的ChatGPT

1、尝试让他写一个51单片机驱动8x8点阵显示心形的程序,要用到74hc595

程序如下:
  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. }
复制代码
还有个解释




2、尝试让它写一个51单片机驱动LCD1602的程序

程序如下:
  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. }
复制代码


本帖子中包含更多资源

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

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

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

使用道具 举报

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



  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服务器。例如,你可能需要更改服务器地址和端口号,或者发送不同的命令。

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-16 10:19:41 | 显示全部楼层
zj97czb 发表于 2023-2-15 21:19
我这里三日一圩,就是附近三个镇,一天是一个镇的圩日,也就是北方所说的赶集,三天一循环。能写个程序不? ...



  1. import datetime

  2. towns = ["A", "B", "C"]

  3. # 获取用户输入的日期
  4. input_date_str = input("请输入日期,格式为 YYYY-MM-DD:")
  5. input_date = datetime.datetime.strptime(input_date_str, "%Y-%m-%d").date()

  6. # 计算输入日期是第几天,从0开始计数
  7. day_number = input_date.toordinal() - datetime.date(input_date.year, 1, 1).toordinal()

  8. # 判断输入日期是哪个镇赶集
  9. town_index = day_number % len(towns)
  10. town = towns[town_index]

  11. print("{}是{}镇赶集".format(input_date.strftime("%Y-%m-%d"), town))
复制代码


本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-16 10:22:32 | 显示全部楼层
akikyoua 发表于 2023-2-15 17:40
能查BUG么?前两天点个屏幕,搞了两天发现并行数据口两个脚画反了,从原理图开始就是反的 ...

应该不能,现在好像只支持文字对话
回复 支持 反对

使用道具 举报

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

来自ChatGPT的回复:
作为一名人工智能语言模型,我的工作本质上是基于自然语言处理和机器学习技术来分析和生成文本。我的程序是通过在大量文本数据上进行训练,以学习如何预测和生成各种文本内容的。这包括搜索结果、回答问题、生成文章、摘要和对话等。

因此,我的程序可以被看作是一种搜索技术的应用,但这并不是其本质属性。搜索技术通常是通过在已有的数据集中查找特定信息来完成任务,而我所采用的机器学习方法是通过对大量数据进行训练来学习规律和模式,并根据这些规律和模式来生成新的文本内容。

虽然我的程序可以被视为一种搜索技术的应用,但是我使用的方法和技术与传统的搜索引擎不同,并且具有更高的灵活性和自适应性。同时,我也不仅仅是简单地搜索信息,而是根据上下文和用户的需求来生成个性化的文本回复。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-22 07:54:26 | 显示全部楼层
1325133 发表于 2023-2-21 21:23
让他写一个51驱动7个(6个也行)8字数码管做时钟的程序,公司打下来一个地磅的外显屏,里面7个超大号的数码 ...

写是可以写,但是不能拿来直接用,还得根据实际硬件去改程序
回复 支持 反对

使用道具 举报

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

本版积分规则

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

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-7-19 12:01 , Processed in 0.187200 second(s), 13 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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