我是个单片机led数字显示初学者,设计了个小程序,要求三个LED灯闪,但是怎么也不闪保持长亮,请专业人士指导

  一、程序设计    我们选择图中的1作为单灯闪烁的控制目标,也就是我们将看到LED1单独闪烁。在我们编写程序前应该学会用程序流程图来表达我们的程序设计意图,特别是设计复杂程序的时候,更需要这一步骤。
  1.程序流程图设计    程序流程图又称之为程序框图,它是程序开发者最熟悉的一种算法表达工具。它独立于任何一种程序设计语言,能比较直观和清晰地描述过程的控制流程,易于学习掌握。因此,程序流程图是程序开发者最普遍采用的一种工具。
  程序流程图一般采用下面五种符号表示:
  ①起始框②终止框③处理过程框④判断框⑤流程线
 依据实训项目任务目标和流程图编写规则,《单灯闪烁器》程序流程图设计如下图。
  2.延时程序设计    分析程序流程图发现,要点亮LED和熄灭LED可以采用指令CLR P1.0和SETB Pl.0实现,延时要用什么指令实现呢?
  51指令系统没有专门的延时指令,需要我们编写一个延时子程序。为了编写延时子程序,先来学习几个相关的知识点:
  (1)振荡:也称时钟周期,是指为单片机提供时钟脉冲信号的振荡源的周期,与单片机系统的晶体()有关,振荡周期等于晶振的倒数。
  本系统的晶体振荡器的频率f=12M,所以振荡周期的计算公式:
  (2)状态周期:每个状态周期为时钟周期的2倍,是振荡周期经二后得到的。    (3)机器周期:一个机器周期包含6个状态周期S1-S6,也就是12个时钟周期。在一个机器周期内,CPU可以完成一个独立的操作。
  本系统的晶体振荡器的频率f=12MHz,时钟周期=12ms,所以机器周期的计算公式:
  (4)指令周期:它是指CPU完成一条指令操作所需的全部时间。每条指令的执行时间都是由一个或几个机器周期组成。MCS-51系统中,有单周期指令、双周期指令和四周期指令。如指令D2:DJNZR6,D2就是条双周期指令,也就是说执行这条指令需要2个机器周期,即需要2&s才可以执行完毕。
  单片机执行一条指令(D2:DJNZ R6.D2)需要2个微秒,如果让单片机执行62500次这条指令,那需要多少时间呢?可以计算得出是62500&2&s=125&S。
  操作码DJNZ的功能是自减1不为零跳转,冒号前面的D2为该条指令的标号,标号是地址的符号化,代表该条指令的地址位置。后面跟了当前工作寄存器R6和该条指令发生跳转时的目标地址D2。
  下面我们来分析下D2:DJNZ R6,D2这条指令的执行过程:
  第一步:把R6的内容减1。
  第二步:判断R6的内容是否为0。
  如果不等于0,就跳转到目标地址D2的地方去执行。因为本条指令的目标地址和标号都是D2,所以单片机将再继续执行一次指令D2:DJNZR6,D2。
  如果R6的内容等于0,就顺序执行下面的指令。
  如果我们设计子程序时,使得单片机重复执行这条指令(D2:DJNZ R6,D2)62500次后才能结束,也就是说单片机需要花125ms的时间来执行该延时子程序,相对于主程序来说本文所要编写的延时子程序的功能是延时125ms,就起到了延时的作用。
  延时子程序设计如下:
  在设计子程序的时候,一般开始的第一条指令一定要加标号,且标号命名的含义要和本子程序的功能相似,这样更方便程序的阅读与编写,如DELAY是延时的意思。子程序一定要以子程序返回指令RET结束。上面的延时子程序要执行250X250=62500次该指令D2:DJNZ R6,D2后才会结束,延时时间差不多是125ms。
  3.单灯闪烁程序设计    结合设计的程序流程图和延时子程序,编写程序如下:
&&&&&往下看有更多相关资料
本网站试开通微、小企业商家广告业务;维修点推荐项目。收费实惠有效果!欢迎在QQ或邮箱联系!
试试再找找您想看的资料
资料搜索:
查看相关资料 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款
copyright & &广电电器(中国梧州) -all right reserved& 若您有什么意见或建议请mail: & &
地址: 电话:(86)774-2826670& & &&)单片机不是学出来的,而是玩出来的
查看: 3136|
摘要: 许多的单片机学习者,他们总不得要领,从一开始学习时的热情高涨,到最后的沮丧放弃,使得大家对单片机产生了既爱又怕的感觉,在工作中和在校的同学的交流中,听到的最多的是“单片机太难了”。其实不是单片机难学, ...
&&&&& 许多的学习者,他们总不得要领,从一开始学习时的热情高涨,到最后的沮丧放弃,使得大家对单片机产生了既爱又怕的感觉,在工作中和在校的同学的交流中,听到的最多的是“单片机太难了”。其实不是单片机难学,而是不知道怎么入门。请大家记住一句话“单片机不是学出来的,而是玩出来的”。  学习单片机看书不够,实践也要从实际出发,现在的技术太模块了,什么都可以模块,模块的到最后,技术人员都成了只会用了,祖先的留下的知识,基础的知识该知道还是一定要知道的啊。毕竟学习单片机的最终目的是开发,是通过创造智能控制的实物,体现自己的价值。  关于实践有两种方法可以选择一种方法:购买一块51单片机的实验板,不要求功能太的,对于初学者来功能非常多的那种板子,上面有很多东西你这辈子都用不着,更有实验板为了增加功能,降低成本,实验板上到处用的是贴片元件,双面布线,越复杂就越有水平,好像他们在设计的时候就想着,学习单片机只要根据我的提示下载程序就可以了,更有甚者将下载器和集成了实验板上。很多初学者学完单片机还认为,原来单片机不是一块芯片,是老教材上经常提到的使用已经不到的单板机。我觉得初学单片机有这几个模块就够了,剩下的得自己去开发。流水灯、数码管、键盘、蜂鸣器、串口通讯、AD等这就差不多了。如果上面我提到的这些,你能熟练应用,那可以说对于单片机方面的硬件你已经入门了,剩下的就是自己练习设计电路,不断的积累经验。设计的电路的时候必须要学习下PCB板设计软件,毕竟现在做开发要产品批量化还得辅助设计啊,手工的效率太低了。但是在学习的过程中建议自己动手焊接。在焊接前一定要了解电路连接,网上随便搜索可以找到很多电路原理图,但是都不一定都能用,所以建议备一块面包板,有了它你在焊接电路前就可以先测试下了。如果在面包板上测试成功,后来的焊接你就志在必得了,如果失败,大不了重新再找一个。只要过了第一关,后面的路就好走,万事起步难。  方法二:你身边如果有单片机入门者,动手能力比较强,请他帮忙,搭个简单的单片机最下电路,哪怕是控制一个LED工作的电路。对于他们来说,做个单片机的最小系统板是轻而易举,而对于初学者可就难多,这中间的一层窗户纸破了就什么都简单了。因为只有对硬件了解了,才能熟练运用。  只有知道程序是和下载到单片机内部的,才会清楚为什么要写单片机程序,这个动力来自于哪里,来至于心里有底。单片机编程就是与单片机对话,如果不知道对方谁,有没有再听,你还会有说话的激情吗。当然了如果没有这样的人,还是那句话,在网上多找几个最小电路电路原理图,在面包板上焊接就可以了。当然了这个也不会的,那建议你一定要买一块实验板,以后单片机的学习实验及项目测试验都用的上。  有了单片机实验板你就要多练习,最好是自己有台电脑,少下载几部电影,少网络游戏,把实验板和电脑连好,安装上必备的软件,下载参考程序,并修改参考程序,从最简单的交通灯实验做起,等你发现你能控制交通灯,并了解交通的软硬设计的时候你已经入门了,你会发现单片机是多么迷人的东西啊,这不是在学习知识,而是在提升自我的价值。用途那么广的交通的设计都不在话下了,你还会觉得你没有学到东西吗。还会觉得自己什么都不会吗?计算机编程、技术的专业知识都用上了啊。当你编写的程序按你的意愿实现时,你比做什么事都开心,那种学习的收获感和成就感还有充实感是非常难得的。然后让数码管亮起来显示你所需要的数字。这两部分会了以后,你已经不能自拔了,你已经开始考虑你这辈子要走哪一行了。就这样学习,在写程序的时候你肯定会遇到很多问题,而这时你再去翻书找,这其中你会找你之前学过的编程的书,还有数电模电的书,你会发现原来之前学的知识还是有用的。  遇到不懂再去找以前学过的书本查阅这才是“温故而知新,可以为师矣”的大道理啊。知识必须用于现实生活中,解决实际问题,用单片机设计个简易的家电定时器、红外遥控器什么,这样才能发挥它的作用,好好想想,上了这么多年大学,探索了那么久,犹豫徘徊,天天上课,在课堂上学到了什么?是不是为了期末60分的考试而忙碌,侥幸靠了90分,很高兴啊,在别人面前吹自己专业知识如何如何学习的好,殊不知,大学考试不像高中考试啊,拿了奖学金又怎样。但是下学期开学回来一想,所学的知识已经忘记的一干二净。学到什么了?  为什么要推荐学习单片机,因为单片机是工科生学的,集合计算机编程电子技术及多门控制语言为一体的学科,与其说学习是在学习单片机,不如说是在学习一个大学科。五、学习单片机是汇编编程还是C语言编程关于用汇编和C语言编程的问题。这个问题困恼很多人,可能主要是学校教学和部分教材的教育引导引起的吧,大一开了C语言编程,没等学生知道到底C语言有什么实际的用途,马上其他的语言一起来过来了。即使是开始了专门的单片机课程,但是课程的内容与技术文档很相识,指令很多,但是完整的不多,所以学完了也不知道,到底为什么要学习编程。  很多同学大一就开设了C语言的课,我也上过,但是那时候就是天天几乘几,几加几啊,求个阶乘啊,用C语言去解决小学数学问题,每周两次上机,对着书本不停的敲打,下课了也不知道自己到底掌握了什么,掌握了这个有什么用途。学完了有什么用?如果在面试的时候,老板问,你学过编程吗,你脑子里马上是什么“C语言,VC什么VB。很多,什么C语言是基础是面向工程的,什么VC是高级面向对象的”,但是老板又问,你能将你所学习的C语言应用到实际中不,比如设计一个定时报警器的C语言。这下傻了,学校里没有学过啊。单片机编程用C语言或都可以,但是我建议用C语言比较好,模块化管理编程方便,移植性强,适合编写大程序。如果原来有C语言的基础那学起来会更好,如果没有,也可以边学单片机边学C语言。  虽然很多人是从汇编语言开始接触单片机的,但是写小程序汇编语言还是简单的,如果要实现一些算法,那汇编语言就不简单了。虽说C语言编译以后代码量明显比汇编长,而且执行效率也没有汇编语言高,但是在以前单片机开发中芯片工艺的限制,及单片机主频的限制,很多单片机内部存储器小的可伶,主频也小得可伶。但是现在不一样了,芯片内部的存储器根不不在乎这点差别。  那汇编语言是不是不学了呢?不是的,一定要学习,有两方面首先入门单片机的时候要用汇编语言,它的语法简单。第二如果你要做单片机的程序的高级设计师,那汇编语言是非掌握不可的,很多像高级单片机ARM都是汇编语言作为引导代码的,还有就是很多新出品的单片机起先也是先有汇编语言编译器之后才有C语言编译器。所以,我觉得对于单片机学习汇编语言入门,C语言精通,汇编语言再精通。最后,对于单片机的学习,入门为先,入门了以后就要去关注市场,关注企业,企业需要什么样的人才,我想有了基础以后在面试之前了解下企业所需要的单片机类型,很快就上手了,毕竟学习是相同的。预祝还在徘徊或则之前接触过单片机的初学者提前入门。
上一篇:下一篇:
Powered by &
这里是—这里可以学习 —这里是。
栏目导航:鎬诲叡3997鏉″井鍗氬姩鎬佸井鍗

我要回帖

更多关于 单片机led数字显示 的文章

 

随机推荐