打印
[51单片机]

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

[复制链接]
楼主: jianhong_wu
手机看帖
扫描二维码
随时随地手机跟帖
641
非常感谢,期待更精彩的内容。。

使用特权

评论回复
642
zhangcumt| | 2014-12-23 17:10 | 只看该作者
吴工,更新没有以前快了,一直在看,花了一个月,已经看到最新的一节了~~~

使用特权

评论回复
643
JAYLAM| | 2014-12-23 17:29 | 只看该作者
鸿哥V5

使用特权

评论回复
644
solarddd| | 2014-12-24 09:25 | 只看该作者
期待更新

使用特权

评论回复
645
jianhong_wu|  楼主 | 2014-12-24 10:49 | 只看该作者
第八十五节:实时同步把加减按键输入的数值转换成BCD码数组的液晶屏显示程序。

开场白:
    把运算处理完的数值转换成BCD码数组才可以更好方便显示和数字按键的输入编辑。这一节主要跟大家讲这方面的算法程序。本节的核心转换函数是void data_to_buffer(…)

具体内容,请看源代码讲解。

(1)     硬件平台:
基于朱兆祺51单片机学习板。数字1键对应S1键,数字2键对应S2键,数字3键对应S3键…. 数字9键对应S9键, 数字0键对应S10键。小数键对应S11,S13按键是加按键,S14按键是减按键,清零键对应S16,其它按键不用。

(2)     实现功能:
通过S13,S14这两个加减按键更改第2行显示的数值,此数值会同步更新显示在第1行的BCD码数组上。

(3)源代码讲解如下:
第八十五节源代码讲解.rar (8.82 KB)
总结陈词:
前面两节都讲了数组和数值的相互转换函数,结合前面的基础,下一节讲数字键盘与液晶菜单的综合程序,欲知详情,请听下回分解----数字键盘与液晶菜单的综合程序。

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

使用特权

评论回复
646
wenbaizhi| | 2014-12-24 16:14 | 只看该作者
非常感谢分享,受益匪浅,赞一个!

使用特权

评论回复
647
jianhong_wu|  楼主 | 2014-12-26 11:09 | 只看该作者
第八十六节:数字键盘与液晶菜单的综合程序。

开场白:
    前面已经介绍完数值跟BCD码数组相互转换的算法,但是按键只能设置一项数据。如果多增加一项数据,变成两项数据,按键与显示菜单之间该如何关联起来,这样的程序框架是什么样的?其实很简单很有规律的,只需要在前面的基础上,在按键和显示函数里,根据不同的uPart行变量添加进不同的代码,即可完成。这就是鸿哥写的程序代码,不管添加多少代码,都是有一个“道”可循,非常有规律性。
  
具体内容,请看源代码讲解。

(1)     硬件平台:
基于朱兆祺51单片机学习板。数字1键对应S1键,数字2键对应S2键,数字3键对应S3键…. 数字9键对应S9键, 数字0键对应S10键。小数键对应S11,S12按键是光标移动按键,S13按键是加按键,S14按键是减按键,清零键对应S16,其它按键不用。

(2)     实现功能:
通过S12光标移动按键,可以把负显光标切换到不同的行里面,根据光标所在位置,
通过S13,S14这两个加减按键可以更改对应的数。第1行和第2行的数据会彼此有关联,只要改其中一个,另外一个就会同步被更新。同理,第3行和第4行的数据也会彼此有关联,只要改其中一个,另外一个也会同步被更新。

(3)源代码讲解如下:
第八十六节源代码讲解.rar (9.27 KB)
总结陈词:
    液晶屏显示的内容到这一节为止基本讲完。前面第38节到第45节是讲串口的,我的串口程序大部分都是通过靠时间来识别每一串数据是否接收完毕,只要第41节内容不是靠时间来判断,而是根据特定关键字来快速识别数据串是否接收完毕,下一节我打算结合我最新的一个项目经验,继续讲一个这方面的例子。欲知详情,请听下回分解----当主机连续不断地发送一串串数据给从机时,从机串口如何快速截取有效数据串。

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

使用特权

评论回复
648
jianhong_wu|  楼主 | 2014-12-26 18:32 | 只看该作者
第八十七节:郑文显捐赠的工控项目源代码。

开场白:
根据上一节的预告,本来这节要讲关于串口的一个小项目,但是今天中午的时候,有个厦门客户的出现,让我决定先插入这节内容。
他叫郑文显,是做PLC开发的。今天中午他要我帮他写一个工控程序让他来学习,也是基于朱兆祺51单片机学习板的,他想把这个源代码经过自己修改后移植到他自己做的工控板上。我一开始报价4000元,被他砍价到1000元,我看一下也不算很难就答应了下来。刚才下午花了3个小时终于做好了。郑文显爽快的付了款,并且在电话那里跟我讲,他说独乐乐不如众乐乐,资源只有分享才能发挥它的最大价值,因此他决定要把这个源代码捐赠出来给大家一起学。非常感谢他的慈善壮举。种善因,得善果。好人一生平安。他的这个项目不难,跟我第25节内容很类似,略加修改就可以了。具体功能需求请看以下第(2)点。

(1)     硬件平台:
基于朱兆祺51单片机学习板。
(2)     实现功能:
他的系统要控制2个气缸,没有任何传感器。第1个气缸先伸出去,1秒钟后再收回来。然后第2个气缸再伸出去,1秒钟后再收回来,算完成一个过程,然后重头开始循环下去。每一个过程要计数加1显示在右边的4位数码管上,左边的4位数码管显示设定的最大计数上限,一旦超过这个计数上限就自动停止。有4个按键,一个按键用来启动,一个按键用来急停。另外两个按键是加减按键,用来设置左边显示的最大计数上限。断电要求数据不丢失。如果同时按下加减两个按键,可以清零当前计数的内容。
这4个按键都是独立按键。S1键是加键,S5键是减键,S9键是启动键,S13键是急停键。其中74HC595驱动丝印为D1的LED灯模拟第1个气缸,丝印为D2的LED灯模拟第2个气缸。

(3)源代码讲解如下:
第八十七节源代码讲解.rar (6.53 KB)
总结陈词:
    再次感谢郑文显的无私奉献。前面第38节到第45节是讲串口的,我的串口程序大部分都是通过靠时间来识别每一串数据是否接收完毕,只要第41节内容不是靠时间来判断,而是根据特定关键字来快速识别数据串是否接收完毕,下一节我打算结合我最新的一个项目经验,继续讲一个这方面的例子。欲知详情,请听下回分解----当主机连续不断地发送一串串数据给从机时,从机串口如何快速截取有效数据串。

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

使用特权

评论回复
649
ZHANGJIANG_1| | 2014-12-27 16:39 | 只看该作者
谢谢啊。。很经典

使用特权

评论回复
650
tracykk| | 2014-12-28 15:49 | 只看该作者
非常感谢,希望像楼主一样的老一辈工程师多多分享经验

使用特权

评论回复
651
panamatw| | 2014-12-29 10:18 | 只看该作者
受益良多,謝謝

使用特权

评论回复
652
LguoFu| | 2014-12-29 13:44 | 只看该作者
此帖都不加精?

使用特权

评论回复
653
逍姚自在| | 2014-12-29 17:36 | 只看该作者
wawaawa

使用特权

评论回复
654
ys19702| | 2014-12-30 12:19 | 只看该作者
支持楼主,一直找不到好的教程,受教啦

使用特权

评论回复
655
jianhong_wu|  楼主 | 2014-12-30 12:50 | 只看该作者
第八十八节:电子称连续不断从串口对外发送数据,单片机靠关键字快速截取有效数据串。

开场白:
我前面串口程序大部分都是通过靠时间来识别每一串数据是否接收完毕,有一些串口项目的协议是固定不变的,而且也不需要从机反馈任何应答信号,这类项目只需根据特定关键字来快速识别数据串是否接收完毕即可。比如现在有一种电子称,它的测量范围是0.00克到500.00克,他是靠串口不断对外发送当前重量数据的,每串数据固定长度26个字节,最后两个字节是回车换行符0x0d 0x0a,倒数第9,10,11,12,13,14为有效的ASCII码数字,其中倒数第11位为固定的小数点,其它的数据可以忽略不计。这类串口框架的思路是:根据数据尾是否有0x0d 0x0a来判断数据串是否有效的,一旦发现有此关键字,再判断总的数据长度是否等于或者大于一串数据的固定长度,如果满足,则把相关标志位置位,通知主函数中的串口服务程序进行处理。同时也及时关闭串口中断,避免在处理串口数据期间受到串口数据的中断干扰,等串口服务程序处理完毕再打开。
具体内容,请看源代码讲解。

(1)     硬件平台:
基于朱兆祺51单片机学习板。
(2)     实现功能:
波特率是:9600。把当前电子称的重量数据显示在数码管上,在电脑上用串口助手软件来模拟电子称发送以下格式协议的3串数据,它的协议很简单,每串数据固定长度26个字节,最后两个字节是回车换行符0x0d 0x0a,倒数第9,10,11,12,13,14为有效的ASCII码数字,其中倒数第11位为固定的小数点,其它的数据可以忽略不计。
(a)字符是:
ST,GS,+      0.77    g
转换成16进制是:
20 53 54 2C 47 53 2C 2B 20 20 20 20 20 20 30 2E 37 37 20 2020 20 20 67 0D 0A
数码管显示:0.77
(b)
字符是:
ST,GS,+    136.39    g
转换成16进制是:
20 53 54 2C 47 53 2C 2B 20 20 20 20 31 33 36 2E 33 39 20 2020 20 20 67 0D 0A
数码管显示:136.39
(c)
字符是:
ST,GS,+      0.00    g
转换成16进制是:
20 53 54 2C 47 53 2C 2B 20 20 20 20 20 20 30 2E 30 30 20 2020 20 20 67 0D 0A
数码管显示:0.00

(3)源代码讲解如下:
第八十八节源代码讲解.rar (3.93 KB)
总结陈词:
    前面我在第48节里讲过用ds1302做的时钟程序,但是后来很多网友建议,为了方便初学者学习编程思路,我应该用单片机定时器做一个时钟程序。因此,我决定下一节讲这方面的内容。欲知详情,请听下回分解----用单片机内部定时器做一个时钟。

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

使用特权

评论回复
656
yang_r| | 2014-12-30 14:12 | 只看该作者
学习了,谢谢楼主的无私奉献

使用特权

评论回复
657
solarddd| | 2014-12-31 09:02 | 只看该作者
楼主元旦快乐!

使用特权

评论回复
658
TTK0314| | 2014-12-31 10:55 | 只看该作者
这都是硬功啊

使用特权

评论回复
659
llhvip2011| | 2014-12-31 15:00 | 只看该作者


  mark……

使用特权

评论回复
660
armxu| | 2014-12-31 15:15 | 只看该作者
最好写一个GPS校时的DS1302时钟。

使用特权

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

本版积分规则