导航:首页 > 操作系统 > 单片机综合设计实验

单片机综合设计实验

发布时间:2023-05-12 20:57:43

单片机课程设计!不要复制百度!高分悬赏!!

1.单片机控制的60s倒计时
这个太简单了,不用什么提示吧?硬件上只要单片机最小系统加上数码管两个,程序上只要设置好定时器就行.
2.
基于单片机的电子钟设计
这个要复杂一点.大概要单片机+数码管+实时时钟芯片如DS系列(ds1302加要电池)+存储芯片如24C02,当然驱动数码管的如译码器或锁存器也要有.
实在说你第一个设计网上能找到现成的,第二个设计网上也能找到现成的,不过要你自己使用keil、proteus软件综合调试仿真,这两个内容都有,自己动手网络一下吧,不要太依赖别人.毕竟这样才能提高一下你自己.

❷ 单片机实验注意事项

单片机开发规则与注意事项

随着大规模集成电路技术的发展,单片微型计算机也随之大发展,各种新颖的单片机层出不穷。单片机具有体积小、重量轻、应用灵活且价格低廉等特点,广泛地应用于人类生活的各个领域,成为当今科学技术现代化不可缺少的重要工具。

单片机系统的开发融合了硬件和软件的相关技术。要完成单片机系统的开发,用户不仅需要掌握编程技术,还需要针对实际应用选择合理的单片机芯片和外围器件,以此为基础,设计硬件电路。

正确估计单片机的能力,知道单片机能做什么,最大程度的挖掘单片机的潜力对一个单片机系统设计者来说是至关重要的。单片机的能力的关键就在软件设计者编写的软件上。只有充分地了解到单片机的能力,才不会做出“冗余”的系统设计。而采用许多的外围芯片来实现单片机能实现的功能。这样做,即增加了系统成本,也可能会降低了系统的可靠性。

要完成单片机系统的开发,用户不仅需要掌握编程技术,还需要针对实际应用选择合理的单片机芯片和外围器件,以此为基础,设计硬件电路。

单片机开发规则与注意事项

设计满足要求的最精简的系统

正确估计单片机的能力,知道单片机能做什么,最大程度的挖掘单片机的潜力对一个单片机系统设计者来说是至关重要的。单片机的能力的关键就在软件设计者编写的软件上。只有充分地了解到单片机的能力,才不会做出“冗余”的系统设计。而采用许多的外围芯片来实现单片机能实现的功能。这样做,即增加了系统成本,也可能会降低了系统的可靠性。

看门狗电路通常是一块在有规律的时间间隔中进行更新的硬件。更新一般由单片机来完成,如果在一定间隔内没能更新看门狗,那看门狗将产生复位信号,重新复位单片机。更新看门狗的具体形式多是给看门狗芯片相关引脚提供一个电平上升沿或读写它的某个寄存器。使用看门狗电路将在单片机发生故障进行死机状态时,重新复位单片机,像EN8F154本身就带有看门狗。

确定系统的复位信号可靠

一般在单片机的数据手册(Datasheet)中都会提到该单片机需要的复位信号的要求。一般复位信号的宽度应为。复位电平的宽度和幅度都应满足芯片的要求,并且要求保持稳定。还有特别重要的一点就是复位电平应与电源上电在同一时刻发生,即芯片一上电,复位信号就已产生。不然,由于没有经过复位,单片机中的寄存器的值为随机值,上电时就会按PC寄存器中的随机内容开始运行程序,这样很容易进行误操作或进入死机状态。

确定系统的初始化有效

系统中的芯片以及器件从上电开始到正常工作的状态往往有一段时间,程序开始时延时一段时间,是让系统中所有器件到达正常工作状态。究竟延时多少才算合适?这取决于系统的各芯片中到达正常工作状态的时间,通常以最慢的为准。一般来说,EN8F154的延时20-100毫秒已经足够。对于系统中使用嵌入式MODEM等“慢热”型的器件来说,则应更长。当然,这都需要在系统实际运行中进行调整。

当然,仿真是单片机开发过程中非常重要的一个环节,除了一些极简单的任务,一般产品开发过程中都要进行仿真,仿真的主要目的是进行软件调试,当然借助仿真机,也能进行一些硬件排错。一块单片机应用电路板包括单片机部份及为达到使用目的而设计的应用电路,仿真就是利用仿真机来代替应用电路板(称目标机)的单片机部份,对应用电路部份进行测试、调试。仿真有CPU仿真和ROM仿真两种,所谓CPU仿真是指用仿真机代替目标机的CPU,由仿真机向目标机的应用电路部份供给各种信号、数据,进行调试的办法。

❸ 用单片机做一个简单的实验,控制电路什么的,不要像毕业设计那样复杂的。

看这篇帖子的,我想都是电子爱好者或电类专业学生。不知道大家都处于什么一个阶段,这篇帖子是写给入门者的,要解决一个问题:初学者应重点掌握什么电子知识,大学阶段如何学习?

先说点貌似题外的东西——3个谬论。

谬论一:高中老师常对我们说,大家现在好好学,考上了大学就轻松了,爱怎么玩怎么玩。这真是狗屁。别的专业我不好说,电气、电子、电力、通信、自动化等电类专业,想要轻松那是不可能地(当然你是天才就另说),专业课上讲的东西对决大多数人来说那是云里雾里,从来都是一知半解,需要你课下大量时间精力地消化。有些东西甚至需要你若干年后在工作中遇着时才回过味:“哦,原来以前学的那东西是干这使的。”你要能想得起,并知道怎么回头去补,就算是上学时专业课学得很扎实了。

谬论二:填志愿时经常有人对我们说:专业不重要,学校最重要,进了个好学校想学什么再学。这亦是狗屁。进了学校,本专业的课程就可能会压得你喘不过气来,还有多少人有时间和毅力选修第二专业?而所学专业几乎就是决定了你今后一生的职业生涯。而学校,说实在话本科阶段我觉得从老师那学到的东西各校间差别不是很大。课上讲的大同小异,课下也不会有什么好老师给你单独指导和点拨,若能遇着,那是你的幸运。越牛的学校的越牛的老师就越忙,不要指望他们会在教学上花多少心思,更不要指望他们对你另眼相看。反倒是一些普通院校的小老师们可能跟学生走得更近,辅导更多些,虽然他们可能水平一般,但对于你大学的学习来说还是足够的。综上所述,我觉得对于一个电子爱好者来说,成为一名普通重点大学的电子系学生比成为北大的哲学系学生更重要。当然看帖的应该大多数都是学电的,那恭喜你,这个专业不错的,虽不是什么“朝阳产业”,但绝对是个“常青行业”。

谬论三:上了大学,可能又有不少人对你说,在大学专业不重要,关键的是学好计算机和英语,这样就不愁找不到好工作了。这也是屁话。你要明确一点:你将来不是纯靠英语吃饭的,也不是做编程、搞软件开发或动画创作的。我是想说:若果你性格偏内向沉稳、肯钻研、爱好电子行业,将来想从事电子设计和研发工作,那你一定要学好专业课。当然英语也很重要,但以后工作中用得多的是你的专业英语,即能读懂英语技术文档,而不是跟别人比你口语多正宗多流利。至于计算机,那就是一工具,不要花太多时间去学photoshop、3dmax、Flash、网页制作等流行软件,这些在你今后的工作中用不着,也会牵扯你大量时间精力。好钢用在刀刃上,多进进实验室多搭搭电路吧。当然,电类学生对电脑也有特殊要求,那就是用熟Protel、
Multisim,学好汇编语言、C语言、选学PLD相关软件。任务也是很重的。

以上说了3个谬论,下面言归正传吧。那么进了大学,读了电类专业,这4年你该学些什么呢?

首先要了解:电类专业可分为强电和弱电两个方向,具体为电力工程及其自动化(电力系统、工厂供变电等)专业属强电,电气工程及其自动化以强电为主弱电为辅,电子、通信、自动化专业以弱电为主。其他更进一步的细分要进入研究生阶段才划分。但无论强电还是弱电,基础都是一样的。

首先高数是要学好的,以后的信号处理、电磁场、电力系统、DSP等不同方向的专业课都用得着。

专业基础课最重要的就是电路分析、模拟电路、数字电路。这3门课一定要学好。这3门课一般都是大一下学期到大三上学期开设,对大多数对电子知识还了解不多的同学来说,通常是学得一知半解,迷迷糊糊。所以,最好是在开课之前或是开课的同时读一两本通俗浅显的综合介绍电子知识的书籍,对书中的知识你不需要都懂,能有个大致感觉就行。

对这这种入门读物的选择很重要,难了看不懂可能兴趣就此丧失或备受打击,反而事与愿违。在此推荐一本《电子设计从零开始》(杨欣编着,清华大学出版社出版),该书比较系统全面地介绍了电子设计与制作的基础知识,模电、数电、单片机、Multisim电路仿真软件等都有涉及,一册在手基本知识就差不多了,关键是浅显易懂,有一定趣味性。另外科学出版社引进出版的一套小开本(32开)电子系列图书也不错,是日本人写的,科学出版社翻译出版,插图较多,也较浅显,不过这一系列分册较多,内容分得较细。

除了看书,还要足够重视动手实践。电路、模电、数电这些课程进行的同时都会同时开设一些课程试验,珍惜这个动手机会好好弄一弄,而不要把它当作一个任务应付了事。跟抄作业一样,拷贝别人的试验结果在高校中也是蔚然成风,特别是几个人一个小组的实验,那就是个别勤奋好学的在那折腾,其他人毫不用心地等着出结果。

我只想说,自己动手努力得来的成果才是甜美的,那种成就感会让你充实和满足。游手好闲的,到临近毕业找工作或在单位试用时,心中那种巨大的惶恐会让你悔不当初。这种教训太多了,多少次我们都是蹉跎了岁月才回过头来追悔莫及。除了实验课好好准备好好做之外,许多学校都设有开放性实验室,供学生平时课余自觉来弄弄。珍惜这种资源和条件吧,工作后不会再有谁给你提供这种免费的午餐了。

当然有些学校没有这么好的条件,或缺少器件,那同学们就在电脑上模拟一把试验平台吧,就是学好用好Multisim软件。Multisim是一种电路仿真软件,笔者上学时叫做EWB,后来随着版本更新,先后更名为Multisim2001、Multisim7、Multisim8。这个软件可模拟搭建各种模拟电路和数字电路,并可观测、分析电路仿真结果。大伙可以把模电、数电中学习的电路在这软件里面模拟一下,增加感性认识,实验前后也可把试验电路在软件里模拟,看跟实际试验结果有多大差别。可以说,只要你是学电的,这个小软件就是你上学时必须掌握的,对你的学习助益很大。另一个必须掌握的软件那就是protel了。

上学时,从小学期的综合设计实验到毕业设计,最后都会要求你用Protel绘出设计的电路原理图和PCB版;工作后,Protel也是你必须掌握的基本技能,部分同学毕业后一两年内的工作,可能就是单纯地用这软件画板子。Protel的版本也走过了Protel98、Protel99、Protel99SE、ProtelDXP、Protel2004的发展道路。Protel99SE、ProtelDXP、Protel2004这三个版本现在用得最多,目前许多学校教学或公司内工程师使用的都还是Protel99SE,当然若作为新的自学者直接从Protel2004学起似乎好一些。

综上所叙,作为最基本的EDA(电子设计自动化)软件,Multisim和Protel是所有电类学生在上学时必须掌握的。其他的如Pspice、Orcad、SYstemview、MATLAB、QuartusII等等,需根据不同的专业方向选学,或是在进入研究生阶段或工作后在重点学习使用。那Multisim和Protel好学么?入门应该问题不大,让师兄师姐指导指导,或是找一两本入门书看一看就OK了。这里推荐一本《电路设计与仿真——基于Multisim 8与Protel 2004》(也是杨欣编着,清华社出版),作为这两款软件的入门学习挺不错的,关键是一本书包含了两款软件学习,对穷学生来说比较划算,若是花钱买两本书分别去学这两个软件,就不值了,因为Multisim的入门不是很难。另用Protel画PCB电路板学问挺大的,有必要多看一些技术文档或是买一本高级应用类的图书。

2.大三大四(学习专业课,尝试应用)
进入大三,就涉及到专业课的学习了,本文只讨论以应用为主的专业课,其他如《电力系统分析》、《电机学》、《自控原理》、《信号与处理》、《高电压》、《电磁场》等等以理论和计算为主的专业课,咱就不多提了。当然这些课对你今后向研究型人才发展很重要,也都很让人头疼,要有建议也只能说是努力学、好好学,懂多少是到少(不过别指望全都懂),以后工作或接着深造用得着时再回过头来接着补接着学,那时有工作经验或接触多了有感性认识,可能学着就容易些了。
那以应用为主的专业课又有哪些呢?不同专业方向有不同的课程,很难面面俱到。这里先简单罗列一下,有微机原理与接口技术(也称单片机)、开关电源设计、可编程逻辑器件(PLD)应用、可编程逻辑控制(PLC)应用、变频器应用、通信电路、数字集成电路分析与设计、DSP、嵌入式等等。可能有同学要问:这么多东西,大学阶段要想都学好不容易吧?答案是不仅是不容易,而且是不可能。这些技术每一门展开来都是复杂的一套知识,可以说,你只要精通其中一门,就可以到外边找个不错的工作了。
而且在大学阶段,这些课程也不是都要学的,而是针对不同专业方向选修其中几门(具体选哪几门,多研究研究你们各自的专业培养方案,多请教老师),学的时候争取能动基本用法即可,真正的应用和深入是要到工作后的;当然你若很勤奋或有天赋,能熟练掌握某一门达到开发产品的程度,那毕业后找个好工作就轻而易举了。到这里我们需要再明确一点:电子领域知识繁多、浩如烟海,所以一般搞硬件的公司都有较多的员工,一个研发项目是多人细致分工、共同完成的,所以我们经常会听到团队意识这个名词。因为一个人的能力有限,不可能掌握所有的知识。比如一些人专门负责搞驱动,一些人专门从事逻辑设计,一些人专门搞高频无线,一些人专门搞测试,一些人专门设计外壳,一些人专门设计电路板等等。

看到这里可能有的同学头都大了:那说来说去大学阶段到底究竟应该学些什么呢?说实话写到这里我的头也大了,电子设计涉及方方面面的东西太多了,实在不是一篇文章甚至一本书能说得清楚的。所以我决定剔除这些生涩的课程名目,大致说一下我所认为的一个电类学生或是想要成为电子工程师的自学者应该掌握的基本的专业技能。

现在应该说单片机不知道那是相当严重的问题。单片机的知识和应用的技巧成了求职面试中必备的问题。但是单片机的知识较难入手,但是你如果看了《51单片机应用从零开始》(清华大学出版社,王玉凤,刘湘黔,杨欣编着)就不是这么感觉的了,这是一本中学生都读得懂的单片机基础和应用教程。这本教程凝结了国内几所重点大学中站在科研、教学第一线教师们的心血,也得到了英国剑桥大学、牛津大学、伦敦帝国理工大学、伦敦大学、加的夫大学等世界着名大学多位博士生导师的指导意见。经过多位学者的精心裁剪,本书的脉络、线索、内容才真正符合读者学习单片机的需要。

《51单片机应用从零开始》以生动活泼、平实易懂的语言讲述。尽量让单片机学习过程中不断涌现的专业词汇,在不知不觉的情况下通过多方面的使用而掌握。本书没有用专业的描述方法来叙述知识点,取而代之的是以“讲故事”的形式把应该了解的内容和盘托出。
十分注重基础知识的铺垫。在单片机学习之前,需要对计算机原理和电子技术有一定的了解。本书考虑到不同读者的知识背景不同,把这两个基础理论融入到了单片机的讲解当中,使阅读起来感觉不到有什么障碍。
构建了全面的学习支撑体系。每章最后的“实例点拨”除了巩固每章的学习知识外,更重要的是开辟单片机应用的视野;再加上“器件介绍”环节,补足单片机从基础到应用所需要的知识;以及丰富的附录内容可作为学习和应用单片机的强力参考。这便构建了一个完整学习单片机的支撑体系。
既授人以鱼,也授人以渔。书中有充足的实例应用,可以用在单片机实验、单片机课程设计当中。但更重要的是,这些实例前后都伴随着仔细的讲解,一个例子下来就能摸清来龙去脉。
叙述的内容全面、新颖、权威。严格按照单片机官方的技术参考对其进行讲解,包括所有51单片机学习与应用需要的基础知识。无论叙述的内容或是实例,都是目前世界上单片机应用的主流。
全书浑然一体。虽然每章各具标题,实际上互有联系。而这种联系如果在书中忽略不谈,则会对理解和记忆产生障碍。本书在正文中多次有知识点的相互映射,这不但能加深前后内容的联系,而且能深化理解与记忆。

我认为:除了最初提到的电路分析、模拟电路、数字电路、单片机外,应了解并掌握电子元器件识别与选用指导、基本仪器仪表的使用、一些常用电路模块的分析与设计、单片机的应用、PLD的应用、仿真软件的应用、电路板设计与制作、电子测量与电路测试。

电子元器件的识别与使用就不用说了,这是元素级的基础,不过要想掌握好也并不容易,一些电子系学生毕业了,还认不出二极管、三极管实物、分不清电解电容的正负极等等,也不是没有的事。还是一句话,多进进实验室,多跑跑电子市场,多看看书。

仪器仪表的使用,大学的实验课中你至少会用过数字万用表,波形发生器、电源、示波器、小电机、单片机仿真机,至少要把这些东西的接线方法和用法弄懂吧。

常用电路模块也是包罗万相,各种放大电路、比较器、AD转换电路、DA转换电路、微分电路、积分电路,还有各种数字逻辑单元电路等等,只能说,大致了解吧,并学会怎么去查资料、查芯片查管脚。最基本的,做实验或课程设计中用到的各种芯片要弄熟。

单片机,这是应该掌握的。时下单片机种类繁多,但各大小企业用得最多的还是51系列单片机,而且价格便宜、学习资料也最全,故给自学者推荐。当然各学校开课讲的单片机型号会有所不同,没关系,学好单片机编程,学好了一种,再学别的单片机就容易了。

PLD(可编程逻辑器件),一种集成电路芯片,提供用户可编程,实现一定的逻辑功能。对可编程逻辑器件的功能设定(即要它实现什么功能)要有设计者借助开发工具,通过编写程序来实现,这跟单片机类似。开发工具可学习Altera公司的Quartus II软件(这是该公司的第4代PLD开发软件,第3代是MAX+PLUS II软件)。编程语言学习硬件描述语言VHDL或Verilog HDL。

仿真软件最基本的就是前面说的Multisim了,另外还可学MATLAB。其他的试专业情况选学或是工作后学。电路板设计与制作主要是用Protel软件辅助进行。这在前面已有介绍,读者应该也比较熟悉。

最后建议同学们积极与各类电子竞赛赛事,参加一场比赛一个项目做下来,电子设计的一个流程和各环节的基础知识就能串起来了,对知识的融会贯通及今后走向工作岗位都有莫大裨益。

以上这些东西我说得笼统,深入下去又是一大堆要学的东西。还是那句话,多啃书本、多实践!清华大学出版社有一套“电子电路循序渐进系列教程”是按照上面我所讲的那个思路出的,可惜好像还没出全,现在好像只有《单片机在电子电路设计中的应用》、《电路设计与制板——Proetl应用教程》、《仿真软件教程——Multisim和MATLAB》、《常用电路模块分析与设计指导》几本。另外听听你们老师的意见、师兄师姐的意见,问问他们应读些什么书,当然也不能尽听尽信,翻开一本书我想你先大致看看他讲得是否通俗,自己琢磨着能看懂几分?我想能有5分懂这本书就值得一看了,示自己现阶段的知识情况,太浅显的书不用看了,太深的书也不要去看,看得迷迷糊糊还打击自信心丧失了兴趣。

好了,就此停笔吧。本来是要写个书目推荐,可干瘪瘪的罗列一堆书目有什么意义?还是写下这些字,让同学们自己去思考去选择去深入吧,希望能对你们有所帮助。

最后一句老生常谈也是我的切肤之痛:大学四年会一晃而过,要学的东西太多太多,不要虚度光阴。及时当努力,岁月不待人!
另外,虚机团上产品团购,超级便宜

❹ 单片机 实验 编程查表程序设计、数据排序实验

这么多问题,还没积分。。。谁回答啊。。

❺ 单片机及模数综合系统设计

问题1:
;;8051
BCDASC: MOV R2,#20 ;20个数
MOV R1,#40H ;内部地址
MOV R0,#80H ;外部地羡简址
$A MOVX A,@R0
ADD A,#30H ;BCD--->ASCII
MOV @R1,A
INC R0
INC R1
DJNZ R2,$A
RET
;
问题2:

;;晶体高派销振戚游荡f=12Mhz
TEN_BUF EQU 30H
TWE_BUF EQU 31H
FIF_BUF EQU 32H
SENCOND EQU 40H
;
LED REG P1.0 ;DISPLAY
KEY1 REG P3.2
;
ORG 0000H
AJMP MAIN
ORG 0003H
RETI
ORG 000BH
AJMP TM_0 ;用到定时器0中断方式
ORG 0013H
RETI
ORG 001BH
RETI
ORG 0023H
RETI
;
MAIN: MOV R0,#00H
DJNZ R0,$
MOV SP,#60H
RDY_T MOV TMOD,#11H
MOV TH0,#3CH
MOV TL0,#B0H
MOV SENCOND,#20
CLR TF0
SETB TR0
SETB ET0
SETB EA
$A JB KEY1,$A ;KEY1 按下则重新开始
SETB LED
MOV SENCOND,#20
SETB TR0
AJMP $0

TM_0: MOV TL0,#B0H ; TIMER 50 ms
MOV TH0,#3CH
DJNZ SENCOND,$0 ;50ms * 20 = 1S
MOV SENCOND,#20
CLR LED ;LED 亮提示你结束了
CLR TR0
$0 RETI
;;;;

❻ 帮我设计单片机课程设计实验,用c语言程序写,题目是:抢答器,要求制作一个四人抢答器,4个灯跑马循环

#define PlayerKey1_IO (P0.1)
#define PlayerKey2_IO (P0.2)
#define PlayerKey3_IO (P0.3)
#define PlayerKey4_IO (P0.4)
#define PlayerLED1_IO (P1.1)
#define PlayerLED2_IO (P1.2)
#define PlayerLED3_IO (P1.3)
#define PlayerLED4_IO (P1.4)
#define BuzzerEnable_IO (P1.5)
void SysInit(void)
{
//设置Key_io为上拉输入
//设置LED_io为通用输出
//设置BuzzerEnable_io为通用输出
}
unsigned char KeyScan(void)
{
if (PlayerKey1_IO == 0) return 1;
if (PlayerKey2_IO == 0) return 2;
if (PlayerKey3_IO == 0) return 3;
if (PlayerKey4_IO == 0) return 4;
return 0;
}
void Delay_Ms(unsigned char Nms)
{
volatile unsigned short tempcnt;
while (Nms--)
for (tempcnt = 0; tempcnt < 500; tempcnt++);//按照相应的参数配置计数上限,此处设为500
}
void main(void)
{
unsigned char MarqueeStep=0;
unsigned char KeyValue=0;
SysInit();
while (1)
{
Delay_Ms(400);
KeyValue = KeyScan(); //无按键去抖
if (KeyValue == 0)
{
MarqueeStep++;
if (MarqueeStep > 4) MarqueeStep = 0;
BuzzerEnable_IO = 0; // 按键取消停止蜂鸣器发声
}
else
{
MarqueeStep = KeyValue;
BuzzerEnable_IO = 1; //蜂鸣器发声
}
PlayerLED1_IO = 0;
PlayerLED2_IO = 0;
PlayerLED3_IO = 0;
PlayerLED4_IO = 0;
if (MarqueeStep == 0)
PlayerLED1_IO = 1;
else if (MarqueeStep == 1)
PlayerLED2_IO = 1;
else if (MarqueeStep == 2)
PlayerLED3_IO = 1;
else if (MarqueeStep == 3)
PlayerLED4_IO = 1;
}
}
基础框架是这样。

❼ 单片机实验与课程设计

/陵腊/假哗汪磨设晶振12MHZ,P1控制LED低电平亮
#include "reg51.h"
unsigned int YSJS=0;
void main(void)
{
TMOD |= 0X10; //定时器1工作于方式1,16位定时器
TH1 = 0XFF; //定时器1定时时间=500uS
TL1 = 0X06;
ET1 = 1; //使能定时器1中断
IT1=1; //负跳变触发
EX1=1; //开外部中断1
EA =1; /乱斗/开总中断
P1 = 0XFF;

while(1)
{
}
}
void INT0() interrupt 0
{
P1 = 0X55;

TR1 = 1; //开启定时器1
}

void TIMER1(void) interrupt 3 //定时器1中断函数使用默认寄存器组
{
TH1 = 0XFF; //定时器1定时时间=500us
TL1 = 0X06;

YSJS++;
if(YSJS==2000) //500uS*2000=1000000us=1s
{
P1 = P1 & 0XFF;
YSJS = 0
}
}

❽ 求单片机课程设计实验 用汇编语言,基于51单片机的定时闹钟

MODE_RG EQU40H ;模式选择

MODE2 EQU 60H ;MODE值

MODE3 EQU61H

MODE4 EQU62H

MODE5 EQU63H

MODE6 EQU64H

MODE1 EQU65H

HOUR EQU41H ;小时缓冲区

MIN EQU42H ;分钟缓冲区

SEC EQU 43H ;秒缓冲区

TEMP EQU4AH

;*********闹钟缓冲区********************

H_ALARM EQU 6AH ;闹钟缓冲区

M_ALARM EQU6BH

S_ALARM EQU6CH

F_ALARM EQU6DH

;***********秒表缓冲区******************

M_SEC EQU76H

S_SEC EQU77H

;*********LED送显示临时变量*************

LED0 EQU51H

LED1 EQU52H

LED2EQU53H

LED3 EQU54H

MODE_KEYEQUP3.4

UP_KEY EQUP3.3

DOWN_KEY EQUP3.5

BUF EQU49H

ORG0000H

LJMPMAIN

ORG000BH

LJMPINT_0

ORG001BH

LJMPINT_1

ORG0080H

MAIN: MOVSP,#2FH ;堆栈初始化

MOVMODE_RG,#0 ;MODE_RG寄存器值初始化

MOVLED0,#0FEH ;初始化LED

MOVLED1,#0FDH

MOVLED2,#0FBH

MOVLED3,#0F7H

MOVMODE1,#1

MOVMODE2,#2

MOVMODE3,#3

MOVMODE4,#4

MOVMODE5,#5

MOVMODE6,#6

MOVF_ALARM,#0 ;错误2:一开始用CLRF_ALARM,这导致在后面的时候JZF_ALARM运行错误,

MOVBUF,#0 ;在于JZ指令是对累加器A全为0或者全为1进行判断,CLR只能对一位操作

MOVTMOD,#11H ;定时器初始化:定时器0,方式1,定时器1,方式1

MOVIP,#00001000B ;定时器1优先级高

MOVTH0,#3CH ;定时50MS

MOVTL0,#0B1H

MOVTH1,#0D8H ;定时10MS

MOVTL1,#0F0H

SETBEA

SETBET0

SETBET1

SETBTR0;启动定时器

MOVHOUR,#0 ;fortest

MOVMIN,#0

MOVSEC,#0 ;定时器计数器,50MS中断一次,200次则刚好1S

MOVM_SEC,#0

MOVS_SEC,#0

MOVH_ALARM,#0

MOVM_ALARM,#0

MAIN1: LCALLDISPLAY12

LCALLDISPLAY34

;CLRP1.4 TEST

JNBMODE_KEY,KEY_SCAN

MOVA,MODE_RG

CJNEA,MODE6,Y1 ;MODE6秒表

JNBDOWN_KEY,DEALDOWN ;判断秒表开关

JNBUP_KEY,DEALUP

Y1: MOVA,F_ALARM ;判断闹钟

JNZALARM

LJMPMAIN1

;-----------------------------------秒表开关程序---------------------------

DEALDOWN: LCALLDELY10MS

JBDOWN_KEY,MAIN1

H1: JNBDOWN_KEY,H1

CPLTR1

LJMPMAIN1

DEALUP: LCALLDELY10MS

JBUP_KEY,MAIN1

H2: JNBUP_KEY,H2

MOVM_SEC,#0

MOVS_SEC,#0

CLRTR1

LJMPMAIN1

;-----------------------------------闹钟扫描程序---------------------------

ALARM: MOVA,H_ALARM

CPLP1.2

CJNEA,HOUR,EXIT3

MOVA,M_ALARM

CJNEA,MIN,EXIT3

LJMPSTARTALARM

EXIT3: SETBP3.6

LJMPMAIN1

STARTALARM:CPLP3.6

JNBDOWN_KEY,OFFALARM

LJMPS1

OFFALARM: LCALLDELY10MS

JBDOWN_KEY,MAIN1

S2: JNBDOWN_KEY,S2

MOVF_ALARM,#0

SETBP3.6

LJMPMAIN1

S1: LCALLDELAY

LJMPMAIN1

;-----------------------------------键盘扫描程序---------------------------

KEY_SCAN: LCALLDELY10MS

JBMODE_KEY,MAIN1

INCMODE_RG

;SETBP1.4 测试

K1: JNBMODE_KEY,K1 ;按键直到用户松开按键

K2: MOVA,MODE_RG

CJNEA,#0,DEALMODE;不是在正常显示模式下则跳转到模式处理程序

LJMPMAIN1 ;返回主程序

;*******************模式处理程序部分

DEALMODE: MOVTEMP,#0 ;凡转入MODE处理,则首先清除TEMP

MOVA,MODE_RG ;有MODE_RG值不为5、0

CJNEA,MODE2,M0 ;判断MODE_RG值,不为1跳转

LJMPH_GLINT ;模式1,小时位闪烁

M0: CJNEA,MODE3,M1 ;不是模式2,跳转

LJMPM_GLINT ;模式2,分钟位闪烁

M1: CJNEA,MODE4,M2 ;不是模式3,跳转

LJMPH_GLINT

M2: CJNEA,MODE5,M3

LJMPM_GLINT

M3: CJNEA,MODE6,M4

MOVM_SEC,#0

MOVS_SEC,#0

LJMPMAIN1

M4: CJNEA,MODE1,M5

;CLRTR1

LJMPMAIN1

M5: MOVMODE_RG,#0

LJMPMAIN1

;*****************************MODE为1,3,小时位闪烁

//MOVTEMP,HOUR ;将TEMP赋值,防止在加的时候是在随机值的基础上增加

H_GLINT: ;CPLP1.0

MOVR0,#28

MOVR1,#28

K4: LCALLDISPLAY12 ;分开显示

LCALLDISPLAY34

E1: JNBMODE_KEY,K21 ;检测是否有按键按下,有按下则跳转到分钟位闪烁

JBUP_KEY,E9 ;判断加位有无按键按下

LJMPUP

E9: DJNZR0,K4

K6: LCALLDISPLAY34

JNBMODE_KEY,K21 ;检测是否有按键按下,有按下则跳转延时后进行模式判断

LJMPG1

K21: LCALLDELY10MS ;延时后确定有MODE按键按下,将

JBMODE_KEY,H_GLINT

W: JNBMODE_KEY,W

INCMODE_RG

CPLP1.4

LJMPDEALMODE ;确定有按下,MODE+1后返回MODE处理程序

JNBUP_KEY,UP ;判断加位有无按键按下

G1: DJNZR1,K6

LJMPH_GLINT ;调用完毕返回,实现闪烁

K3: LJMPMAIN1 ;可省略

;******************************MODE为2,4,分钟位闪烁

M_GLINT: MOVR0,#28

MOVR1,#28

K23: CPLP1.7

LCALLDISPLAY12

LCALLDISPLAY34

JNBMODE_KEY,KK ;跳转,确定是否有按键按下

JNBUP_KEY,UP ;判断加位有无按键按下

MOVA,MODE_RG

CJNEA,MODE3,E2 ;在MODE5的情况下要判断闹钟确认键有没按下

LJMPE5

E2: JNBDOWN_KEY,F2

LJMPE5

F2: LJMPONALARM2

E5: DJNZR0,K23

K24: LCALLDISPLAY12

JNBMODE_KEY,KK ;检测是否有按键按下,有按下则跳转

JNBUP_KEY,UP ;判断加位有无按键按下

MOVA,MODE_RG ;扫描闹钟确认键

CJNEA,MODE3,E7 ;在MODE5的情况下要判断闹钟确认键有没按下

LJMPG2

E7: JBDOWN_KEY,E8

CPLP1.3

LJMPONALARM2

E8: LJMPG2

KK: LCALLDELY10MS ;去抖

JBMODE_KEY,M_GLINT

W1: JNBMODE_KEY,W1

INCMODE_RG

CPLP1.4

LJMPDEALMODE ;确定有按下,MODE+1后返回MODE处理程序

G2: DJNZR1,K24

LJMPM_GLINT

;*************************位加,处理程序

;***************小时调整

UP: MOVR1,#20

UP11: INCTEMP

UP12: MOVA,MODE_RG ;判断此时的MODE,根据MODE将临时变量给对应的赋值

CJNEA,MODE2,AA0 ;不是在MODE2的情况下跳转

MOVA,TEMP

CJNEA,#24,A_UP1

MOVTEMP,#0

A_UP1: MOVHOUR,TEMP ;为MODE2,将临时变量赋给小时位

LJMPUP15

AA0: CJNEA,MODE4,UP13//UP13为分钟调整入口

MOVA,TEMP

CJNEA,#24,A_UP

MOVTEMP,#0

A_UP: MOVH_ALARM,TEMP ;模式3,将临时变量赋给闹钟的小时位

LJMPUP15 ;UP15为显示入口

;****************分钟调整入口

UP13: MOVA,MODE_RG

CJNEA,MODE3,UP14 ;不是模式2,跳转

MOVA,TEMP

CJNEA,#60,DISOVER2

MOVTEMP,#0

DISOVER2: MOVMIN,TEMP

LJMPUP15

UP14: MOVA,TEMP ;上面判断不是模式2,则必然是模式4

CJNEA,#60,DISOVER3

MOVTEMP,#0

DISOVER3: MOVM_ALARM,TEMP

LJMPUP15

UP15: LCALLDISPLAY12

LCALLDISPLAY34

DJNZR1,UP01

MOVR1,#1 ;

JNBUP_KEY,UP11

UP01: JNBUP_KEY,UP12

UP16: MOVA,MODE_RG ;松开键以后按照模式判断该返回哪种状态,不能返回DEALMODE函数

CJNEA,MODE2,UP17

LJMPH_GLINT

UP17: CJNEA,MODE3,UP18

MOVSEC,#0 ;每次设置完时间后将秒钟位置零保证时间准确

LJMPM_GLINT

UP18: CJNEA,MODE4,UP19

LJMPH_GLINT

UP19: CJNEA,MODE5,UP20

LJMPM_GLINT

UP20: LJMPMAIN1

ONALARM2: LCALLDELY10MS ;延时10MS,去抖

JBDOWN_KEY,B2 ;抖动所致,返回分钟位闪烁

LJMPK42

B2: LJMPM_GLINT

K42: JNBDOWN_KEY,K42

MOVF_ALARM,#0FFH

MOVMODE_RG,#0

LJMPMAIN1

;---------------------------------------中断程序入口---------------------

;*******************时间中断0*********************

;错误1:中断程序EXIT处用了MAIN1,导致一直处于中断状态

INT_0: PUSHACC

PUSHPSW

MOVTH0,#3CH

MOVTL0,#0B1H

INCBUF

MOVA,BUF

CJNEA,#20,EXIT

TIME: MOVBUF,#0

INCSEC

MOVA,SEC

CJNEA,#60,EXIT

MOVSEC,#00H

INCMIN

MOVA,MIN

CJNEA,#60,EXIT

MOVMIN,#00H

INCHOUR

MOVA,HOUR

CJNEA,#24,EXIT

MOVHOUR,#0

RETI

EXIT: POPPSW

POPACC

RETI

;******************时间中断1***********************

INT_1: MOVTH1,#0D8H ;定时10MS

MOVTL1,#0F0H

INCS_SEC

MOVA,S_SEC

CJNEA,#100,EXIT4

MOVS_SEC,#0

INCM_SEC

MOVA,M_SEC

CJNEA,#100,EXIT4

MOVM_SEC,#0

EXIT4: RETI

;---------------------------------------显示-----------------------------

DISPLAY12: MOVA,MODE_RG ;判断模式,决定是显示闹钟时间还是显示当前时间

CJNEA,MODE4,DIS0 ;模式四,显示闹钟

LJMPDIS01 ;MODE4

DIS0: CJNEA,MODE5,DIS20

DIS01: MOVR7,H_ALARM ;闹钟模式

LJMPDIS2

DIS20: CJNEA,MODE6,DIS21

MOVR7,M_SEC ;秒表模式,显示秒表高位

LJMPDIS2

DIS21: CJNEA,MODE1,DIS1

LJMPDIS22

DIS22: MOVR7,MIN

LJMPDIS2

DIS1: MOVR7,HOUR ;DISPLAY12显示高位

DIS2: LCALLBCTD ;判断完毕,调用显示

;将秒、分分别转码,放到R4,R3

MOVA,R4

MOVR3,A

LCALLDIVIDE

MOVDPTR,#NUMTAB

MOVP2,#0FH

MOVP2,LED0

MOVA,45H ;从拆字的出口获取值

MOVCA,@A+DPTR

MOVP0,A

LCALLDELY10MS

MOVP2,LED1

MOVA,46H

MOVCA,@A+DPTR

MOVP0,A

LCALLDELY10MS

RET

DISPLAY34: MOVA,MODE_RG ;判断模式,决定是显示闹钟时间还是显示当前时间

CJNEA,MODE4,DIS31

LJMPDIS32

DIS31: CJNEA,MODE5,DIS35

DIS32: MOVR7,M_ALARM

LJMPDIS34

DIS35: CJNEA,MODE6,DIS41

MOVR7,S_SEC ;秒表模式,显示秒表低位

LJMPDIS34

DIS41: CJNEA,MODE1,DIS33

MOVR7,SEC

LJMPDIS34

DIS33: MOVR7,MIN ;DISPLAY34显示低位

DIS34: LCALLBCTD

MOVA,R4

MOVR3,A

LCALLDIVIDE

MOVP2,LED2

MOVA,47H

MOVCA,@A+DPTR

MOVP0,A

LCALLDELY10MS

MOVP2,LED3

MOVA,48H

MOVCA,@A+DPTR

MOVP0,A

LCALLDELY10MS

SETBP2.3

RET

;--------------------二翻十:入口:R6R7出口:R2R3R4----------------------

BCTD: MOVR5,#16

CLRA

MOVR2,A

MOVR3,A

MOVR4,A

LOOP: CLRC

MOVA,R7

RLCA

MOVR7,A

MOVA,R6

RLCA

MOVR6,A

MOVA,R4

ADDCA,R4

DAA

MOVR4,A

MOVA,R3

ADDCA,R3

DAA

MOVR3,A

MOVA,R2

ADDCA,R2

DAA

MOVR2,A

DJNZR5,LOOP

RET

;-----------------------拆字:入口:R3R4出口:45H46H47H48H------------------

DIVIDE: MOVA,R3

ANLA,#0FH

MOV46H,A

MOVA,R3

ANLA,#0F0H

SWAPA

MOV45H,A;时拆字45H放时高位,46H放十低位

MOVA,R4

ANLA,#0FH

MOV48H,A

MOVA,R4

ANLA,#0F0H

SWAPA

MOV47H,A;分拆字47H放分高位,48H放分低位

RET

;------------------------------------延时----------------------------------

DELY10MS:MOVR6,#10

D1:MOVR7,#248

DJNZR7,$

DJNZR6,D1

RET

DELAY: MOV74H,#2;延时子程序,12M晶振延时1.002秒

L3: MOV72H,#10

L1: MOV73H,#249

L2: DJNZ73H,L2

LCALLDISPLAY12

LCALLDISPLAY34

JNBDOWN_KEY,OFFALARM1

LJMPS3

OFFALARM1: LCALLDELY10MS

JBDOWN_KEY,S3

S4: JNBDOWN_KEY,S4

MOVF_ALARM,#0

SETBP3.6

LJMPMAIN1

S3: DJNZ72H,L1

DJNZ74H,L3

RET

NUMTAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH;码表

END

❾ 基于单片机的双路信号检测系统综合设计

模块悔袜名称:双路信樱前余号检测(直流电压+温度)
晶振频率:12.0000MHz
建脊滚立时间:2009/5/28
作 者 :Q,6,4,1,8,2,9,5,1,4

#include <REGX52.H>
#define uint unsigned int
#define uchar unsigned char

uchar code dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,<br/> 0x80,0x90,0xFF,0xA1,0x86,0xC7};

阅读全文

与单片机综合设计实验相关的资料

热点内容
服务器如何打开苹果 浏览:96
高响应比算法的实现 浏览:848
windows写命令行 浏览:61
腾讯天津数据中心服务器云空间 浏览:974
单片机扫描按键 浏览:386
如何设置google服务器 浏览:695
linuxtrace工具源码 浏览:178
源码第二次开发 浏览:784
如何获取网页php源码 浏览:729
还用飞那么源码 浏览:204
云服务器镜像可以随时更换吗 浏览:92
r600a压缩机多少钱 浏览:237
程序员那么可爱第几集在重庆相遇 浏览:673
上班两公里源码 浏览:817
南宁溯源码燕窝订制 浏览:933
在个人文件夹中新建文件 浏览:445
中国国家地理pdf下载 浏览:107
几套房子抵押可以解压其中一套吗 浏览:569
微爱app室外地板怎么装饰 浏览:231
辽宁省医保如何用app转 浏览:311