打印
[51单片机]

从业将近十年!手把手教你单片机程序框架(连载)

[复制链接]
楼主: jianhong_wu
手机看帖
扫描二维码
随时随地手机跟帖
141
谢谢楼主的经验分享,让我们学到了不少东西

使用特权

评论回复
142
无名芯片| | 2014-3-25 12:06 | 只看该作者
写得太好了   忍不住要赞美你一下!   :)

使用特权

评论回复
143
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)源代码讲解如下:

第三十六节源代码讲解.rar (4.78 KB)
总结陈词:
这节讲了加法简易计算器的程序项目。为了让读者理解运动,按键,显示是如何有规律关联起来的,下节会继续讲一个相关的小项目程序。欲知详情,请听下回分解-----数码管作为仪表盘显示跑马灯的方向,速度和运行状态。

(未完待续,下节更精彩,不要走开哦)

使用特权

评论回复
144
xppx1987| | 2014-3-27 15:40 | 只看该作者
一直在关注鸿哥的教程帖子,收获很大,非常感谢这种分享精神!最近程序遇到难题,看了鸿哥的程序,套用了一下程序框架,特别是人机界面操作,使用switch结构,再复杂再多的功能也不用怕,整个程序果然清晰明了许多!希望鸿哥**下去,我也会一直关注的!再次说声感谢啊!

使用特权

评论回复
145
jianhong_wu|  楼主 | 2014-3-27 15:46 | 只看该作者
xppx1987 发表于 2014-3-27 15:40
一直在关注鸿哥的教程帖子,收获很大,非常感谢这种分享精神!最近程序遇到难题,看了鸿哥的程序,套用了一 ...

感谢你给予这么高的评价。我很乐意这样持续分享下去,直到把我这将近十年的库存经验全部清仓为止。

使用特权

评论回复
146
578896817fyt| | 2014-3-27 21:30 | 只看该作者
鸿哥,能否也把原理图也附上,可以更直观一点啊,谢谢了

使用特权

评论回复
147
ONE16| | 2014-3-27 21:40 | 只看该作者
本帖最后由 ONE16 于 2014-3-27 21:41 编辑

这贴不错,很少人肯做这样的事了,好样的

使用特权

评论回复
148
傲天一式| | 2014-3-27 22:12 | 只看该作者

使用特权

评论回复
149
578896817fyt| | 2014-3-27 22:23 | 只看该作者
鸿哥,我是菜鸟,请教一下你,你中断里面怎么弄那么多程序啊?中断运行时间多了,主函数有可能会运行没几句,就又中断了,一般中断写多少程序为宜啊?谢谢了

使用特权

评论回复
150
jianhong_wu|  楼主 | 2014-3-27 22:55 | 只看该作者
本帖最后由 jianhong_wu 于 2014-3-27 23:02 编辑
578896817fyt 发表于 2014-3-27 22:23
鸿哥,我是菜鸟,请教一下你,你中断里面怎么弄那么多程序啊?中断运行时间多了,主函数有可能会运行没几句 ...

这是一种错觉。表面上我在中断里放了很多代码程序,实际上我中断里面的程序执行的时间很短的。我大部分的项目都是这样整的,用这样的程序框架,我最大试过写PIC单片机的程序超过150K容量,运行也很良好。当然,少数要求很高的项目,我干脆连一个定时中断都不用,并且这样的项目,绝对不能用动态扫描数码管的方案,应该加专用芯片直接用静态驱动方案。我现在发表的程序都是在硬件平台上运行测试过的,运行很正常。至于中断里写多少程序才合适,只要不是在中断里放很多死延时delay,只要能编译通过,一般情况下都没有特别明确的规定,凭的是经验和感觉,差不多就行了。

使用特权

评论回复
151
jianhong_wu|  楼主 | 2014-3-27 23:59 | 只看该作者
578896817fyt 发表于 2014-3-27 21:30
鸿哥,能否也把原理图也附上,可以更直观一点啊,谢谢了

为了尽量避免广告的嫌疑,原理图我就不附上了。你可以自己在网上找找。

使用特权

评论回复
152
powerxia| | 2014-3-28 08:49 | 只看该作者
好东东,顶起来

使用特权

评论回复
153
zy19860818| | 2014-3-28 09:00 | 只看该作者
每天下班看一节,好好学习下前辈的经验

使用特权

评论回复
154
chenqintao| | 2014-3-28 11:36 | 只看该作者
楼主,佩服佩服,

使用特权

评论回复
155
woairgzn| | 2014-3-28 22:07 | 只看该作者
我就喜欢这样的实干家,现实生活也没有那么多理论,也不需要精确的理论分析,知道大概,多实践把问题解决了就行。收藏先,以后备学。顶。写得最好也出书。

使用特权

评论回复
156
十月风城| | 2014-3-29 08:33 | 只看该作者
jianhong_wu 发表于 2014-3-5 21:53
第一节:吴坚鸿谈初学单片机的误区。

(1)很难记住繁杂的寄存器?寄存器不用死记硬背,鸿哥我行走江湖多 ...

我想你是在误导一批人
1.指针都不会的人,怎么与其它人进行配合写code
2.连运行时间都不关心的人怎么可能设计出好的程序,因为没有设计值
3.can通讯是一个趋势
对自己的要求有多高,你以后就有多高!

使用特权

评论回复
评分
参与人数 1威望 +5 收起 理由
cjseng + 5 很给力!
157
十月风城| | 2014-3-29 08:38 | 只看该作者
jianhong_wu 发表于 2014-3-5 21:55
第二节:delay()延时实现LED灯的闪烁。

开场白:

delay函数不建议这样写

使用特权

评论回复
158
huarens| | 2014-3-29 11:47 | 只看该作者
十月风城 发表于 2014-3-29 08:33
我想你是在误导一批人
1.指针都不会的人,怎么与其它人进行配合写code
2.连运行时间都不关心的人怎么可能 ...

1.指针都不会的人,怎么与其它人进行配合写code

请大师讲一下指针在配合写code方面的应用,让那些一个人埋头苦干的人学习学习!

使用特权

评论回复
159
十月风城| | 2014-3-29 21:53 | 只看该作者
C 语言深度解剖 中会有指针重要型的说明。

使用特权

评论回复
160
jianhong_wu|  楼主 | 2014-3-30 09:11 | 只看该作者
十月风城 发表于 2014-3-29 08:33
我想你是在误导一批人
1.指针都不会的人,怎么与其它人进行配合写code
2.连运行时间都不关心的人怎么可能 ...

我觉得你误会了我想表达的意思。我想很多人不会这样解答我第一节的内容。
(1)汇编语言就没有指针的概念,但是汇编语言每一步都是指针,凡是跟地址有关操作的都是指针。因此,初学者刚开始的时候如果不会指针,并不会影响他开发项目,因为其它那几个常用的C语言指令足以实现指针的所有功能,只是书写和阅读上没有指针那么简洁,但是功能是一样的。我并不是想否定指针的价值。我只是想让初学者在学单片机的时候,不用一下子学那么多C语言的高级功能,我想让初学者能快速进入到项目实验的状态,只有在动手做实验项目的时候,学习C语言才是最快的,等他们用几个常用的C语言指令就把项目做好了,他们再学C语言其他的高级功能就轻而易举。
(2)我这里的运行时间并不是说程序运行的效率,而是指时间的精度。扪心自问,大部分的单片机项目,时间精度真的不是很重要,实时时钟有专用的时钟芯片,驱动输出频率的可以用修改比例系数来矫正精度,如果遇到精度要求更高的项目,就直接用CPLD或FPGA了。大部分单片机的项目,就是做人机界面,并且把各种输入输出的感应器关联起来,这就是单片机项目的本质,没有那么复杂。
(3)说实话,这些年来,我做的所有单片机项目都是我一个人完成的,包括电路设计,以及一些简单的PC上位机通讯软件。也许这个也是我的局限,欢迎你跟大家讲讲指针在配合其他人写code方面的应用,让我也学学这方面的知识,谢谢。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则