单片机程序框架
文章平均质量分 81
yuanmeixiang
这个作者很懒,什么都没留下…
展开
-
第一节:吴坚鸿谈初学单片机的误区。
第一节:吴坚鸿谈初学单片机的误区。(1)很难记住繁杂的寄存器?寄存器不用死记硬背,鸿哥我行走江湖多年,连一个寄存器都记不住。需要配置寄存器的时候,直接在网上或者书本上参考别人现成的配置程序是上策,查找芯片数据手册是中策,死记硬背寄存器是最最下策。(2)很难记住繁杂的汇编语言指令?除非是在校学生要应付考试或者少数工作中绕不开汇编,否则学汇编就是浪费时间。鸿哥我行走江湖多年,从来就没有转载 2017-01-03 06:12:03 · 2304 阅读 · 0 评论 -
第二十一节:多任务并行处理两路跑马灯
第二十一节:多任务并行处理两路跑马灯。开场白:上一节讲了依次逐个亮灯并且每次只能亮一个灯的跑马灯程序。这一节要结合前面两节的内容,实现多任务并行处理两路跑马灯。要教会大家一个知识点:利用鸿哥的switch状态机思想,实现多任务并行处理的程序。具体内容,请看源代码讲解。(1)硬件平台:基于朱兆祺51单片机学习板。(2)实现功能:第一路独立运行的任务是:第1个至第8转载 2017-01-06 06:27:31 · 1079 阅读 · 0 评论 -
第二十二节:独立按键控制跑马灯的方向
第二十二节:独立按键控制跑马灯的方向。开场白:上一节讲了多任务并行处理两路跑马灯的程序。这一节要教会大家一个知识点:如何通过一个中间变量把按键跟跑马灯的任务有效的关联起来。具体内容,请看源代码讲解。(1)硬件平台:基于朱兆祺51单片机学习板。用矩阵键盘中的S1键作为改变方向的独立按键,记得把输出线P0.4一直输出低电平,模拟独立按键的触发地GND。(2)实现功能:转载 2017-01-06 06:28:38 · 4140 阅读 · 1 评论 -
第二十三节:独立按键控制跑马灯的速度。
第二十三节:独立按键控制跑马灯的速度。开场白:上一节讲了独立按键控制跑马灯的方向。这一节继续要教会大家一个知识点:如何通过一个中间变量把按键跟跑马灯的速度有效关联起来。具体内容,请看源代码讲解。(1)硬件平台:基于朱兆祺51单片机学习板。在上一节的基础上,增加一个加速按键和一个减速按键,用矩阵键盘中的S5键作为加速独立按键,用矩阵键盘中的S9键作为减速独立按键,记得把输出线转载 2017-01-06 06:32:14 · 3001 阅读 · 0 评论 -
第二十五节:用LED灯和按键来模拟工业自动化设备的运动控制。
第二十五节:用LED灯和按键来模拟工业自动化设备的运动控制。开场白:前面三节讲了独立按键控制跑马灯的各种状态,这一节我们要做一个机械手控制程序,这个机械手可以左右移动,最左边有一个开关感应器,最右边也有一个开关感应器。它也可以上下移动,最下面有一个开关感应器。左右移动是通过一个气缸控制,上下移动也是通过一个气缸控制。而单片机控制气缸,本质上是通过三极管把信号放大,然后控制气缸上的电磁阀转载 2017-01-06 06:34:30 · 1097 阅读 · 0 评论 -
第二十六节:在主函数while循环中驱动数码管的动态扫描程序。
第二十六节:在主函数while循环中驱动数码管的动态扫描程序。开场白:上一节通过一个机械手自动控制程序展示了我在工控常用的编程框架,但是一直没涉及到人机界面,在大多数的实际项目中,人机界面是必不可少的,这一节开始讲最常用的人机界面------动态数码管的驱动。这一节要教会大家两个知识点:第一点:数码管的动态驱动原理。第二点:如何通过编程,让数码管显示的内容转移到几个变量转载 2017-01-06 06:34:56 · 1089 阅读 · 0 评论 -
第二十七节:在定时中断里动态扫描数码管的程序。
第二十七节:在定时中断里动态扫描数码管的程序。开场白:上一节讲了在主函数循环中动态扫描数码管的程序,但是该程序有一个隐患,在一些项目中 ,主函数循环中的任务越多,就意味着在某一瞬间,每显示一位数码管停留的时间就会越久,一旦超过某个值,会严重影响显示的效果。这一节要教会大家两个知识点:第一个:如何把动态扫描数码管的程序放在定时中断里,彻底解决上节的显示隐患。第二个:在定时中断里的转载 2017-01-06 06:36:01 · 5416 阅读 · 0 评论 -
第二十八节:数码管通过切换窗口来设置参数。
第二十八节:数码管通过切换窗口来设置参数。开场白:上一节讲了数码管的驱动程序,这节在上节的基础上,通过按键切换不同的窗口来设置不同的参数。这一节要教会大家三个知识点:第一个:鸿哥首次提出的“一二级菜单显示理论”:凡是人机界面显示,不管是数码管还是液晶屏,都可以把显示的内容分成不同的窗口来显示,每个显示的窗口中又可以分成不同的局部显示。其中窗口就是一级菜单,用ucWd变量表示。局转载 2017-01-06 06:37:43 · 1879 阅读 · 1 评论 -
第二十九节:数码管通过切换窗口来设置参数,并且不显示为0的高位。
第二十九节:数码管通过切换窗口来设置参数,并且不显示为0的高位。开场白:上一节在第4,3,2,1位显示设置的参数时,还有一点小瑕疵。比如设置参数等于56时,实际显示的是“0056”,也就是高位为0的如果不显示,效果才会更好。这一节要教会大家两个知识点:第一个:在上一节display_service()函数里略作修改,把高位为0的去掉不显示。第二个:加深熟悉鸿哥首次提出的“一转载 2017-01-06 06:39:30 · 1909 阅读 · 0 评论 -
第三十节:数码管通过闪烁来设置数据。
第三十节:数码管通过闪烁来设置数据。开场白: 上一节讲了一级菜单,这一节要教会大家两个知识点:第一个:二级菜单的程序的程序框架。第二个:继续加深熟悉鸿哥首次提出的“一二级菜单显示理论”:凡是人机界面显示,不管是数码管还是液晶屏,都可以把显示的内容分成不同的窗口来显示,每个显示的窗口中又可以分成不同的局部显示。其中窗口就是一级菜单,用ucWd变量表示。局部就是二级菜单,用uc转载 2017-01-06 06:41:10 · 5950 阅读 · 0 评论 -
第三十一节:数码管通过一二级菜单来设置数据的综合程序。
第三十一节:数码管通过一二级菜单来设置数据的综合程序。开场白: 上一节讲了二级菜单,这一节要教会大家两个知识点:第一个:数码管通过一二级菜单来设置数据的综合程序框架。第二个:继续加深熟悉鸿哥首次提出的“一二级菜单显示理论”:凡是人机界面显示,不管是数码管还是液晶屏,都可以把显示的内容分成不同的窗口来显示,每个显示的窗口中又可以分成不同的局部显示。其中窗口就是一级菜单,用uc转载 2017-01-06 06:43:13 · 4059 阅读 · 1 评论 -
第三十二节:数码管中的倒计时程序
第三十二节:数码管中的倒计时程序。开场白: 上一节讲了一二级菜单的综合程序,这一节要教会大家三个知识点:第一个:通过本程序,继续加深理解按键与数码管的关联方法。第二个:复习一下我在第五节教给大家的时间校正法。第三个:继续加深熟悉鸿哥首次提出的“一二级菜单显示理论”:凡是人机界面显示,不管是数码管还是液晶屏,都可以把显示的内容分成不同的窗口来显示,每个显示的窗口中又可以分转载 2017-01-06 06:46:57 · 12078 阅读 · 0 评论 -
第三十三节:能设置速度档位的数码管倒计时程序。
第三十三节:能设置速度档位的数码管倒计时程序。开场白: 上一节讲了数码管中的倒计时程序。这节要在此程序上多增加两个按键,用来控制数码管倒计时的速度档位,并且需要在数码管中闪烁显示被设置的速度档位。这一节要教会大家三个知识点:第一个:把一个按键的短按与长按复合应用在项目中的程序结构。第二个:通过本程序,继续加深理解按键与数码管的关联方法。第三个:继续加深熟悉鸿转载 2017-01-06 06:48:20 · 1104 阅读 · 0 评论 -
第三十四节:在数码管中实现iphone4S开机密码锁的程序。
第三十四节:在数码管中实现iphone4S开机密码锁的程序。开场白: 这一节要教会大家四个知识点:第一个:类似手机上10秒钟内无按键操作将自动进入锁屏的程序。第二个:如何用一个数组来接收按键的一串数字输入。第三个:矩阵键盘中,数字按键的输入,由于这部分按键的代码相似度非常高,因此把它封装在一个函数里可以非常简洁方便。第四个:继续加深熟悉鸿哥首次提出的“一二级菜单显转载 2017-01-06 06:51:04 · 997 阅读 · 0 评论 -
第十九节:依次逐个点亮LED之后,再依次逐个熄灭LED的跑马灯程序。
开场白:上一节讲了把74HC595驱动程序翻译成类似单片机IO口直接驱动的方式。这节在上一节的驱动程序基础上,开始讲跑马灯程序。我的跑马灯程序看似简单而且重复,其实蕴含着鸿哥的大智慧。它是基于鸿哥的switch状态机思想,领略到了它的简单和精髓,以后任何所谓复杂的工程项目,都不再复杂。要教会大家一个知识点:通过本跑马灯程序,加深理解鸿哥所有实战项目中switch状态机的思想精髓。具体内容,转载 2017-01-03 06:39:37 · 9625 阅读 · 0 评论 -
第十八节:把74HC595驱动程序翻译成类似单片机IO口直接驱动的方式
第十八节:把74HC595驱动程序翻译成类似单片机IO口直接驱动的方式。开场白:上一节讲了74HC595的驱动程序。为了更加方便操作74HC595输出的每个IO状态,这节讲如何把74HC595驱动程序翻译成类似单片机IO口直接驱动的方式。要教会大家两个知识点:第一点:如何灵活运用与和非的运算符来实现位的操作。第二点:如何灵活运用一个更新变量来实现静态刷新输出或者静态刷新显示的功转载 2017-01-03 06:38:38 · 1999 阅读 · 0 评论 -
第二节:delay()延时实现LED灯的闪烁。
第二节:delay()延时实现LED灯的闪烁。开场白: 上一节鸿哥列出了初学者七大误区,到底什么才是初学者关注的核心?那就是裸机奔跑的程序结构。一个好的程序结构,本身就是一个微型的多任务操作系统。鸿哥教给大家的就是如何编写这个简单的操作系统。在main函数循环中用switch语句实现多任务并行处理的任务切换,再外加一个定时器中断,这两者的结合就是鸿哥多年来所有实战项目的核心。鸿哥转载 2017-01-03 06:13:58 · 10444 阅读 · 0 评论 -
第三节:累计主循环次数使LED灯闪烁。
第三节:累计主循环次数使LED灯闪烁。开场白:上一节鸿哥提到delay()延时函数消耗的时间太长了,其它任务根本没有机会执行,我们该怎么改善?本节教大家利用累计主循环次数的方法来解决这个问题。这一节要教会大家两个知识点:第一点:利用累计主循环次数的方法实现时间延时第二点:switch核心语句之初体验。 鸿哥所有的实战项目都是基于switch语句实现多任务并行处理。(1)硬件转载 2017-01-03 06:15:10 · 1560 阅读 · 0 评论 -
第四节:累计定时中断次数使LED灯闪烁。
第四节:累计定时中断次数使LED灯闪烁。开场白:上一节提到在累计主循环次数来实现计时,随着主函数里任务量的增加,为了保证延时时间的准确性,要不断修正设定上限阀值const_time_level 。我们该怎么解决这个问题呢?本节教大家利用累计定时中断次数的方法来解决这个问题。这一节要教会大家四个知识点:第一点:利用累计定时中断次数的方法实现时间延时第二点:展现鸿哥最完整的实战程序转载 2017-01-03 06:16:23 · 2318 阅读 · 0 评论 -
第五节:蜂鸣器的驱动程序
第五节:蜂鸣器的驱动程序。开场白:上一节讲了利用累计定时中断次数实现LED灯闪烁,这个例子同时也第一次展示了我最完整的实战程序框架:用switch语句实现状态机,外加定时中断。这个框架看似简单,实际上就是那么简单。我做的所有开发项目都是基于这个简单框架,但是非常好用。上一节只有一个单任务的LED灯在闪烁,这节开始,我们多增加一个蜂鸣器报警的任务,要教会大家四个知识点:第一点:蜂鸣器转载 2017-01-03 06:17:26 · 3269 阅读 · 1 评论 -
第六节:在主函数中利用累计主循环次数来实现独立按键的检测
第六节:在主函数中利用累计主循环次数来实现独立按键的检测。开场白:上一节讲了多任务中蜂鸣器驱动程序的框架,这节继续利用多任务处理的方式,在主函数中利用累计主循环次数来实现独立按键的检测。要教会大家四个知识点:第一点:独立按键的驱动程序框架。第二点:用累计主循环次数来实现去抖动的延时。第三点:灵活运用防止按键不松手后一直触发的按键自锁标志。第四点:在按键去抖动延时计时中,转载 2017-01-03 06:18:23 · 1814 阅读 · 0 评论 -
第七节:在主函数中利用累计定时中断的次数来实现独立按键的检测
第七节:在主函数中利用累计定时中断的次数来实现独立按键的检测。开场白:上一节讲了在主函数中利用累计主循环次数来实现独立按键的检测,但是它也有一个小小的不足,随着在主函数中任务量的增加,为了保证去抖动延时的时间一致性,要适当调整一下去抖动的时间阀值const_key_time1。如何解决这个问题呢?这一节教大家在主函数中利用累计定时中断的次数来实现独立按键的检测,可以有效地避免这个问题。转载 2017-01-03 06:20:06 · 2698 阅读 · 0 评论 -
第八节:在定时中断函数里执行独立按键的扫描程序。
第八节:在定时中断函数里执行独立按键的扫描程序。开场白:上一节讲了在主函数中利用累计定时中断的次数来实现独立按键的检测,但是如果在某些项目中,需要在主函数里间歇性地执行一些一气呵成的耗时任务,当主函数正在处理一气呵成的耗时任务时(前提是没有关闭定时器中断),这个时候如果有按键按下来,就有可能没有及时被响应到而遗漏了。在定时中断函数里处理独立按键的扫描程序,可以避免这个问题。要教会大家一转载 2017-01-03 06:20:52 · 5354 阅读 · 1 评论 -
第九节:独立按键的双击按键触发
第九节:独立按键的双击按键触发。开场白:上一节讲了在定时中断函数里处理独立按键的扫描程序,这种结构的程序我用在了很多项目上。这一节教大家如何实现按键双击触发的功能,这种功能类似鼠标的双击。要教会大家一个知识点:如何在上一节的基础上,略作修改,就可以实现按键的双击功能。具体内容,请看源代码讲解。(1)硬件平台:基于朱兆祺51单片机学习板。用矩阵键盘中的S1和S5号键作为独转载 2017-01-03 06:21:46 · 2778 阅读 · 0 评论 -
第十节:两个独立按键的组合按键触发
第十节:两个独立按键的组合按键触发。开场白:上一节讲了按键双击触发功能的程序,这一节讲类似电脑键盘组合按键触发的功能,要教会大家一个知识点:如何在上一节的基础上,略作修改,就可以实现两个独立按键的组合按键触发功能。具体内容,请看源代码讲解。(1)硬件平台:基于朱兆祺51单片机学习板。用矩阵键盘中的S1和S5号键作为独立按键,记得把输出线P0.4一直输出低电平,模拟独立按转载 2017-01-03 06:26:24 · 4641 阅读 · 0 评论 -
第十一节:同一个按键短按与长按的区别触发
第十一节:同一个按键短按与长按的区别触发。开场白:上一节讲了类似电脑键盘组合按键触发的功能,这节要教会大家一个知识点:如何在上一节的基础上,略作修改,就可以实现同一个按键短按与长按的区别触发。具体内容,请看源代码讲解。(1)硬件平台:基于朱兆祺51单片机学习板。用矩阵键盘中的S1和S5号键作为独立按键,记得把输出线P0.4一直输出低电平,模拟独立按键的触发地GND。转载 2017-01-03 06:27:50 · 10439 阅读 · 1 评论 -
第十二节:按住一个独立按键不松手的连续步进触发
第十二节:按住一个独立按键不松手的连续步进触发。开场白:上一节讲了同一个按键短按与长按的区别触发功能,这节要教会大家两个知识点:第一个知识点:如何在上一节的基础上,略作修改,就可以实现按住一个独立按键不松手的连续步进触发。第二个知识点:在单片机的C语言编译器中,当无符号数据0减去1时,就会溢出,变成这个类型数据的最大值。比如是unsigned int类型的0减去1就等于6553转载 2017-01-03 06:28:44 · 4248 阅读 · 1 评论 -
第十三节:按住一个独立按键不松手的加速匀速触发
第十三节:按住一个独立按键不松手的加速匀速触发。开场白:上一节讲了按住一个独立按键不松手的连续步进触发功能,这节要教会大家如何在上一节的基础上,略作修改,就可以实现按键的加速匀速触发。具体内容,请看源代码讲解。(1)硬件平台:基于朱兆祺51单片机学习板。用矩阵键盘中的S1和S5号键作为独立按键,记得把输出线P0.4一直输出低电平,模拟独立按键的触发地GND。(2转载 2017-01-03 06:29:34 · 1540 阅读 · 0 评论 -
第十四节:矩阵键盘的单个触发
第十四节:矩阵键盘的单个触发。开场白:上一节讲了按键的加速匀速触发。这节开始讲矩阵键盘的单个触发。具体内容,请看源代码讲解。(1)硬件平台:基于朱兆祺51单片机学习板。。(2)实现功能:16个按键中,每按一个按键都能触发一次蜂鸣器发出“滴”的一声。(3)源代码讲解如下:#include "REG52.H"#define const_voi转载 2017-01-03 06:33:01 · 925 阅读 · 0 评论 -
第十五节:矩阵键盘单个触发的压缩代码编程
。开场白:上一节讲了矩阵键盘的单个触发。这节要教会大家在不改变其它任何性能的情况下,把上一节的按键扫描程序压缩一下容量。经过压缩后,把原来1558个字节压缩到860个字节的程序容量。具体内容,请看源代码讲解。(1)硬件平台:基于朱兆祺51单片机学习板。。(2)实现功能:16个按键中,每按一个按键都能触发一次蜂鸣器发出“滴”的一声。(3)源代码讲解如下:转载 2017-01-03 06:34:08 · 709 阅读 · 0 评论 -
第三十五节:带数码管显示的象棋比赛专用计时器。
第三十五节:带数码管显示的象棋比赛专用计时器。开场白:2014年春节的时候,一帮朋友举行小规模的象棋比赛,有一些朋友下棋的速度实在是太慢了,为了限制比赛时间,我专门用朱兆祺的51学习板做了一个棋类比赛专用计时器给他们用。这一节要教会大家两个知识点:第一个:按键服务程序操作的精髓在于根据当前系统处于什么窗口状态下就执行什么操作。紧紧围绕着不同的窗口ucWd来执行不同的操作转载 2017-01-06 06:53:51 · 1475 阅读 · 0 评论