⑴ 新手如何学习编程
熟悉以下关键东西,可以边学边做,定期训练,经常思考,长期积累:
1、语法。
2、基础理论(数学、数据结构、算法等)。
3、设计方法(编程原则、设计模式、框架设计等)。
4、库(核心、基础、UI、扩展、游戏引擎等)。
5、计算机相关(操作系统、网络、图形学等)。
6、领域知识(游戏设计、网站设计等)。
7、开发工具(编辑器、IDE、自动部署等)。
8、项目管理(进度管理、分工协作、Bug管理、版本控制等)。
最普遍也是最重要的能力:创造力。努力分析并理解好做什么以及怎么做。要知道上面那些东西一开始都是不存在的。
具体方法包括:
1、快速阅读入门教程和书籍,适合学习语言和基础库。比如我学Java读的《Java编程思想》,练习题做过一点,然后学ActionScript就没读过书,只读过Adobe官方文档《ActionScript 3.0编程》。
2、阅读库的文档、实例、源码。比如Flash、Flex开发,熟悉官方API很重要,很多细节要具体使用时才注意到,这时候最好做个笔记,虽然我从没看过我的笔记。
3、做一个自己感兴趣或熟悉的小项目,比如我就以黑白棋游戏作为多个语言的试水项目,一样的逻辑,便于把关注点放在语言特点上。
4、自己动手丰衣足食。厨师有菜谱,程序员可没菜谱。比如我做游戏,最关键的游戏编程知识全部是动手学出来的,很少有专门针对某个业务领域(如游戏)的编程书籍,要么是入门书,要么是模式书(如算法)、理论书(图形学),很少有书籍教你如何开发一个45度角地图系统加编辑器的,全靠自己思考,以及看前人的代码,需要时找些网络资料。关键是,可以培养最重要的创造力。
对于算法和设计模式,可以研读下,但是关键还是靠平时如何使用了。新手勉强不来的。
项目管理方面的,就得靠工作经验了,多思考多提意见不要只走流程。
⑵ 关于51单片机做数码电压表时有段程序始终看不懂,请各位单片机高手们指点迷津
void也可以看成是数据类型,只是他是特殊的数据类型,这个类型就是“没有东西”。
比如一个函数
int a(int b){ }
表示函数的参数是int类型的,返回值是int类型的。如果没有返回值,也没有参数,就都把类型名称写成void,既然没有了,那么也就没有名称了,所以b也可以省了,便成了 void a(void) { }。
函数的定义是很基本的c语言知识,这个说起来很啰嗦,随便看书就能明白了。
void delay(void) 这个函数没什么特别意义,只是一个延时而已。因为单片机运行速度很快,数码管也不是恒定的点亮一个,而是动态扫描的,就是说,先点亮一个位,然后关闭,点亮另一个位。这个过程很快,由于视觉暂留作用,人眼只能看到所有的位都是同时亮的,这个原理和放电影一样,不过,如果点亮一个后,立即点亮另一个,会因为点亮时间太短,灯还没全亮就灭了(本人估计的,但应该也是这样),造成灯光太暗。所以要延时一下。
单片机的电源电压是5V,那么所有端口的承受电压就一定是5V,如果是3.3V单片机,就一定只能承受3.3V,所以测量量程一定是0 至 5V。如果实际测量量程远远小于这个范围,必须用放大器放大。如果量程大于这个范围,必须分压。
void convdata(unsigned char i)
这个 i 明显就是数模转换得到的结果,作为参数传递给这个函数处理。void以及函数参数等名词术语,说起来就是一本教科书的量,请自行看书,这是很基本的。
dis[0] = i/51 以及后面的两句,是一个数学问题。(dis[i]就是一个数组,这个不用多言)。
为什么是51呢?看他的注释“将0-255级换算成0.00-5.00的电压数值”。
也就是说,如果测得的电压是5V,那么数模转换的结果就是255,这是一个8位数的最大值,这个数模转换器的最大值就是8位,所以5V的电压转换得到就是255.
然后就可以照推了,如果测得的值是2.5V,那么得到的值就是255 / 2 = 127.5。也就是说,实际测得的值和这个转换值的关系是正比的,他们的比值就是 255 / 5 = 51 ,所以用测到的值去除以51,就得到实际值。明白了吗?如果这样说还不明白,那就没办法了~
然后,为什么后面又要搞那两条式子呢?这是因为,要把一个数值在数码管上显示出来,必须把一个数值上每一个位的数字单独处理给数码管显示。比如,上面除以51后,得到的数可能会有小数,比如1.45,那么要把这个数用数码管显示出来,就必须把 1、4、5和小数点都单独取出来。
以这个(i%51)*10/51*2为例:
i%51 , 是 i 除以 51 后的余数。这个数再除以51,再乘以10,再取整,就是第一个小数了。他这个式子把"乘以10"放在前面,是因为如果先除以51,那么因为i 和 51 都是int类型,结果也必将是int类型,没有小数,再乘以10也没意义了。至于后面为什么还要乘以2,这个还真不清楚,不过他这个dis数组是用来查表的,就是后面的tab[],要看他的表是怎么定义的。他第一个数没有乘以2,但是这个数和小数点的显示有关,可能不显示小数点的就要乘以2。
后面的求第二个小数,参照这个解释自己理解一下。