单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1220|回复: 32
打印 上一主题 下一主题
收起左侧

一个中年人的起步之路

  [复制链接]
跳转到指定楼层
楼主
钱木头 发表于 2020-3-7 18:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1981年出生的我,年级不小了。
时间过得太快了,从我懵懵懂懂的第一次敲完printf("hello world!!!\n"); 到现在已经过去了20年了
使用C语言出身,后面写过X86汇编,再后来C++,工作之余玩过N种各种各样花里胡哨的编程语言

虽然现在生活稳定,吃喝无忧。但总是感觉少了点什么
也许是10几年的拼搏磨灭了当初的激情。的确,再也不是那个熬夜敲代码的小伙子了。
趁这次特殊情况在家静养了一段时间,我也好好的问了下自己:“梦想还在吗?”
得到了一个很肯定的答案,从一个新的领域继续玩下去。
我这么琢磨的 :

1 可以找点正经事干干,不在把时间浪费在推杯换盏灯红酒绿里面。
2 可以教孩子制作各种各样玩具培养他的兴趣爱好。
于是我选择了单片机,顺理成章的来到了51hei 。
作为一个新人我想写个帖子,持续更新下去。就在本贴的下面,希望和新上路的你共勉!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 转播转播 分享分享 分享淘帖 顶2 踩
回复

使用道具 举报

沙发
sdwfcwl 发表于 2020-3-7 19:42 | 只看该作者
加油!都是80后!
回复

使用道具 举报

板凳
zhangzhi0406 发表于 2020-3-8 09:28 | 只看该作者
83年的,对单片机一窍不通,但想学,也愿意学!黑51是我前几天发现的新天地。
回复

使用道具 举报

地板
 楼主| 钱木头 发表于 2020-3-8 17:25 | 只看该作者
今天终于等到了快递小哥,第一次摸到51单片机。
迅速接电点亮。先从最简单的LED开始吧,虽然不明就里。但是通过4次测试
我发现我的板子是
P2 == 0       (00000000)  时全亮
P2 == 0xff   (11111111)  时全灭
P2 == 1       (00000001)  时最左面灯灭
P2 == 0X80 (10000000)  时最右面灯灭

好吧既然等了这么久,先不理会什么电路图懂不懂的。
打开音乐找到一首土嗨,让LED等给我HI起来吧
  1. #include "reg52.h"
  2. #include <intrins.h>

  3. typedef unsigned char u8;
  4. typedef unsigned int u16;

  5. void delay(u16 i)
  6. {
  7.         while(i--);
  8. }

  9. void power(u16 max, u16 d)
  10. {
  11.         u8 i;
  12.         for(i = 1; i <= max; i++)
  13.         {
  14.                 P2 = (0xff >> i);
  15.                 delay(d);
  16.         }
  17. }

  18. void powerlessness(u16 max, u16 d)
  19. {
  20.         u8 i;
  21.         for(i = 1; i <= max; i++)
  22.         {
  23.                 P2 = (P2 << 1) + 1;
  24.                 delay(d);
  25.         }
  26. }

  27. void main()
  28. {
  29.         u16 i;
  30.         u16 v = 0xff;
  31.         u16 n = v + 1;

  32.         power(8, 5000);
  33.        
  34.         for(i = 1; i <= 8; i++)
  35.         {
  36.                 P2 += (n >> i);
  37.                 delay(5000);
  38.         }
  39.        
  40.         delay(666666);
  41.        
  42.         while(1)
  43.         {
  44.                 power(6, 1888);
  45.                 powerlessness(3, 6666);
  46.                 delay(11111);
  47.         }
  48. }
复制代码




回复

使用道具 举报

5#
 楼主| 钱木头 发表于 2020-3-9 14:45 | 只看该作者
昨天拿到 了51开发板兴冲冲的一顿操作猛如虎。
把LED流水灯跑起来了,但随之而来不是高兴却是困惑!
今天花了些时间各种搜索,以及论坛发帖求人解惑
http://www.51hei.com/bbs/dpj-181455-1.html

首先 sbit 这个类型是什么
sbit 位变量名=地址值

我理解如下:
例如P2 = 0xA0;
sbit led1 = 0xa0 ^ 0; 与 sbit led1 = P2 ^ 0;
效果相同,下面打一个不那么恰当的例子 :
它其实就是一个地址
P2 = 0xA0
0xA0 ^ 0 = 0xA0 | 1010 0000
0xA0 ^ 1 = 0xA1 | 1010 0001
0xA0 ^ 2 = 0xA2 | 1010 0010
0xA0 ^ 3 = 0xA3 | 1010 0011

0xA0 ^ 4 = 0xA4 | 1010 0100
0xA0 ^ 5 = 0xA5 | 1010 0101
0xA0 ^ 6 = 0xA6 | 1010 0110
0xA0 ^ 7 = 0xA7 | 1010 0111

当设置某个地址的 值 为 0 时 LED被点亮
mem addr  | value
1010 0000 | 1
1010 0001 | 1
1010 0010 | 1
1010 0011 | 1
1010 0100 | 1
1010 0101 | 1
1010 0110 | 1
1010 0111 | 1

就好像
sbit led1 = P2 ^ 0;
while(1) {
    led1 = 0;
}

第二个困惑 sfr P2    = 0xA0;
为什么 P2的地址等于0xA0,但是我修改P2为 0x80的时候依然可以控制LED灯
例如
P2 = 0x80;
其实P2是一个地址, 是一个指针.
我们在执行P2 = 0x80的时候应该是隐式的执行了下面的语句
*(char*)0xA0 = 0x80; 所以可以控制LED灯
有兴趣的小伙伴们可以尝试修改
P2 = 0xA0;
看看8个等是不是只有6个亮了,其中排布类似于 1010 0000 = 0xA0
这就充分的证明了我们只是向 地址(0xA0) 当中写入了一个值 0xA0
等同于
mem addr | value
0xA0        | 0xA0

解决了上面两个疑问整个人感觉都轻松了不少。


回复

使用道具 举报

6#
 楼主| 钱木头 发表于 2020-3-9 15:03 | 只看该作者
本帖最后由 钱木头 于 2020-3-9 16:16 编辑

占楼占楼占楼占楼占楼占楼占楼占楼占楼
回复

使用道具 举报

7#
huiyi11 发表于 2020-3-9 15:42 | 只看该作者
同LZ一样,人到中年,总觉得少些什么,所以来这里学习学习
回复

使用道具 举报

8#
lianshu501 发表于 2020-3-9 17:31 | 只看该作者
到了中年做技术做不动了,单位小伙子每天看书到半夜,中年人太“南”了。
回复

使用道具 举报

9#
 楼主| 钱木头 发表于 2020-3-9 20:46 | 只看该作者
今天解决了几个困惑继续上路,先把所有基础的东西用源代码跑一遍。
顺便认识一下各个元器件,和很多陌生的名词。
下面是我写的一个数码管显示数字。尝试了一下C语言的抽象, C++程序员的陋习^_^

  1. Interface.h

  2. #ifndef __INTERFACE_H__
  3. #define __INTERFACE_H__

  4. typedef unsigned char u8;
  5. typedef unsigned int u16;
  6. typedef unsigned long u32;

  7. /**
  8. *  接口说明 : 显示一个数字
  9. *        参数 :
  10. *                x        : 显示位置的X坐标
  11. *                y        : 显示位置的Y坐标
  12. *                val : 具体需要显示的内容
  13. *        返回 :
  14. *                无返回值
  15. */
  16. typedef void(*pfnDisplayNumber)(u8 x, u8 y, u8 val);

  17. /**
  18. *        接口说明 : 清除屏幕
  19. */
  20. typedef void(*pfnClearScreen)(void);

  21. /**
  22. *        结构体说明 : 负责显示
  23. *        例如数码管、或者液晶屏等等
  24. */
  25. typedef struct _DisplayInterface {
  26.         pfnDisplayNumber displayerNumber;        // 用于显示一个数字的接口
  27.         pfnClearScreen clear;                                // 用于清除的一个接口
  28. }DisplayInterface;

  29. #endif

  30. ---------------------------------------------------------
  31. NixieTubeDisplay.h

  32. #ifndef __NIXIETUBEDISPLAY_H__
  33. #define __NIXIETUBEDISPLAY_H__
  34. #include "reg52.h"
  35. #include <intrins.h>
  36. #include "Interface.h"

  37. // 初始化一个数码管,例如外部创建的一个局部 DisplayInterface
  38. // 将地址传进来由InitNixieTube初始化.
  39. // 因为使用malloc不正常所以只设计了一个Init
  40. DisplayInterface * InitNixieTube(DisplayInterface * );

  41. #endif

  42. ---------------------------------------------------------
  43. NixieTubeDisplay.c

  44. #include "NixieTubeDisplay.h"

  45. sbit LSA = P2 ^ 2;
  46. sbit LSB = P2 ^ 3;
  47. sbit LSC = P2 ^ 4;

  48. // 0 - 9
  49. static const u8 numberHex[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};

  50. // 将一个数字显示到数码管
  51. void displayNumberToNixieTube(u8 x, u8 y, u8 val)
  52. {
  53.         if((val >= 0 && val < 10) && (x >= 0 && x < 8))
  54.         {
  55.                 // 设置显示内容
  56.                 P0 = numberHex[val];
  57.                
  58.                 // 设置显示索引
  59.                 LSA = (x >> 0 ) % 2;
  60.                 LSB = (x >> 1 ) % 2;
  61.                 LSC = (x >> 2 ) % 2;
  62.         }
  63. }

  64. // 清除显示
  65. void clearNixieTube()
  66. {
  67.         P0 = 0;
  68. }

  69. DisplayInterface * InitNixieTube(DisplayInterface * pDisplay)
  70. {
  71.         if(pDisplay) {
  72.                 pDisplay->displayerNumber = displayNumberToNixieTube;
  73.                 pDisplay->clear = clearNixieTube;
  74.                 return pDisplay;
  75.         }
  76.         return 0;
  77. }

  78. ---------------------------------------------------------
  79. main.c

  80. #include "NixieTubeDisplay.h"

  81. typedef u8(*pfnCallback)(DisplayInterface * displayObject);

  82. void delay(u16 i)
  83. {
  84.         while(i--);
  85. }

  86. void display(u8 index, u8 number,
  87.         DisplayInterface * displayObject, pfnCallback callback)
  88. {
  89.         if(displayObject)
  90.         {
  91.                 displayObject->displayerNumber(index, 0, number);
  92.                 if(callback) { callback(displayObject); }
  93.         }
  94. }

  95. void message(DisplayInterface * displayObject)
  96. {
  97.         delay(100);
  98.         // 当接收到这个消息的时候,说明已经显示完了
  99.         if(displayObject)
  100.         {
  101.                 displayObject->clear();
  102.         }
  103. }

  104. void main()
  105. {
  106.         u8 n = 0;
  107.         u8 i = 0;
  108.         DisplayInterface v;
  109.         InitNixieTube(&v);
  110.         while(1)
  111.         {
  112.                 for(i = 0; i < 10; i++)
  113.                 {
  114.                         display(i, i + 2, &v, message);
  115.                 }
  116.         }
  117. }
复制代码
回复

使用道具 举报

10#
 楼主| 钱木头 发表于 2020-3-10 17:04 | 只看该作者
今天花了一天时间把中断系统看了一遍,并且编写了对应的代码。独立按键以及定时器都可以接收到中断信号了
其它的外设模块我想暂时没必要看下去了,是时候回过头去研究最小系统了。然后就是画一个PCB打样焊接了。
在这里和很多入门的新人交流一下心得,我认为按我上面这几天的步骤学习就差不多了
以后那些外设模块。用到了什么就查看对应芯片的手册,以及如何设计到板子上面。
快速的画板打样焊接,当焊接调试通过了之后我估计在学校那些数电和模电的知识也巩固的差不多了。就算没学过,也学的差不多了。
后面用到什么学什么
回复

使用道具 举报

11#
好技术致用 发表于 2020-3-16 11:05 | 只看该作者
支持楼主,八零后
回复

使用道具 举报

12#
esslitao 发表于 2020-3-22 10:43 | 只看该作者
有电路基础,自己确实爱好,又想学,那就能学好。
回复

使用道具 举报

13#
好技术致用 发表于 2020-3-23 16:05 | 只看该作者
做市场销售、硬件 软件 壳体 技术和管理的朋友们,大家相互照顾,若遇到有客人需要可以相互推荐下
回复

使用道具 举报

14#
xizhe2005 发表于 2020-3-24 16:36 | 只看该作者
80年,16年开始复习电子,单片机,只为充实,
回复

使用道具 举报

15#
llm4109 发表于 2020-3-26 14:13 | 只看该作者
标题描述了一个20年的老油条来混51了
回复

使用道具 举报

16#
noble64 发表于 2020-4-2 16:37 | 只看该作者
80后业余学了两年了,花了不少时间。太多地方还是没明白,目前水平入门阶段,简单的都理解了,稍微变换一下就转不过弯了,总是很难深入。
回复

使用道具 举报

17#
我爱涂鸦 发表于 2020-4-5 12:33 来自手机 | 只看该作者
70后默默地看
回复

使用道具 举报

18#
sdvic 发表于 2020-4-12 00:21 | 只看该作者
我个人认为培养一下兴趣是好的,总比整天无所事事不是抽烟喝酒赌博好,还有不要让你的兴趣和爱好作为你的谋生工具就好了!
回复

使用道具 举报

19#
Y_G_G 发表于 2020-4-14 09:48 | 只看该作者
sdvic 发表于 2020-4-12 00:21
我个人认为培养一下兴趣是好的,总比整天无所事事不是抽烟喝酒赌博好,还有不要让你的兴趣和爱好作为你的谋生 ...

哥们你这就错了
有一门工作,你又喜欢它,它又能给带来面包,对于一个中年男人来说这得是多快乐的事呢!
回复

使用道具 举报

20#
sdvic 发表于 2020-4-16 22:27 | 只看该作者
呵,每个人的认识和经历都不同,没有谁对谁错的,适合自己就行,如果这兴趣得天天要弄,不弄就没饭吃了,这会让人倍感压力!我喜欢兴趣偶尔拾起好了.
回复

使用道具 举报

21#
zhangbo8812 发表于 2020-4-22 19:17 | 只看该作者
停更了?
回复

使用道具 举报

22#
Sky丶蓝天 发表于 2020-5-5 11:18 | 只看该作者
这个好,顶一下
回复

使用道具 举报

23#
饮酒作乐 发表于 2020-5-27 16:17 | 只看该作者
插个眼,等大叔更新
回复

使用道具 举报

24#
cheney03 发表于 2020-5-28 00:34 | 只看该作者
同为80后,现在还在逛论坛
回复

使用道具 举报

25#
lgeta 发表于 2020-5-28 15:57 | 只看该作者
俺是年级大了只能当个爱好了,俺没基础学也费劲
回复

使用道具 举报

26#
wufeng391 发表于 2020-7-12 08:25 | 只看该作者
       81年,在学校的时候学PLc和单片机却从来没有见过实物,只有一些简单的概念。毕业时也不知道单片机和PLC是什么样子的。只知道能编制程序。程序?那是做什么的?根本就没有这种概念。语言也只知道一点,估计那种编程语言早就已经淘汰了。汇编也仅仅是知道一点。
       毕业几年后才当的电工,有机会见到曾经的尝过的PLc,是欧姆龙的C40,看外壳已经很老了,不过能见到实物也算不容易了,可能当时的同学还有很多人到现在依然没有见过PLC吧!在学校学的是三菱的,不过大同小异,咱也只会一些基础的编程,什么高速计数,中断完全没有概念。根本没有机会编程,车间的程序也不是没事就让你编的!
       刚开始编程序或者说是修改程序是用手持的编程器的,不过能接触实际的程序就已经很高兴了,后来才知道用电脑也可以编程,需要编程软件!接着就自学相关的编程软件,在网上找相关视频。也学了点东西。
       直到车间进行设备改造,安装电子制动器,制动器坏了后修不好的就被分解了,见到上面的集成电路不知道上面写的是什么,在网上查才知道这是传说中的单片机!说实话,这是我第一次见到单片机,可能大家觉得可笑,学过的东西居然没有见过!不过这是真的,于是把在学校时发的书找出来看一下,唉!那是一脸茫然!真的好难!
       后来在网上找到一些视频看才知道,单片机的编程已经开始用C了,不过对C也没有什么概念。在学校时没有学过,不过视频上说这都不是问题,就看一些视频后觉得还行,就买了开发板,巧的是开发板上的单片机与我在制动器上拆下来的居然是一个型号,长的一模一样。
      也就是因为手上有了实例,学着才有一个大致的方向,看视频,抄程序,然后烦了就好长时间不看,反复了几次,视频大概看了才两遍,已经五六年了,通信以前的内容理解还凑合,到了通信就走的很慢,不过做为兴趣也好,高兴的时候再看看。
      不为别的,只为学校那几年,说实话,学校学的东西除了单片机,PLc、机床编修的基本知识外,其余的已经记不清了!
回复

使用道具 举报

27#
45°c 发表于 2020-7-21 22:23 | 只看该作者
刚要毕业的我,看到前辈都这么努力,我更要努力点!!
回复

使用道具 举报

28#
不穿鞋的赵铁柱 发表于 2020-7-23 11:24 | 只看该作者
毕业两年,一直在做三菱PLC的程序,电路之类的,打算捡起单片机学一下(虽然已经忘光了)
回复

使用道具 举报

29#
不穿鞋的赵铁柱 发表于 2020-7-23 11:26 | 只看该作者
向前辈看齐,开始学习单片机,有那位大佬可以分享一下进修的过程,比方说单片机,树莓派,linux,PYthon什么的。
回复

使用道具 举报

30#
好技术致用 发表于 2020-7-23 17:16 | 只看该作者
有个想法欢迎大家说说可行性:做技术和业务两拨朋友结合起来,可以成事吧
回复

使用道具 举报

31#
郑玉发 发表于 2020-8-1 18:11 | 只看该作者
加油 ,新手路上共勉
回复

使用道具 举报

32#
shuisheng 发表于 2020-8-1 19:39 | 只看该作者
本人60年,儿孙满堂,爱好电子,爱动手,喜欢新知识新技术,不爱吹牛喝酒玩游戏,整电子己成了人生一大乐趣!
回复

使用道具 举报

33#
sunboy888888 发表于 2020-8-7 17:19 | 只看该作者
noble64 发表于 2020-4-2 16:37
80后业余学了两年了,花了不少时间。太多地方还是没明白,目前水平入门阶段,简单的都理解了,稍微变换一下 ...

和你一样,简单的能理解学会,深入一点就不会了,网上找了很多资料,大多是观赏性的,一步一步教实操性的不多
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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