从单片机初学者迈向单片机工程师
从单片机初学者迈向单片机工程师(对初学者非常有用)

从单片机初学者迈向单片机工程师 目录: 一、LED 1 二、LED 主题讨论周第二章----学会释放 CPU................................................. 2 三、LED 识..............................................8 四、LED 灯................................................25 五、LED 28 六、KEY 主题讨论第一章按键程序编写的基础..................................... 37 主题讨论周第五章----多任务环境下的数码管编程设计................. 主题讨论周第四章----渐明渐暗的 主题讨论周第三章----模块化编程初 主题讨论周第一章----写在前面....................................................摸索出来了自己的一条路子。当然这 个过程必然是艰辛的,而他学会 了之后也不会在网络上轻易分享自己的学习成果。如此恶性循环下去,也 就不难理解为什幺初级的学习资 料满天飞,而深入一点的学习资料却很少的原因了。相较于其他领域,单 片机技术的封锁更加容易。尽管 已经问世了很多年了,有价值的资料还是相当的欠缺,大部分的资料都是 止于入门阶段或者是简单的演示 实验。但是在实际工程应用中却是另外一回事。有能力的高手无暇或者是 不愿公开自己的学习经验。 很多时候,我也很困惑,看到国外爱好者毫不保留的在网络上发布自己的 作品,我忽然感觉到一丝丝的 悲哀。也许,我们真的该转变一下思路了,帮助别人,其实也是在帮助自 己。啰啰嗦嗦的说了这幺多,相 信大家能够明白说的是什幺意思。在接下来的一段日子里,我将会结合电 子工程师之家举办的主题周活动 写一点自己的想法。尽可能从实用的角度去讲述。希望能够帮助更多的初
从技术员迈向工程师的历程 已读

学习单片机也已经有几年了,藉此机会和大家聊一下我学习过程中的一些经历和想法吧。
也感谢一线工人提供了这个机会。
希望大家有什么好的想法和建议都直接跟帖说出来。
毕竟只有交流才能够碰撞出火花来^_^。
几年前,和众多初学者一样,我接触到了单片机,立刻被其神奇的功能所吸引,从此不能自拔。
很多个日夜就这样陪伴着它度过了。
期间也遇到过非常多的问题,也一度被这些问题所困惑……等到回过头来,看到自己曾经走过的路,唏嘘不已。
经常混迹于论坛里,也看到了很多初学者发的求助帖子,看到他们走在自己曾走过的弯路上,忽然想到了自己的那段日子,心里竟然莫名的冲动,凡此总总,我总是尽自己所能去回帖。
很多时候,都想写一点什么东西出来,希望对广大的初学者有一点点帮助。
但总是不知从何处写起。
只是想认真的写写我这一路走来历经的总总,把其中值得注意,以及经验的地方写出来,权当是我对自己的一个总结吧。
而作为看官的你,如果看到了我的错误,还请一定指正,这样对我以及其它读者都有帮助,而至于你如果从中能够收获到些许,那便是我最大的欣慰了。
要成为一名优秀的单片机开发工程师,最重要的素质是什么?单片机从开发到产品端有很多关键阶段。
首先,开发新产品需要了解市场需求和应用方面的技术,才能定IC的规格;IC规格定下来后才能进行IC设计;IC设计完成后要进行验证;验证完成后,要做演示版进行市场推广。
这些阶段都要求单片机工程师具备优良的素质。
首先他们要懂技术,并注意技术经验的长期积累。
比如定IC规格,这是决定IC成败的关键,规格定得好,IC才能做得好。
但IC规格不能关起门来自己定,一定要与市场和产品端相结合。
所以就要求工程师必须熟悉整机产品的整个研发和生产过程,要懂生产环节和产品的专业知识,懂IC内部的相关工艺和IC设计。
因此,要完全掌握这项技术至少需要十年的经验积累,并且要一直做到工程主管的职位,才有可能完成。
因此这种人才在任何一家公司都非常宝贵,大概只有2%的人能做。
51学完后进阶方向

51单片机学完后进阶方向相信各位同学有了51单片机编程基础之后,都会对可编程器件的工作原理有个直观的认识,如果你发现自己对编程控制一些实物比较有兴趣,或者有志于进入我们基地,那么接下来可以有两个发展的方向供你选择:1、软件组ARM方向:这里给一个ARM的简单介绍,具体的请谷歌一下。
ARM内核处理器是当今世界上使用数量最多的处理器,苹果、三星、HTC、小米等几乎所有的智能手机、平板电脑用的都是ARM内核处理器(stm32单片机虽然也是arm内核,但是因为过于精简,不算在此类处理器里),ARM处理器将来有非常大的发展空间。
此处说的ARM处理器通常可以搭载操作系统,以android和linux为主,我们使用的主要是linux。
ARM方向主要是研究linux系统,尤其是嵌入式linux,这里需要大家有个队底层单片机控制的基本认识,所以先鼓励大家学习单片机。
一般来说,我们使用ARM处理器作为中位机或者上位机,由ARM发送指令给单片机执行,单片机做控制和传感器数据采集,ARM做指挥,不直接控制,但是受益于科技的发展,前两年出现了一种名为“卡片电脑”的ARM板(其代表为“树莓派”),这种板子也带有GPIO引脚,直接支持IIC,SPI等功能,可以直接控制传感器。
当然,它这方面的控制功能比起单片机来说还差一些,但是由于基于linux系统,使用的是一些高级程序语言,并且带有大量的库函数,使用起来非常简单和方便,开发速率远超单片机,为喜欢DIY的人提供了一个方便快捷的开发平台。
不过我们为了以后升级方便,以及追求更高的实时性,现阶段依然是由单片机管理硬件,ARM不直接参与硬件控制。
选择ARM方向你将会学到以下的知识:(一)、linux基本操作,如命令行,python编程等(二)、嵌入式linux的相关技术,如嵌入式系统底层驱动、嵌入式定制操作系统的裁减与移植、嵌入式系统板载应用程序、网络通讯程序等。
(三)、软件算法的研究,如视觉,路径规划等。
51单片机初学者到电子工程师

51单片机初学者到电子工程师(1)一、前言很多电子工程师在某个方面精深钻研,成为某一个特殊领域的专家,从一开始的养家糊口、慢慢小有收益、最后宝马豪宅,也是有的;这些电子工程师可能没有全面掌握这些知识,因为这些行业用不上,例如,液晶显示器,很多行业就不需要;但是,对于一个初学者,我认为,这个提纲是切合实际的,对于面向控制而言,已经基本够用了;对于初学者,全面地掌握这些知识是很有必要的,因为你不知道今后需要使用什么哪些知识,而这些知识,80%以上你会在今后的工作中使用上,因为这是都是最基本的。
熟练掌握这些知识和应用,根据不同的地区、行业和老板,月薪应该可以在3000元~5000元之间,甚至更高。
其实,可能有些你用不上,但是知道了也没有坏处;所谓书到用时方很少,又有谓艺不压身。
知识=月薪=年薪=金钱=香车宝马=…….. ,呵呵。
为什么要掌握这些知识?实际上,电子工程师就是将一堆器件搭在一起,注入思想(程序),完成原来的这些器件分离时无法完成的功能,做成一个成品。
所需要的技能越高、功能越复杂、成本越低、市场上对相应的东东的需求越大,就越成功。
这就是电子工程师的自身的价值。
从成本到产品售出,之间的差价就是企业的追求。
作为企业的老板,是在市场上去寻找这样的应用;对电子工程师而言,是将老板提出的需求或者应用按照一定的构思原则(成本最低、可*性最高、电路板最小、功能最强大等)在最短的时间内完成。
最短的时间,跟电子工程师的熟练程度、工作效率和工作时间直接有关。
这就是电子工程师的价值。
将电子产品抽象成一个硬件的模型,大约有以下组成:1) 输入2) 处理核心3) 输出输入基本上有以下的可能:1) 键盘2) 串行接口(RS232/485/can bus/以太网/USB)3) 开关量(TTL,电流环路,干接点)4) 模拟量(4~20ma、0~10ma、0~5V(平衡和非平衡信号))输出基本上有以下组成:1) 串行接口(RS232/485/can bus/以太网/USB)2) 开关量(TTL、电流环路、干接点、功率驱动)3) 模拟量(4~20ma,0~10ma,0~5V(平衡和非平衡信号))4) LED显示:发光管、八字5) 液晶显示器6) 蜂鸣器处理核心主要有:1) 8位单片机,主要就是51系列2) 32位arm单片机,主要有atmel和三星系列51系列单片机现在看来,只能做一些简单的应用,说白了,这个芯片也就是做单一的一件事情,做多了,不如使用arm来做;还可以在arm上加一个操作系统,程序既可*又容易编写。
(整理)从51初学者到电子工程师47220

Ⅰ前言& 51单片机最小系统一、前言我的帖子“合格的电子工程师需要掌握的知识和技能”在电子工程师论坛上发表后,点击的人数还行,这让我也小有了成就感一把。
也有人说这个帖子太空,是的,因为实际上这只是一个我对公司初级员工讲课的培训大纲;但是,初学者可以将这个大纲作为一个参照物,参照自己的知识是否全面。
很多电子工程师在某个方面精深钻研,成为某一个特殊领域的专家,从一开始的养家糊口、慢慢小有收益、最后宝马豪宅,也是有的;这些电子工程师可能没有全面掌握这些知识,因为这些行业用不上,例如,液晶显示器,很多行业就不需要;但是,对于一个初学者,我认为,这个提纲是切合实际的,对于面向控制而言,已经基本够用了;对于初学者,全面地掌握这些知识是很有必要的,因为你不知道今后需要使用什么哪些知识,而这些知识,80%以上你会在今后的工作中使用上,因为这是都是最基本的。
熟练掌握这些知识和应用,根据不同的地区、行业和老板,月薪应该可以在3000元~5000元之间,甚至更高。
其实,可能有些你用不上,但是知道了也没有坏处;所谓书到用时方很少,又有谓艺不压身。
知识=月薪=年薪=金钱=香车宝马=…….. ,呵呵。
为什么要掌握这些知识?实际上,电子工程师就是将一堆器件搭在一起,注入思想(程序),完成原来的这些器件分离时无法完成的功能,做成一个成品。
所需要的技能越高、功能越复杂、成本越低、市场上对相应的东东的需求越大,就越成功。
这就是电子工程师的自身的价值。
从成本到产品售出,之间的差价就是企业的追求。
作为企业的老板,是在市场上去寻找这样的应用;对电子工程师而言,是将老板提出的需求或者应用按照一定的构思原则(成本最低、可靠性最高、电路板最小、功能最强大等)在最短的时间内完成。
最短的时间,跟电子工程师的熟练程度、工作效率和工作时间直接有关。
这就是电子工程师的价值。
将电子产品抽象成一个硬件的模型,大约有以下组成:1) 输入2) 处理核心3) 输出输入基本上有以下的可能:1) 键盘2) 串行接口(RS232/485/can bus/以太网/USB)3) 开关量(TTL,电流环路,干接点)4) 模拟量(4~20ma、0~10ma、0~5V(平衡和非平衡信号))输出基本上有以下组成:1) 串行接口(RS232/485/can bus/以太网/USB)2) 开关量(TTL、电流环路、干接点、功率驱动)3) 模拟量(4~20ma,0~10ma,0~5V(平衡和非平衡信号))4) LED显示:发光管、八字5) 液晶显示器6) 蜂鸣器处理核心主要有:1) 8位单片机,主要就是51系列2) 32位arm单片机,主要有Atmel和三星系列51系列单片机现在看来,只能做一些简单的应用,说白了,这个芯片也就是做单一的一件事情,做多了,不如使用arm来做;还可以在arm上加一个操作系统,程序既可靠又容易编写。
三步教你从零开始成为单片机达人(附单片机实验经典详解)

三步教你从零开始成为单片机达人(附单片机实验经典详解)无论是作为一名业余的电子爱好者还是一名电子行业的相关从业人员,掌握单片机技术无疑可以使您如虎添翼,为您的电子小制作或者开发设计电子产品时打开方便的大门!学习单片机技术有一定的难度,不花费一番努力是很难学会的,但是只要不断努力就一定能成功,套用一句广告歌词:努力总有回报!学习单片机最好从51系列开始,第一是书多、资料多,而且掌握51技术的人多,碰到问题能请教的老师也就多了,51系列的实验芯片AT89C51价格低廉而且很容易买到,AT89C51芯片而且可以反复擦写1000次以上,对于初学者来说真是太合适了,就算以后考虑工业运用,也可以先学透51后再学其他类型的单片机,毕竟技术是相通的。
学习单片机的第一步是看书,单片机是一个知识密集的东东,不看书是绝对不行的,北京航空航天大学出版社出版了大量单片机方面的好书,你可以直接登录他们的网站进行邮购。
学习单片机的第二步是购买工具,单片机芯片必须借助编程器才能写入程序,站长用的编程器是一种性能较好的Genius NSP 通用编程器,通用编程器的特点是专为开发单片机和烧写各类存储器而设计的通用机型,它的编程可靠性高,支持的器件品种很多。
Genius NSP 通用编程器:4Opins万用锁紧插座。
适应绝大多数器件编程之所需。
使用适配器能够支持非DIP封装器件的编程。
RS232窜口通讯。
通讯波特率:57600bit/s9V/500mA电源转换器。
主要功能:EPROM、EEPROM、FLASH、MPU/CPU、PLD。
Serial EEPROM六大类器件的编程;RAM器件及CMOS/TTL器件的测试等等。
可选择的器件插入自动探测启动功能,即当您选择该功能并启动后,不再需要每次点击鼠标启动操作,每次当您更换芯片并锁紧万用插座后操作自动启动。
Genius NSP 可以在 WINDOS95、 98、me、2000、XP上运行。
单片机学习心得15篇

单片机学习心得15篇单片机学习心得(一):1、学习单片机没有捷径,别指望两三天就学会,要坚持不懈,重在积累。
2、别崇拜高手,别相信天才,大部分人都不是天才(相信你也不是)!3、单片机是一门应用性和实践性很强的学科,要多动手,多做实验。
4、要学会参考别人的程序,减少自我琢磨的时间,迅速提高自我的编程潜力。
5、碰到问题能够借助网络来搜寻答案和对自我有帮忙的问题,能够大大减少你的开发时间。
6、要多交一些朋友,多交流。
技术是靠不断的积累和交流才会提高的,封闭自守只会更加落后。
单片机学习心得(二):首先,学习单片机要有必须的基础:电子技术方面要有数字电路和模拟电路等方面的理论基础,个性是数字电路;编程语言要求汇编语言或C语言。
要想成为单片机高手,推荐初学者首先学习汇编语言,学的差不多的时候,转入C语言学习。
尽管汇编语言属于低级语言,编程效率低,可是较C语言具有目标代码简短,占用内存少,执行速度快等优点,更重要的是能使初学者尽快熟悉单片机的内部结构,并能对其进行精确的控制。
汇编语言在单片机教材里面都会涉及,不需要单独购买教材和学习。
C语言是一门学问,有很多专业书籍来讲解,并且对我们今后的编程生涯有绝对的好处,所以要深入学习,千万不要自以为看了某某的视频教程就以为掌握了C语言,那只是C语言的一部分。
在那里给大家推荐一本单片机C语言程序设计参考书,马忠梅等著,北京航空航天大学出版社出版的《单片机的C语言应用程序设计》,要求C语言基础。
如果没学过C语言,推荐学习清华大学谭浩强编写的C语言程序设计,这本书写的不错,通俗易懂。
其次,是单片机教材选取。
单片机是一门十分重视实践的技术,不能总是看书,但要学习它首先应看书,对单片机引脚、内部结构、寄存器和原理有必须地了解和感官认识,它的是怎样工作的,能干些什么?刚开始时,也许你看不明白,但这并不要紧,因为你还缺乏实践经验。
此刻单片机应用广泛,所以各个厂家分别推出了自我的单片机,按内部结构体系派系分:51系列、PIC系列、AVR系列、摩托罗拉等等……我们没必要每样都学!因为他们的编程方法和调试过程以及内部指令结构有必须的相似,只要学精通一款就OK了!尤其是用C语言编程,就几乎不用分什么派系,可是我们要选取一款有代表性的知识范围广,并且入门容易,书籍多。
第2章 如何成为单片机系统工程师

我们把发光二极管D1的负极连接在 单片机的P0.4口(35管脚)上,电 阻R1起到限流的作用。根据器件的 连接关系分析知道:当单片机的 P0.4口输出低电平时(接地),发 光二极管D1正、负极之间获得电压 而被点亮;当P0.4口输出高电平时 (+5V),发光二极管D1则熄灭。 所以要实现图2-17所示的功能,即 让发光二极管以500ms为间隔闪烁 ,变成了让单片机的P0.4口以 500ms为间隔输出高、低电平。
第2章 如何成为单片机系统设计师
2.3.1 发光二极管工作原理
发光二极管(LED,电路符 号 )是一种最常用的指示 器件,近几年因其成本下降 和节能的特点大量使用在照 明设备中。发光二极管有极 性之分,当有足够的正向电 流(正极流向负极的电流, 约10mA~30mA)通过时便 会发光。
第2章 如何成为单片机系统设计师
第2章 如何成为单片机系统设计师
2.1.3 硬件工具之一:面包板
面包板的表面有规则排列的 供插装元器件的插孔,在面 包板中间有一条中心分隔槽 把它分成上、下两个部分。 上半部分每列5个插孔之间是 导通的,下半部分每列5个插 孔之间也是导通的。而上、 下部分插孔之间不导通。
第2章 如何成为单片机系统设计师
电路原理图可生成印刷电路 板图。把印刷电路板图交给 电路板生产厂家就可以把印 刷电路板加工出来。电子产 品的电路板已经具备工作的 基本条件了。
第2章 如何成为单片机系统设计师
2.1.5 焊接工具
第2章 如何成为单片机系统设计师
2.1.6 焊接方法
插元器件入过孔,焊接元器 件管脚与焊盘。
第2章 如何成为单片机系统设计师
第2章 如何成为单片机系统设计师
2.2.1 需求分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
这个我从eehome贴过来的。
写的非常的好。
我们用学单片机不要停在演示的基础上。
只能让单片机完成局部事。
这样我们永远不会走出流水灯地狱!!!学习单片机也已经有几年了,藉此机会和大家聊一下我学习过程中的一些经历和想法吧。
也感谢一线工人提供了这个机会。
希望大家有什么好的想法和建议都直接跟帖说出来。
毕竟只有交流才能够碰撞出火花来^_^。
“卖弄”也好,“吹嘘”也罢,我只是想认真的写写我这一路走来历经的总总,把其中值得注意,以及经验的地方写出来,权当是我对自己的一个总结吧。
而作为看官的你,如果看到了我的错误,还请一定指正,这样对我以及其它读者都有帮助,而至于你如果从中能够收获到些许,那便是我最大的欣慰了。
姑妄言之,姑妄听之。
如果有啥好的想法和建议一定要说出来。
几年前,和众多初学者一样,我接触到了单片机,立刻被其神奇的功能所吸引,从此不能自拔。
很多个日夜就这样陪伴着它度过了。
期间也遇到过非常多的问题,也一度被这些问题所困惑……等到回过头来,看到自己曾经走过的路,唏嘘不已。
经常混迹于论坛里,也看到了很多初学者发的求助帖子,看到他们走在自己曾走过的弯路上,忽然想到了自己的那段日子,心里竟然莫名的冲动,凡此总总,我总是尽自己所能去回帖。
很多时候,都想写一点什么东西出来,希望对广大的初学者有一点点帮助。
但总是不知从何处写起。
今天借一线工人的台,唱一唱我的戏一路学习过来的过程中,帮助最大之一无疑来自于网络了。
很多时候,通过网络,我们都可以获取到所需要的学习资料。
但是,随着我们学习的深入,我们会慢慢发现,网络提供的东西是有限度的,好像大部分的资料都差不多,或者说是适合大部分的初学者所需,而当我们想更进一步提高时,却发现能够获取到的资料越来越少,相信各位也会有同感,铺天盖地的单片机资料中大部分不是流水灯就是LED,液晶,而且也只是仅仅作功能性的演示。
于是有些人选择了放弃,或者是转移到其他兴趣上面去了,而只有少部分人选择了继续摸索下去,结合市面上的书籍,然后在网络上锲而不舍的搜集资料,再从牛人的只言片语中去体会,不断动手实践,慢慢的,也摸索出来了自己的一条路子。
当然这个过程必然是艰辛的,而他学会了之后也不会在网络上轻易分享自己的学习成果。
如此恶性循环下去,也就不难理解为什么初级的学习资料满天飞,而深入一点的学习资料却很少的原因了。
相较于其他领域,单片机技术的封锁更加容易。
尽管已经问世了很多年了,有价值的资料还是相当的欠缺,大部分的资料都是止于入门阶段或者是简单的演示实验。
但是在实际工程应用中却是另外一回事。
有能力的高手无暇或者是不愿公开自己的学习经验。
很多时候,我也很困惑,看到国外爱好者毫不保留的在网络上发布自己的作品,我忽然感觉到一丝丝的悲哀。
也许,我们真的该转变一下思路了,帮助别人,其实也是在帮助自己。
啰啰嗦嗦的说了这么多,相信大家能够明白说的是什么意思。
在接下来的一段日子里,我将会结合电子工程师之家举办的主题周活动写一点自己的想法。
尽可能从实用的角度去讲述。
希望能够帮助更多的初学者更上一层楼。
而关于这个主题周的最大主题我想了这样的一个名字“从单片机初学者迈向单片机工程师”。
名字挺大挺响亮,给我的压力也挺大的,但我会努力,争取使这样的一系列文章能够带给大家一点帮助,而不是看后大跌眼镜。
这样的一系列文章主要的对象是初学者,以及想从初学者更进一步提高的读者。
而至于老手,以及那些牛XX的人,希望能够给我们这些初学者更多的一些指点哈~@_@我们首先来看第一章节从这一章开始,我们开始迈入单片机的世界。
在我们开始这一章具体的学习之前,有必要给大家先说明一下。
在以后的系列文章中,我们将以51内核的单片机为载体,C语言为编程语言,开发环境为KEIL u v3。
至于为什么选用C语言开发,好处不言而喻,开发速度快,效率高,代码可复用率高,结构清晰,尤其是在大型的程序中,而且随着编译器的不断升级,其编译后的代码大小与汇编语言的差距越来越小。
而关于C语言和汇编之争,就像那个啥,每隔一段时间总会有人挑起这个话题,如果你感兴趣,可以到网上搜索相关的帖子自行阅读。
不是说汇编不重要,在很多对时序要求非常高的场合,需要利用汇编语言和C语言混合编程才能够满足系统的需求。
在我们学习掌握C语言的同时,也还需要利用闲余的时间去学习了解汇编语言。
1.从点亮LED(发光二极管)开始在市面上众多的单片机学习资料中,最基础的实验无疑于点亮LED了,即控制单片机的I/O的电平的变化。
如同如下实例代码一般void main(void){LedInit() ;While(1){LED = ON ;DelayMs(500) ;LED = OFF ;DelayMs(500) ;}}程序很简单,从它的结构可以看出,LED先点亮500MS,然后熄灭500MS,如此循环下去,形成的效果就是LED以1HZ的频率进行闪烁。
下面让我们分析上面的程序有没有什么问题。
看来看出,好像很正常的啊,能有什么问题呢?这个时候我们应该换一个思路去想了。
试想,整个程序除了控制LED = ON ; LED = OFF;这两条语句外,其余的时间,全消耗在了DelayMs(500)这两个函数上。
而在实际应用系统中是没有哪个系统只闪烁一只LED就其它什么事情都不做了的。
因此,在这里我们要想办法,把CPU解放出来,让它不要白白浪费500MS的延时等待时间。
宁可让它一遍又一遍的扫描看有哪些任务需要执行,也不要让它停留在某个地方空转消耗CPU时间。
从上面我们可以总结出(1) 无论什么时候我们都要以实际应用的角度去考虑程序的编写。
(2) 无论什么时候都不要让CPU白白浪费等待,尤其是延时(超过1MS)这样的地方。
下面让我们从另外一个角度来考虑如何点亮一颗LED。
先看看我们的硬件结构是什么样子的。
我手上的单片机板子是电子工程师之家的开发的学习板。
就以它的实际硬件连接图来分析吧。
如下(原文件名:led.jpg)引用图片一般的LED的正常发光电流为10~20MA而低电流LED的工作电流在2mA以下(亮度与普通发光管相同)。
在上图中我们可知,当Q1~Q8引脚上面的电平为低电平时,LED发光。
通过LED的电流约为(VC C - Vd)/ RA2 。
其中Vd为LED导通后的压降,约为1.7V左右。
这个导通压降根据LED颜色的不同,以及工作电流的大小的不同,会有一定的差别。
下面一些参数是网上有人测出来的,供大家参考。
红色的压降为1.82-1.88V,电流5-8mA,绿色的压降为1.75-1.82V,电流3-5mA,橙色的压降为1.7-1.8V,电流3-5mA兰色的压降为3.1-3.3V,电流8-10mA,白色的压降为3-3.2V,电流10-15mA,(供电电压5V,LED直径为5mm)74HC573真值表如下:(原文件名:74hc573.jpg)引用图片通过这个真值表我们可以看出。
当OutputEnable引脚接低电平的时候,并且LatchEnable引脚为高电平的时候,Q端电平与D端电平相同。
结合我们的LED硬件连接图可以知道LED_CS端为高电平时候,P0口电平的变化即Q端的电平的变化,进而引起LED的亮灭变化。
由于单片机的驱动能力有限,在此,74HC573的主要作用就是起一个输出驱动的作用。
需要注意的是,通过74HC573的最大电流是有限制的,否则可能会烧坏74HC573这个芯片。
上面这个图是从74HC573的DATASHEET中截取出来的,从上可以看出,每个引脚允许通过的最大电流为35mA 整个芯片允许通过的最大电流为75mA。
在我们设计相应的驱动电路时候,这些参数是相当重要的,而且是最容易被初学者所忽略的地方。
同时在设计的时候,要留出一定量的余量出来,不能说单个引脚允许通过的电流为35mA,你就设计为35mA,这个时候你应该把设计的上限值定在20mA左右才能保证能够稳定的工作。
(设计相应驱动电路时候,应该仔细阅读芯片的数据手册,了解每个引脚的驱动能力,以及整个芯片的驱动能力)了解了相应的硬件后,我们再来编写驱动程序。
首先定义LED的接口#define LED P0然后为亮灭常数定义一个宏,由硬件连接图可以,当P0输出为低电平时候LED亮,P0输出为高电平时,LED熄灭。
#define LED_ON() LED = 0x00 //所有LED亮#define LED_OFF() LED = 0xff //所有LED熄灭下面到了重点了,究竟该如何释放CPU,避免其做延时空等待这样的事情呢。
很简单,我们为系统产生一个1MS的时标。
假定LED需要亮500MS,熄灭500MS,那么我们可以对这个1MS的时标进行计数,当这个计数值达到500时候,清零该计数值,同时把LED的状态改变。
unsigned int g_u16LedTimeCount = 0 ; //LED计数器unsigned char g_u8LedState = 0 ; //LED状态标志, 0表示亮,1表示熄灭void LedProcess(void){if(0 == g_u8LedState) //如果LED的状态为亮,则点亮LED{LED_ON() ;}else //否则熄灭LED{LED_OFF() ;}}void LedStateChange(void){if(g_bSystemTime1Ms) //系统1MS时标到{g_bSystemTime1Ms = 0 ;g_u16LedTimeCount++ ; //LED计数器加一if(g_u16LedTimeCount >= 500) //计数达到500,即500MS到了,改变LED的状态。
{g_u16LedTimeCount = 0 ;g_u8LedState = ! g_u8LedState ;}}}上面有一个变量没有提到,就是g_bSystemTime1Ms 。
这个变量可以定义为位变量或者是其它变量,在我们的定时器中断函数中对其置位,其它函数使用该变量后,应该对其复位(清0) 。
我们的主函数就可以写成如下形式(示意代码)void main(void){while(1){LedProcess() ;LedStateChange() ;}}因为LED的亮或者灭依赖于LED状态变量(g_u8LedState)的改变,而状态变量的改变,又依赖于LED计数器的计数值(g_u16LedTimeCount ,只有计数值达到一定后,状态变量才改变)所以,两个函数都没有堵塞CPU的地方。
让我们来从头到尾分析一遍整个程序的流程。
程序首先执行LedProcess() ;函数因为g_u8LedState 的初始值为0 (见定义,对于全局变量,在定义的时候最好给其一个确定的值)所以在函数LedStateChange()内部首先判断1MS的系统时标是否到了,如果没有到就直接退出函数,如果到了,就把时标清0以便下一个时标消息的到来,同时对LED计数器加一,然后再判断LED计数器是否到达我们预先想要的值500,如果没有,则退出函数,如果有,对计数器清0,以便下次重新计数,同时把LED状态变量取反,然后退出函数。