搜索
查看: 867|回复: 0

[分享] ChatGPT+C51单片机电子秤实例

[复制链接]

332

主题

537

帖子

3836

积分

论坛元老

Rank: 8Rank: 8

积分
3836
发表于 2023-9-8 08:56:34 | 显示全部楼层 |阅读模式
ChatGPT 相信大家都已经用过了,不知道对大家的工作生活有什么帮助,特别是对于软件工程师来说,是否已经解放双手,将ChatGPT应用到了编程中。 今天我们就给大家分享一个“ChatGPT+C51嵌入式编程做一台电子秤”的实例,用51单片机做电子秤的电路,用Proteus来仿真称重传感器和ADC用模拟输入,然后键盘和液晶显示。电路图如图所示,用ChatGPT+C51写完程序,让仿真电路跑一跑,整体上还是比较容易的。




但是,要完整实现电子秤功能,还是要花不少心思调试。还是要从简单的51单片机程序入手,跑实际电路比跑仿真电路更有成就感,而且现在引入了ChatGPT,相信相比平时会显得更加的不同。

C51跑马灯

学过单片机,但凡没有全部还给老师的,大概会记得点亮第一个LED灯时候的激动吧,还有跑马灯(流水灯)也是永恒不变的入门程序。看原理图,手上这块C51编程板P1口每个引脚接一个LED灯,共阴极(输出为低电平时点亮),那么直接问ChatGPT吧!





ChatGPT还给出解释:该代码使用了一个for循环,通过移位运算控制点亮每个LED灯。具体来说,将0x01向左移动i位,得到对应的位控制值,然后通过取反操作来控制LED灯的点亮,因为这里使用了共阴极LED。在控制完每个LED灯之后,使用延时函数Delay来产生流水灯效果。

在Keil μVision中建立一个Project,复制ChaptGPT自动生成的代码,编译,报错!WTF!仔细查看,在main程序前加了void Delay()函数声明,编译通过,生成hex!



用STC-ISP把hex文件烧录到C51编程板上,跑马灯就跑起来了!

C51定时

那么试试单片机定时吧,问ChatGPT怎么定时500ms。



ChatGPT解释:该代码定义了一个LED变量来控制第一个LED灯的点亮和熄灭。在主函数中,通过while循环不停地执行LED取反操作,然后使用延时函数Delay产生500ms的延时,使得LED灯闪烁。我们可以通过循环来实现延时操作。在Delay函数中,我们使用两个嵌套的while循环来实现精确的延时,具体来说,每次循环大约需要1ms的时间,因此在执行500次循环后就可以产生500ms的延时效果。编译一次通过,但看LED灯闪烁频率怎么都不像500ms(0.5s )的效果!

C51精确定时即使语体教,老师都会告诉我们:用空循环实现定时,不是一种好的方式,定时不精确。51单片机本身带有定时/计数器T0,其本质是循环累加计数器(TH0+TL0),通过TMOD、TCON寄存器,发出中断请求,与微处理器通信,实现精确定时。就这么要求ChatGPT!



ChatGPT解释:该代码使用了定时器0来产生500ms的精确延时,实现第二个LED灯的闪烁效果。在主函数中,我们首先将LED1和LED2灭掉,然后设置定时器0为16位定时器模式,将定时器0的高字节和低字节分别设置为0xFC和0x18,这样定时器0的总计数值为65536 - 0xFC18 = 50124,每经过一个定时器0的计数周期就会减少1,直到计数值减到0,定时器0就会溢出,同时产生一个中断信号。在主函数的while循环中,我们不停地判断定时器0是否溢出,如果溢出了,就将LED2取反操作来控制LED2灯的点亮和熄灭。由于定时器0的总计数值为500ms,因此每500ms就会闪烁一次LED2。

总结

ChatGPT嵌入式编程能力一样给力!在51单片机上简单编程基本一次通过,但事先要清楚电路结构,明确交代芯片引脚连接、晶振频率、传感器输入等,这样ChatGPT才能给出能用的代码。对于复杂电路系统程序设计,ChatGPT一般不能毕其功于一役,需要开发人员将程序按流程图分成若干子程序,用ChatGPT写明确功能的子程序或函数,然后开发人员再汇总成完整程序代码。

回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /2 下一条

Archiver|手机版|小黑屋|RF技术社区

GMT+8, 2024-5-7 22:20 , Processed in 0.067956 second(s), 6 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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