数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 160|回复: 11

[C51] 51单片机入门真的不难,无论啥基础只要会用电脑会上网就能学习

[复制链接]
发表于 8 小时前 | 显示全部楼层 |阅读模式
本帖最后由 慕名而来 于 2025-8-7 12:53 编辑

近日坛里关于小白学单片机、学编程的帖子突然多了起来,也有坛友长期连续不断的发帖探讨入门的学习方法问题并希冀藉此激发坛里广泛的学习氛围,想法是好的但效果可想而知,尤其是探讨很久却迟迟不见动手的讨论必定不符合这里绝大多数人的习惯,常来此处游玩的大都是“能动手的决不吱声”、“能自己做到的绝不找别人合计”的主,看到别人在说的事情自己感兴趣的就插一嘴、没啥感兴趣的直接转身走人,毕竟这里是技术社区,是大家点到为止的讨论一些彼此感兴趣的技术、制作等问题的地方,是展示分享制作、仿制中的成果、感悟的地方,说白了来本坛的大都是做东西的人很少有说事情的人。

说到为初学者指路的帖子也有很多,老坛有很多、新坛也不少,比如坛友 @mmxx2015 的系列贴:
单片机入门杂谈(一):调试器https://www.mydigit.cn/forum.php?mod=viewthread&tid=384952&fromuid=1505079
说到新手自学入门的帖子也不少,比如前些时连续发帖的 @hellozwt  
小白学51单片机,新的折腾,点亮一个灯
https://www.mydigit.cn/forum.php?mod=viewthread&tid=438274&fromuid=1505079

从一篇篇文字总仿佛看到了它一步步的走进了单片机应用的世界。


需要说清楚的是,如果你学习单片机应用的目的是为了入职、以此谋生的话请不要在这种社区里耽搁时间,赶紧入学、报班去正规系统的学习才是正理。如果你学习单片机的目的只是为了业余制作使用的话也没必要东问西问,就自己就翻翻帖子、看看基础知识的介绍、稍事熟悉后直接上手干就完了,总是磨磨唧唧的永远也无法落地的。


其实当下入门51单片机比十几年前简单太多了,只为应用单片机的话、会玩电脑会上网就能轻松的自学,玩单片机就是玩电脑的过程,我在这里建议大家不妨试试通过AI学单片机、学编程的方法,或许有朋友担心这样学技术可能会出现知其然不知其所以然的空中楼阁现象,但任何学习的行为都取决于主观能动性,想学且有兴趣的话摸着石头就能过河,过河后会主动的琢磨石头的来历,而想学没有兴趣的能过河就ok了,达成自己的目的最重要。


下面简单的说说AI学习51单片机入门的方法:
首先要有一片单片机,因为我近来一直在玩STC单片机所以就以一片20引脚的STC8H8K64U为例说说吧。
无论玩什么单片机总是要首先找到它的使用说明书放在电脑桌面上便于查看,下面是这片单片机的最小系统接线图:





按图接线后,插上USB数据接口就能操控这片单片机了。
接下来找个AI软件,比如我们就以百度搜索的AI为例吧,上述接线弄好后就可以提问玩耍了,点开百度AI提问:“详细讲解相关软件安装、使用方法并通过C语言实现STC8H8K64U单片机点亮一只LED灯”
以下是AI给出的答案:
  1. <p>STC8H8K64U单片机点亮LED灯教程
  2. 一、所需软件安装
  3. 1. Keil C51开发环境
  4. 下载地址:Keil官网(需注册)
  5. 安装步骤:
  6. 运行安装程序,选择C51版本
  7. 按提示完成安装
  8. 安装完成后可能需要申请评估license
  9. 2. STC-ISP下载工具
  10. 下载地址:STC官网(www.stcmcudata.com)
  11. 无需安装,解压即可使用
  12. 3. 驱动程序
  13. 部分USB转串口芯片(CH340/CH341)需要安装驱动
  14. 驱动可在STC-ISP工具包中找到
  15. 二、开发环境配置
  16. 打开Keil,新建工程
  17. 选择设备为"STC8H8K64U"
  18. 配置输出Hex文件选项
  19. 设置晶振频率(根据实际硬件)
  20. 三、硬件连接
  21. 将USB转串口工具的TXD连接单片机RXD(P3.0)
  22. 将USB转串口工具的RXD连接单片机TXD(P3.1)
  23. 连接GND
  24. LED连接方式:
  25. 正极通过限流电阻(220Ω-1kΩ)连接IO口
  26. 负极接地
  27. 四、C语言实现代码

  28. #include "STC8H.H"  // STC8H系列头文件
  29. #include "intrins.h"</p><p>#define LED_PIN P20  // 假设LED连接在P2.0</p><p>void delay_ms(unsigned int ms) {
  30.     unsigned int i, j;
  31.     for(i=0; i<ms; i++)
  32.         for(j=0; j<1000; j++);
  33. }</p><p>void main() {
  34.     P2M0 = 0x00;  // 设置P2口为准双向模式
  35.     P2M1 = 0x00;
  36.    
  37.     while(1) {
  38.         LED_PIN = 0;  // 点亮LED(低电平驱动)
  39.         delay_ms(500);
  40.         LED_PIN = 1;  // 熄灭LED
  41.         delay_ms(500);
  42.     }
  43. }

  44. 五、代码烧录步骤
  45. 编译生成Hex文件
  46. 打开STC-ISP工具
  47. 选择正确的单片机型号(STC8H8K64U)
  48. 选择正确的串口号
  49. 设置合适的波特率(建议115200)
  50. 点击"打开程序文件"选择Hex文件
  51. 点击"下载/编程"按钮
  52. 给单片机上电(冷启动)
  53. 六、代码说明
  54. 包含必要的头文件:STC8H.H包含寄存器定义
  55. 定义LED连接的IO口(P2.0)
  56. 实现简单延时函数用于闪烁效果
  57. 主函数中配置IO口模式为准双向
  58. 无限循环中交替改变LED状态实现闪烁
  59. 七、常见问题解决
  60. 无法下载程序:

  61. 检查串口连接是否正确
  62. 确保冷启动时序正确
  63. 尝试降低波特率
  64. LED不亮:

  65. 检查硬件连接
  66. 确认限流电阻值合适
  67. 测量IO口输出电压
  68. 程序运行不稳定:

  69. 检查电源是否稳定
  70. 确认晶振频率设置正确
  71. 添加适当滤波电容
  72. 通过以上步骤,您应该能够成功点亮STC8H8K64U单片机上的LED灯并实现闪烁效果。如需更复杂的功能,可以在此基础上进行扩展。</p>
复制代码
可以看到,AI给出的答案基本囊括了应用这片单片机的全过程,或许对于新手而言答案毕竟过于简单,其中还会存在很多难以理解的问题,但是本着不懂就问的原则相信通过不断的提问要不了多久就能大致理解了,一旦熟悉了所有步骤就代表你已经入门了,对于STC单片机而言还可以省略USB转TTL口的步骤,看看说明书找那个USB下载的相关内容就可以很容易上手了,接下来就是一个学习方向问题了,如果只想根据C源码获得固件的话学习就可以结束了,如果还想深入学习编程的话,不妨把每一行代码、每一个关键字(单词)、每一个符号都作为问题提问,这就是完整的学习过程了。

比如我们提问:“#include "STC8H.H" 是什么意思,#代表什么,为什么要加双引号而不是别的符号”
答案如下:

  1. 我来详细解释一下关于#include "STC8H.H"的各个部分:

  2. #符号:

  3. 这是C/C++语言中的预处理指令标识符
  4. 所有以#开头的命令都是在实际编译前由预处理器处理的
  5. 常见的预处理指令还有#define、#ifdef、#endif等
  6. include:

  7. 这是包含头文件的指令
  8. 作用是将指定文件的内容插入到当前文件的这个位置
  9. 相当于把被包含文件的内容复制粘贴到这里
  10. 双引号""与尖括号<>的区别:

  11. 双引号"STC8H.H":
  12. 首先在当前文件所在目录查找该头文件
  13. 如果没找到,再到编译器指定的标准路径查找
  14. 通常用于包含用户自定义的头文件
  15. 尖括号<stdio.h>:
  16. 直接在编译器指定的标准路径查找
  17. 通常用于包含系统标准库头文件
  18. STC8H.H:

  19. 这是STC8H系列单片机的专用头文件
  20. 包含该系列单片机所有特殊功能寄存器(SFR)的定义
  21. 提供了方便的寄存器操作方式
  22. 为什么要用双引号:

  23. STC8H.H通常不是标准库文件
  24. 它一般位于项目目录或单片机开发包的特定路径
  25. 使用双引号可以确保编译器优先在项目目录中找到它
  26. 如果使用尖括号,可能会导致找不到这个非标准头文件
  27. 总结:这行代码的作用是在编译前将STC8H单片机的专用头文件内容包含到当前文件中,以便可以使用该单片机特有的寄存器定义和功能。
复制代码


十几年前我自学时就这个问题我就找了很久的资料,最后的理解也没有这个答案说的清晰直白,真的是时代进步了学习也简单了,这里也提醒新手,这个头文件STC8H.H在keil软件界面中选中后是可以在下拉菜单中打开的,打开后就能看到文件中的一条条语句都是给单片机的各个硬件部分起名字、安排地址等等操作,只有引用了它我们自己写代码时才能通过名字来指定被控制的硬件,比如说因为它定义了P1口的地址:P1=0x90;P1.0引脚:P10=P1^0;我们在写代码为P1口赋值时才可以写做:P1=0xFF(或其他值),为P1.0引脚定义状态时才可以写做P10=1(或0)也可以再次给P1.0引脚起一个名称,比如sbit LED0=P1^0;此后LED0=1就如同P10=1是一样一样的,其实sbit定义端口名字的方法是沿用C51的传统方法,对于STC单片机只要P10=1或P15=0就可以了。
由此可见通过网络提问不但可以了解新知识同时也是可以深入学习的,另外对于单片机的业余应用完全没必要等到完全了解了单片机相关是所有知识了再来上手应用,最好的方法是先把单片机看成是黑匣子用起来而后再根据用途逐步学习,也只有这样才能快速上手快速入门一步步脚踏实地的学习、进步。至于新手学习C编程是否需要英语基础,这里可以负责的说如果你懂英文或许可以加快融入速度但不懂英文也能写代码,那些关键字单词不会拼写可以复制粘贴,那些函数名称除了主函数名称外可以用拼音字母任意拼写,不懂英文业余玩单片机的人比比皆是,只是在使用新的器件时看不懂器件原版英文说明书是硬伤,任何翻译版都没有原文靠谱甚至有些译文还会错漏百出。

新手学习C51建议使用汉化版的keil uv2软件简单好用,建立新工程的方法网上教程非常多容易上手。至于单片机我还是建议用STC的,因为它是对新手最友好的单片机、没有之二,它硬件电路搭建非常简单不需要复位按键不需要外部晶振、示例代码丰富还有官网社区可以随时提问并且新手提问也容易获得回复,而且可以通过多种途径获取各种免费的芯片、实验板还有入门的视频教程,STC单片机开发包添加到keil软件中的方法在STC数据手册中有详细的描述,通过STC-ISP软件来添加非常简单,添加后建立工程时就又STC单片机可选了。


最后,文中观点属于个人观点并无其他所指,皆属于正常讨论范畴,如有异议可跟帖讨论,如有善意的批评指正本人将洗耳恭听有错必改。


本帖子中包含更多资源

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

x
发表于 7 小时前 | 显示全部楼层
我,开始了无数次。。。
回复 支持 反对

使用道具 举报

发表于 7 小时前 | 显示全部楼层
只要肯学,没有学不会的。
回复 支持 反对

使用道具 举报

发表于 7 小时前 | 显示全部楼层
没错的, 51单片机入门真的不难
回复 支持 反对

使用道具 举报

发表于 7 小时前 | 显示全部楼层
入门不难,没有汇编语言和数字电路基础知识的,
看看例程似乎会了,给个开发,就知道了
回复 支持 反对

使用道具 举报

发表于 6 小时前 | 显示全部楼层
入门不难,但学会单片机的编程逻辑就难多了。
回复 支持 反对

使用道具 举报

发表于 6 小时前 来自手机浏览器 | 显示全部楼层
想学就要有坚强的毅力,没有学不会的。
回复 支持 反对

使用道具 举报

发表于 5 小时前 | 显示全部楼层
更多的是经验积累,到了后期,更多的复制和粘贴了
回复 支持 反对

使用道具 举报

发表于 5 小时前 来自手机浏览器 | 显示全部楼层
类似有价值的 大家应该多探讨
回复 支持 反对

使用道具 举报

发表于 3 小时前 | 显示全部楼层
坐等华为的全中文编程语言。。。
回复 支持 反对

使用道具 举报

发表于 3 小时前 来自手机浏览器 | 显示全部楼层
动手就行了,纸上得来终觉浅…
回复 支持 反对

使用道具 举报

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

本版积分规则

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

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-8-7 21:17 , Processed in 0.109200 second(s), 8 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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