这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 34岁“高龄”学习单片机,以此贴记录重难点,坚持!坚持!、

共150条 1/15 1 2 3 4 5 6 ›| 跳转至

34岁“高龄”学习单片机,以此贴记录重难点,坚持!坚持!、

菜鸟
2014-05-11 20:25:13     打赏

本来此贴是发在百度单片机贴吧,本意是记录学习上遇到的重难点备以后查阅,同时也激励自己不要放弃。没想到引起很多朋友关注,甚至吧主也与我联系希望我在这里同步更新。可进来一看,与贴吧不同,这里全是技术大神,我这一100%的新手发个帖子更新很有点现眼的嫌疑。不过既然答应了就要做到,望大神们给予指正和指导。

 

先简单介绍下自己吧。
高中毕业后家里经济上遇到点事就没继续读大学,自学了一些电脑基础后,朋友介绍去一家网络公司工作,做系统集成工程。后来在方正公司的维修站工作了2年,做返修管理和笔记本维修。也算是技术出身。06开始自己创业,做电脑配件渠道批发。
本来嘛,生活可能也就这样安逸的过下去了,结果10年一次投资失败让我亏了上百万,到现在还没还清银行欠款,为还债,也就房子还没卖掉。
整整颓废了2年啊。因为没资金了,生意也没什么心思管,全靠老婆在撑着。现在想想真对不起她。
去年开始振作精神,因为有很多老客户的关系,生意慢慢也又有了起色。
但经历这一劫,我开始慢慢懂得,做生意,玩资金是很不保险的。尤其是现在电脑行业整体低迷的情况下,生意更加难做。怎么样提高竞争力呢?资金是没什么了,赚点钱就要拿去还贷款,没有太多流动资金备货。那么只有靠技术了,但以前我所掌握的技术在现在根本不能称之为技术。就比如装机装系统,以前装个WIN98需要在DOS下操作一大堆命令,还得装驱动、装应用软件,整个弄下来要大半天时间。现在呢,一个GHOST20分钟什么都搞定了。以前做网络系统集成工程、监控什么的好像很神秘,现在呢,很多非专业的电工都可以去做了。以前笔记本上万块一台,换个主板怎么着也有几百块钱赚,现在一台笔记本便宜的两千多,坏了直接扔。
一定要学一学能真正称之为技术的东西了。
综合比较来看,我看上了硬件开发。起码以后如果自己开发出产品,凭借自己的渠道能力,销售上不会成太大问题。
然而现在心里还有有点没底,到了我这个年龄,女儿都上小学了,再来学这个,还能学的会么,还能学的精么?
即使学会了,在这个年龄去找个工作实习一下的机会可能都没有,只能靠自己摸索。
(相关从业的朋友能不能给点建议)
不过,既然决定要学,那也不能瞻前顾后。查了一些信息后,下载了郭天祥的视频(想想真是悲催,郭天祥比我还小2岁,看看人家,再看看自己。更加坚定了决心。),下载了相关的软件,proteus,keil4,以及各种需要用到的工具书。本来打算买块板,一两百块钱说起来也不算太贵,但后来看了一些介绍决定先用仿真入门,以后自己做块板。仿真的实验板找了2版不同的,第一个后来发现问题挺多,就又找了一个。

TX1-C-1.0这块蜂鸣器一直会响,同时做流水灯实验时做不成功。

 

下面这一块TX1-C型实验板基本就很好了,用之前把蜂鸣器的三极管Y镜像一下就可以正常使用了。(这里有个小问题,郭天祥视频里可能对这个开关三极管讲的不对,后面再说,请高手解读一下)
PS:事实上这个图在我现在做到动态数码管显示的时候也出问题。当显示到第5 位或第6位时,就出现后4个数码管同时显示。程序我检查了很多遍没什么问题,后来把郭天祥的HEX直接拿来编译同样会有这个问题,仿真上的数码管我重新换过也同样。我想应该是硬件电路的问题吧。还有,在延迟调低以后,数码管显示不出来,就几个横竖线乱闪。说起来,实际板子是靠余晖和人眼的延迟实现扫描显示,而仿真是不是做不到这一点?请高手指点。。
 

 


下载地址我忘记了,有需要用的朋友说一声我发给你们把。

(后来贴吧里要的朋友很多,就弄了个网盘,放了一些我在用的PDF资料、视频和软件,学习的话基本够用了,地址是:http://yun.baidu.com/share/link?shareid=906877302&uk=3120638493)


5.21日网盘更新,之前网盘分享可能有软件侵权被百度吞了,整理后重新分享,万一又被吞~~也可以加我QQ64161297。网盘地址:——回复可见内容——

 

 

 


菜鸟
2014-05-11 20:32:01     打赏
2楼

先说说对学习方法的理解。
我觉得郭天祥的方法很好,在做实例的同时穿插学习所要用到的知识点。当达到一个层次的时候再回头学习一些以前难以理解的概念。
这样可以很快的入门,同时不会产生畏惧和放弃的心理。
虽然基础可能会不牢,但掌握了基本方法,有了基本的理解,基础可以慢慢补。那时就容易多了。
我在学单片机之前,本来给自己的计划是先学易语言(因为自己英文底子不好,想通过中文编程来入门,了解编程的基本方法和思路),然后学C语言和模拟电路数字电路,然后再学单片机。其实这就是一种畏惧心理,不敢碰,怕碰了以后学不会反而打击了积极性。
可是在学易语言的过程中(大概学了一个多礼拜),偶尔看到了郭天祥的那本《新概念51单片机C语言入门、提高》后,突然发现郭天祥教授的思路和我学习的方法非常契合。比如我学易语言时就是这样,简单看了2天基础概念,就开始做一个返修管理软件(自己刚好公司要用,网上又找不到合适的),在做的过程中,碰到不会的就去查资料,感觉到基础知识不牢,就去系统的看书。软件很快做了大半,老婆一天看到了,很惊奇的说你怎么还会这个。我告诉她我业余学了一礼拜她根本不信,她每天睡的早,还以为我在书房天天弄到半夜是在玩游戏。
本打算把易语言学精通,然后学好C语言和模电数电再来学单片机,但现在发现跟着郭的视频和思路走,根本不必要这样。因为我时间耗不起。

下面是之前用易语言做的返修管理,还没完工。 呵呵
等一鼓作气跟着郭天祥的视频学完这十几天的课程,我还是要把它给做完的。

 

 


菜鸟
2014-05-11 20:40:54     打赏
3楼
接下来进入正题了。
先总结一下这几天碰到的一些印象深刻的东西。
1.仿真板就是个虚拟的开发板,在proteus通过菜单“打开”来打开运行,或者直接双击仿真板的文件也可以。
仿真板所运行的C语言源程序是在proteus运行仿真板后,通过双击仿真板上的单片机,然后选择电脑里的路径来打开,相当于给开发板下载源程序。
仿真板可以和KEIL设置成同步调试(似乎是需要装个KEIL驱动,有点记不清了,我也是按网上的教程做的)。这样后面使用起来就很方便了。


2.郭天祥视频第2课里的例子:
while(1)
{
a=51000;
p1_1=0;
while(a--) ;
a=51000;
p1_1=0;
while(a--) ;


a=51000;
p1_1=1;
while(a--);
a=51000;
p1_1=1;
while(a--);
}
这里我开始始终不理解怎么延迟,程序又是怎么走的。
后来慢慢明白了。给变量a赋个值51000,然后去循环减它,至于减的速度跟系统频率有关,也就是说,系统(CPU或总线)运行的越快,这个值减的就越快。 51000这个数看起来很大,但系统给减完就几百毫秒。这个程序运行的顺序是自上而下的,,打开后,减完第一个51000,这时候a=0了,因为a!=0 是while()为真的条件,于是while(a--)循环的条件就不具备了,于是跳出循环,继续执行下一条语句。然后再打开LED,再减个51000,这样做的原因是定义的变量是无符号整型,最大只有65535,我们要让它多延迟一会的话,就得再写一条,而不能写a=102000。执行完后接下来再去关闭,再去延迟。因为外面还有个while(1)大循环,所以只要不断电,等会一直闪下去。
总结下来,这里我开始的不理解可能是忽略了当a减到0的时候while(a--)会跳出循环继续执行下一条语句。导致整个程序没能理解。

菜鸟
2014-05-11 20:41:30     打赏
4楼
3.关于C语言语法
暂时碰到的主要是分号的用法。刚开始有点糊涂,总结一下:
带#号的: #include 和#define 这些语句后面不加分号
声明变量要加分号
声明子函数要加分号
调用子函数也要加分号
但建立子函数时不要加分号(后面有大括号的都不要加分号)

执行的动作、定义变量这些,赋值语句都要加分号

工程师
2014-05-11 20:42:40     打赏
5楼
热烈欢迎

工程师
2014-05-11 20:45:14     打赏
6楼
楼主加油啊,各位同学和楼主一起学习。。。

菜鸟
2014-05-11 20:45:50     打赏
7楼
4.关于进制转换
感觉在单片机里,主要要掌握16进制<—>2进制互相转换。
我看郭天祥视频里算的非常快,自己于是研究了一下算法。


2进制转换为16进制比较简单,口算基本没问题。
通常算法为:
比如 1101,0101

换成10进制:
1101
2的3次方+2的平方+1=8+4+1=13
0101
2的平方+1=5
那么16进制就是0xd5
如果还想更快,那么就要记得几个基本的数:2的3次方是8,在千位上(就好比10的3次方是1000)2的平方是4,在百位上 ,2的一次方是2,在10位上。

记住这几个数,1101就可以直接反映到脑子里8+4+1=13
这就个是熟能生巧的事。


16进制转换2进制就麻烦点了,口算有点累,正常算算要打打草稿
比如0xfa
正常算法为:
f=15 a=10

那么就是15,10
就是 15/2=7 余 1
7/2=3 余 1
3/2=1 余 1

1/2=0 余 1
结果就是1111
10也同样


但这样算太麻烦了 搞不好还要错
单就F来说 ,完全就可以直接记住,就是1111
至于10,我觉得可以分解一下来算:
10=8+2
8是2的3次方,在10进制中,10的3次方是1000,在千位(第四位)上,于是在2进制里也是在千位(第四位),那么就是1000, 2是2的1次方,那么在十位上,就是10,于是合在一起就是1010
这种算法是不是很直观简单?
扩展开去,再大的数,转换成2进制都不难算.当然超过16基本在这里用不到
比如135
=128+7=128+4+2+1=2的7次方+2的平方+2+1
于是就是10000000 ,100 ,10 ,1'
合起来就是10000111
用这种算法最好记住这些数:2,4,8,16,32,64,128,256,512,1024,2048,是2的几次方。对我来说,因为本身做电脑,这些数就是内存大小,倒是很熟悉。
记住以后,看到一个数,基本很快就能心算出来,顶多用笔稍微辅助一下。
如果要算的数是254这种数,比128大很多,但比256只小一点,那么可以这样来:
256=100000000
254=256-2
那么就给100000000退位
256-1就变成11111111
256-2就是 11111110

这里还是有点绕的,写了好长时间 呵呵

工程师
2014-05-11 20:46:12     打赏
8楼
先加个精再说

工程师
2014-05-11 20:51:53     打赏
9楼
这些进制转换知道怎么用就行了,电脑也有计算器,直接转换,妥妥的

菜鸟
2014-05-11 20:56:07     打赏
10楼

5.还是关于进制的
开始犯了概念性错误,视频里也没讲清楚,查资料才了解到:

举个例子,比如流水灯
P0^0 1

P0^1 1

P0^2 1

P0^3 0

P0^4 1

P0^5 0

P0^6 1

P0^7 1


我开始以为这个“位”的16进制数为:0xeb
实际上应该是0xd7

错误根源在这个状态表示为16进制数应该从后往前数
是1101,0111
而不是1110,1011
原因是跟10进制一样,数字从左往右排列的顺序是从高位到地位,P1^7口是高位,所以应该在最前面,P1^0口在最低位,所以要在后面
结果表示出来就是1101,01111

 

(特别感谢贴吧里“蛇会大学未毕业”,提醒我注意单片机口是从0-7,开始我给写成了1-8)

然后现在又发现之前些的都是P1^X,实际在TX1C上P0口才是接流水灯的,在此一并更正。


共150条 1/15 1 2 3 4 5 6 ›| 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]