zy19860818
发表于 2014-3-24 07:24
谢谢楼主的经验分享,让我们学到了不少东西
无名芯片
发表于 2014-3-25 12:06
写得太好了 忍不住要赞美你一下! :)
jianhong_wu
发表于 2014-3-27 12:44
第三十六节:带数码管显示的加法简易计算器。
开场白: 这一节要做一个简单的计算器。这个计算器不带小数点,只能进行不超过8位数据的加法运算,它麻雀虽小但是五脏俱全,它能清晰地勾勒出商业计算器的程序框架和思路。读者只要看懂本节程序框架的规律,以后自己想做一个复杂一点的计算器应该是没问题的。复杂的计算器在算法上要用数组进行特殊处理,不能简单地直接用C语言的+,-,*,/运算符,这方面的内容我会在以后的章节中跟大家分享。这一节要教会大家两个知识点:第一个:数字按键的输入和十进制数值的移位方法。第二个:继续加深理解按键与数码管的关联程序框架。
具体内容,请看源代码讲解。
(1)硬件平台:基于朱兆祺51单片机学习板。数字1键对应S1键,数字2键对应S2键,数字3键对应S3键…. 数字9键对应S9键, 数字0键对应S10键。加号键对应S13,等于号键对应S14,清除复位按键对应S16。其它按键不用。
(2)实现功能:常用的加法计算器功能。有连加功能。
本程序有2个窗口。第1个窗口:原始数据和运算结果窗口。比如加法运算中的被加数第2个窗口:第二个参与运行的数据窗口。比如加法运算中的加数
(3)源代码讲解如下:
总结陈词:这节讲了加法简易计算器的程序项目。为了让读者理解运动,按键,显示是如何有规律关联起来的,下节会继续讲一个相关的小项目程序。欲知详情,请听下回分解-----数码管作为仪表盘显示跑马灯的方向,速度和运行状态。
(未完待续,下节更精彩,不要走开哦)
xppx1987
发表于 2014-3-27 15:40
一直在关注鸿哥的教程帖子,收获很大,非常感谢这种分享精神!最近程序遇到难题,看了鸿哥的程序,套用了一下程序框架,特别是人机界面操作,使用switch结构,再复杂再多的功能也不用怕,整个程序果然清晰明了许多!希望鸿哥**下去,我也会一直关注的!再次说声感谢啊!
jianhong_wu
发表于 2014-3-27 15:46
xppx1987 发表于 2014-3-27 15:40 static/image/common/back.gif
一直在关注鸿哥的教程帖子,收获很大,非常感谢这种分享精神!最近程序遇到难题,看了鸿哥的程序,套用了一 ...
感谢你给予这么高的评价。我很乐意这样持续分享下去,直到把我这将近十年的库存经验全部清仓为止。
578896817fyt
发表于 2014-3-27 21:30
鸿哥,能否也把原理图也附上,可以更直观一点啊,谢谢了
ONE16
发表于 2014-3-27 21:40
本帖最后由 ONE16 于 2014-3-27 21:41 编辑
这贴不错,很少人肯做这样的事了,好样的
傲天一式
发表于 2014-3-27 22:12
牛
578896817fyt
发表于 2014-3-27 22:23
鸿哥,我是菜鸟,请教一下你,你中断里面怎么弄那么多程序啊?中断运行时间多了,主函数有可能会运行没几句,就又中断了,一般中断写多少程序为宜啊?谢谢了
jianhong_wu
发表于 2014-3-27 22:55
本帖最后由 jianhong_wu 于 2014-3-27 23:02 编辑
578896817fyt 发表于 2014-3-27 22:23 static/image/common/back.gif
鸿哥,我是菜鸟,请教一下你,你中断里面怎么弄那么多程序啊?中断运行时间多了,主函数有可能会运行没几句 ...
这是一种错觉。表面上我在中断里放了很多代码程序,实际上我中断里面的程序执行的时间很短的。我大部分的项目都是这样整的,用这样的程序框架,我最大试过写PIC单片机的程序超过150K容量,运行也很良好。当然,少数要求很高的项目,我干脆连一个定时中断都不用,并且这样的项目,绝对不能用动态扫描数码管的方案,应该加专用芯片直接用静态驱动方案。我现在发表的程序都是在硬件平台上运行测试过的,运行很正常。至于中断里写多少程序才合适,只要不是在中断里放很多死延时delay,只要能编译通过,一般情况下都没有特别明确的规定,凭的是经验和感觉,差不多就行了。
jianhong_wu
发表于 2014-3-27 23:59
578896817fyt 发表于 2014-3-27 21:30 static/image/common/back.gif
鸿哥,能否也把原理图也附上,可以更直观一点啊,谢谢了
为了尽量避免广告的嫌疑,原理图我就不附上了。你可以自己在网上找找。
powerxia
发表于 2014-3-28 08:49
好东东,顶起来
zy19860818
发表于 2014-3-28 09:00
每天下班看一节,好好学习下前辈的经验
chenqintao
发表于 2014-3-28 11:36
楼主,佩服佩服,
woairgzn
发表于 2014-3-28 22:07
我就喜欢这样的实干家,现实生活也没有那么多理论,也不需要精确的理论分析,知道大概,多实践把问题解决了就行。收藏先,以后备学。顶。写得最好也出书。
十月风城
发表于 2014-3-29 08:33
jianhong_wu 发表于 2014-3-5 21:53 static/image/common/back.gif
第一节:吴坚鸿谈初学单片机的误区。
(1)很难记住繁杂的寄存器?寄存器不用死记硬背,鸿哥我行走江湖多 ...
我想你是在误导一批人
1.指针都不会的人,怎么与其它人进行配合写code
2.连运行时间都不关心的人怎么可能设计出好的程序,因为没有设计值
3.can通讯是一个趋势
对自己的要求有多高,你以后就有多高!
十月风城
发表于 2014-3-29 08:38
jianhong_wu 发表于 2014-3-5 21:55 static/image/common/back.gif
第二节:delay()延时实现LED灯的闪烁。
开场白:
delay函数不建议这样写
huarens
发表于 2014-3-29 11:47
十月风城 发表于 2014-3-29 08:33 static/image/common/back.gif
我想你是在误导一批人
1.指针都不会的人,怎么与其它人进行配合写code
2.连运行时间都不关心的人怎么可能 ...
1.指针都不会的人,怎么与其它人进行配合写code
请大师讲一下指针在配合写code方面的应用,让那些一个人埋头苦干的人学习学习!
十月风城
发表于 2014-3-29 21:53
C 语言深度解剖 中会有指针重要型的说明。
jianhong_wu
发表于 2014-3-30 09:11
十月风城 发表于 2014-3-29 08:33 static/image/common/back.gif
我想你是在误导一批人
1.指针都不会的人,怎么与其它人进行配合写code
2.连运行时间都不关心的人怎么可能 ...
我觉得你误会了我想表达的意思。我想很多人不会这样解答我第一节的内容。
(1)汇编语言就没有指针的概念,但是汇编语言每一步都是指针,凡是跟地址有关操作的都是指针。因此,初学者刚开始的时候如果不会指针,并不会影响他开发项目,因为其它那几个常用的C语言指令足以实现指针的所有功能,只是书写和阅读上没有指针那么简洁,但是功能是一样的。我并不是想否定指针的价值。我只是想让初学者在学单片机的时候,不用一下子学那么多C语言的高级功能,我想让初学者能快速进入到项目实验的状态,只有在动手做实验项目的时候,学习C语言才是最快的,等他们用几个常用的C语言指令就把项目做好了,他们再学C语言其他的高级功能就轻而易举。
(2)我这里的运行时间并不是说程序运行的效率,而是指时间的精度。扪心自问,大部分的单片机项目,时间精度真的不是很重要,实时时钟有专用的时钟芯片,驱动输出频率的可以用修改比例系数来矫正精度,如果遇到精度要求更高的项目,就直接用CPLD或FPGA了。大部分单片机的项目,就是做人机界面,并且把各种输入输出的感应器关联起来,这就是单片机项目的本质,没有那么复杂。
(3)说实话,这些年来,我做的所有单片机项目都是我一个人完成的,包括电路设计,以及一些简单的PC上位机通讯软件。也许这个也是我的局限,欢迎你跟大家讲讲指针在配合其他人写code方面的应用,让我也学学这方面的知识,谢谢。