宁喆
发表于 2014-12-21 21:06
非常感谢,期待更精彩的内容。。
zhangcumt
发表于 2014-12-23 17:10
吴工,更新没有以前快了,一直在看,花了一个月,已经看到最新的一节了~~~
JAYLAM
发表于 2014-12-23 17:29
鸿哥V5
solarddd
发表于 2014-12-24 09:25
期待更新
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)源代码讲解如下: 总结陈词:前面两节都讲了数组和数值的相互转换函数,结合前面的基础,下一节讲数字键盘与液晶菜单的综合程序,欲知详情,请听下回分解----数字键盘与液晶菜单的综合程序。
(未完待续,下节更精彩,不要走开哦)
wenbaizhi
发表于 2014-12-24 16:14
非常感谢分享,受益匪浅,赞一个!
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)源代码讲解如下: 总结陈词: 液晶屏显示的内容到这一节为止基本讲完。前面第38节到第45节是讲串口的,我的串口程序大部分都是通过靠时间来识别每一串数据是否接收完毕,只要第41节内容不是靠时间来判断,而是根据特定关键字来快速识别数据串是否接收完毕,下一节我打算结合我最新的一个项目经验,继续讲一个这方面的例子。欲知详情,请听下回分解----当主机连续不断地发送一串串数据给从机时,从机串口如何快速截取有效数据串。
(未完待续,下节更精彩,不要走开哦)
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)源代码讲解如下: 总结陈词: 再次感谢郑文显的无私奉献。前面第38节到第45节是讲串口的,我的串口程序大部分都是通过靠时间来识别每一串数据是否接收完毕,只要第41节内容不是靠时间来判断,而是根据特定关键字来快速识别数据串是否接收完毕,下一节我打算结合我最新的一个项目经验,继续讲一个这方面的例子。欲知详情,请听下回分解----当主机连续不断地发送一串串数据给从机时,从机串口如何快速截取有效数据串。
(未完待续,下节更精彩,不要走开哦)
ZHANGJIANG_1
发表于 2014-12-27 16:39
谢谢啊。。很经典
tracykk
发表于 2014-12-28 15:49
非常感谢,希望像楼主一样的老一辈工程师多多分享经验
panamatw
发表于 2014-12-29 10:18
受益良多,謝謝
LguoFu
发表于 2014-12-29 13:44
此帖都不加精?
逍姚自在
发表于 2014-12-29 17:36
wawaawa
ys19702
发表于 2014-12-30 12:19
支持楼主,一直找不到好的教程,受教啦
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)源代码讲解如下: 总结陈词: 前面我在第48节里讲过用ds1302做的时钟程序,但是后来很多网友建议,为了方便初学者学习编程思路,我应该用单片机定时器做一个时钟程序。因此,我决定下一节讲这方面的内容。欲知详情,请听下回分解----用单片机内部定时器做一个时钟。
(未完待续,下节更精彩,不要走开哦)
yang_r
发表于 2014-12-30 14:12
学习了,谢谢楼主的无私奉献
solarddd
发表于 2014-12-31 09:02
楼主元旦快乐!
TTK0314
发表于 2014-12-31 10:55
这都是硬功啊
llhvip2011
发表于 2014-12-31 15:00
mark……
armxu
发表于 2014-12-31 15:15
最好写一个GPS校时的DS1302时钟。