单片机实验总结

合集下载

单片机实训报告通用总结

单片机实训报告通用总结

一、前言单片机作为现代电子设备的核心控制单元,具有体积小、功能强、功耗低等特点。

通过单片机实训,可以让我们更好地掌握单片机的原理、编程和应用。

本文将对单片机实训的过程、收获和心得进行总结。

一、实训过程1. 实训内容本次单片机实训主要包括以下内容:(1)单片机原理及基本结构(2)单片机编程语言C语言(3)单片机外围电路设计(4)单片机应用系统开发2. 实训步骤(1)学习单片机原理及基本结构,了解其工作原理和特点。

(2)学习单片机编程语言C语言,掌握基本语法和编程技巧。

(3)学习单片机外围电路设计,了解常用元器件的功能和作用。

(4)结合所学知识,设计并实现一个简单的单片机应用系统。

二、实训收获1. 理论知识方面(1)掌握了单片机的基本原理和结构,了解了其工作过程。

(2)学会了C语言编程,掌握了单片机编程的基本方法和技巧。

(3)了解了单片机外围电路的设计方法和常用元器件的应用。

2. 实践能力方面(1)提高了动手能力,学会了单片机的组装和调试。

(2)培养了团队协作精神,学会了与他人共同完成项目。

(3)锻炼了问题解决能力,学会了在遇到困难时寻求帮助和解决方案。

三、实训心得1. 学以致用,理论与实践相结合在实训过程中,我们不仅要学习理论知识,还要将其应用到实际项目中。

通过实践,我们才能真正掌握单片机的原理和应用。

2. 注重细节,严谨求实在单片机设计和调试过程中,细节至关重要。

一个微小的错误可能导致整个项目失败。

因此,我们要严谨求实,注重每一个细节。

3. 团队合作,共同进步单片机实训是一个团队项目,需要大家共同协作。

在实训过程中,我们要学会与他人沟通、交流,共同解决问题,实现共同进步。

4. 持续学习,不断进步单片机技术发展迅速,我们要保持学习的热情,不断更新知识,提高自己的技能水平。

四、总结通过本次单片机实训,我们不仅掌握了单片机的原理和应用,还提高了自己的实践能力和团队协作精神。

在今后的学习和工作中,我们将继续努力,不断进步,为我国电子产业的发展贡献自己的力量。

单片机实训实验报告总结

单片机实训实验报告总结

一、实验背景与目的随着科技的不断发展,单片机作为一种微小的计算机系统,在工业控制、智能家居、汽车电子等领域得到了广泛的应用。

为了提高学生的实践能力和创新意识,本实训课程旨在通过实际操作,让学生掌握单片机的原理、编程和调试方法,培养学生的动手能力和团队协作精神。

本次实训以51单片机为核心,结合数码管、LED灯、按键等外围电路,设计了多个实验项目,包括LED流水灯、交通灯控制系统、简易计算器、温湿度监控系统等。

通过这些实验,使学生深入了解单片机的硬件结构和软件编程,提高学生的实际操作能力和问题解决能力。

二、实验内容与过程1. 实验一:LED流水灯(1)实验目的:掌握51单片机的I/O口编程,实现LED灯的流水效果。

(2)实验步骤:① 硬件连接:将LED灯连接到P1口;② 编写程序:使用循环语句和延时函数控制LED灯的流水效果;③ 程序下载:将程序烧录到单片机中;④ 实验验证:观察LED灯的流水效果。

2. 实验二:交通灯控制系统(1)实验目的:学习单片机在交通灯控制系统中的应用,实现红黄绿灯的变换及倒计时功能。

(2)实验步骤:① 硬件连接:将LED灯连接到P1口,按键连接到外部中断INT0;② 编写程序:设置定时器中断,实现倒计时功能;编写外部中断程序,实现红黄绿灯的变换;③ 程序下载:将程序烧录到单片机中;④ 实验验证:观察交通灯的工作状态和倒计时效果。

3. 实验三:简易计算器(1)实验目的:掌握矩阵键盘扫描原理、LCD1602显示屏控制,实现基本的四则运算。

(2)实验步骤:① 硬件连接:将矩阵键盘和LCD1602显示屏连接到单片机;② 编写程序:实现矩阵键盘扫描、LCD1602显示控制和运算逻辑处理;③ 程序下载:将程序烧录到单片机中;④ 实验验证:观察计算器的工作状态和运算结果。

4. 实验四:温湿度监控系统(1)实验目的:学习单片机在温湿度监控系统中的应用,实现温度和湿度的实时显示。

(2)实验步骤:① 硬件连接:将温度传感器和湿度传感器连接到单片机,将LED灯连接到P1口;② 编写程序:实现温度和湿度的实时采集,并根据采集到的数据控制LED灯的亮灭;③ 程序下载:将程序烧录到单片机中;④ 实验验证:观察LED灯的亮灭状态和数码管上的温度、湿度值。

单片机实验心得体会(通用9篇)

单片机实验心得体会(通用9篇)

单片机实验心得体会(通用9篇)单片机实验篇1时间过得真快,不经意间,一个学期就到了尾声,进入到如火如荼的期末考试阶段。

在学习单片机这门课程之前,就早早的听各种任课老师和学长学姐们说过这门课程的重要性和学好这门课程的关键~~多做单片机实验。

这个学期,我们除了在课堂上学习理论知识,还在实验室做了7次实验。

将所学知识运用到实践中,在实践中发现问题,强化理论知识。

现在,单片机课程已经结束,即将开始考试了,需要来好好的反思和回顾总结下了。

第一次是借点亮LED灯来熟悉keil软件的使用和试验箱上器材。

第一次实验体现了一个人对新事物的接受能力和敏感度。

虽然之前做过许多种实验。

但依旧发现自己存在一个很大的问题,对已懂的东西没耐心听下去,容易开小差;在听老师讲解软件使用时,思路容易停滞,然后就跟不上老师的步骤了,结果需要别人再次指导;对软件的功能没有太大的热情去研究探索,把一个个图标点开,进去看看。

所以第一次试验相对失败。

鉴于此,我自己在宿舍下载了软件,然后去熟悉它的各个功能,使自己熟练掌握。

在做实验中,第二个问题应该是准备不充分吧。

一开始,由于没有课前准备的意识,每每都是到了实验室才开始编程,完成作业,导致每次时间都有些仓促。

后来在老师的批评下,认识到这是个很大的问题:老师提前把任务告诉我们,就是希望我们私下把程序编好。

于是我便在上机之前把程序编好,拷到U盘,这样上机时只需调试,解决出现的问题。

这样就会节约出时间和同学讨论,换种思路,换种方法,把问题给吃透。

发现、提出、分析、解决问题和实践能力是作为我们这个专业的基本素质。

三是我的依赖性很大,刚开始编程序时喜欢套用书上的语句,却对语句的理解不够。

于是当程序出现问题时,不知道如何修改,眼前的程序都是一块一块的被拼凑整合起来的,没法知道哪里错了。

但是编程是一件很严肃的事情,容不得半点错误。

于是便只能狠下决心,坚持自己编写,即使套用时,也把每条语句弄懂。

这也能激发了学习的兴趣。

单片机生产实习心得体会7篇

单片机生产实习心得体会7篇

单片机生产实习心得体会7篇单片机生产实习心得1作为一名自动化专业的大三学生,我觉得做单片机课程设计是十分有好处的,而且是十分必要的。

在已度过的大学时间里,我们大多数接触的是专业课。

我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践潜力如何把我们所学的专业基础课理论知识运用到实践中去呢我想做类似的课程设计就为我们带给了良好的实践平台。

这次单片机课程设计我们历时两个星期,在我们班里算是倒数几组完成的吧,但经过这两个星期的实践和体验下来,我们又怎样会去在乎那个先后问题呢,因为对我来说学到的不仅仅是那些知识,更多的是团队和合作。

此刻想来,也许学校安排的课程设计有着它更深层的好处吧,它不仅仅仅让我们综合那些理论知识来运用到设计和创新,还让我们明白了一个团队凝聚在一齐时所能发挥出的巨大潜能!单片机作为我们的主要专业课之一,虽然在大三开学初我对这门课并没有什么兴趣,觉得那些程序枯燥乏味,但在这次课程设计后我发现自己在一点一滴的努力中对单片机的兴趣也在逐渐增加。

两个星期前我们五个人还在为到底选那个课题而发生分歧,最后还是在龚老师的耐心分析和指导下完成了课题的选定,但是随之而来的问题却远比我们想想的要困难的多过没想到这项看起来不需要多少技术的工作却是十分需要耐心和精力在两个星期后的这天我已明白课程设计对我来说的好处,它不仅仅仅是让我们把所学的理论知识与实践相结合起来,提高自己的实际动手潜力和独立思考的潜力,更重要的是同学间的团结,虽然我们这次花去的时间比别人多,但我相信我们得到的也会更多!在做本次课程设计的过程中,我感触最深的当属查阅超多的设计资料了。

为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。

我们是在做单片机课程设计,但我们不是艺术家,他们能够抛开实际尽情在幻想的世界里翱翔,而我们一切都要有据可依,有理可寻,不切实际的构想永远只能是构想,永远无法升级为设计。

其次,在这次课程设计中,我们运用到了以前所学的专业课知识,如:CAD 制图、汇编语言、模拟和数字电路知识等。

单片机实训报告总结

单片机实训报告总结

单片机实训报告总结篇一:51单片机实训报告“51单片机”精简开发板的组装及调试实训报告为期一周的单片机实习已经结束了。

通过此次实训,让我们掌握了单片机基本原理的基础、单片机的编程知识以及初步掌握单片机应用系统开发实用技术,了解“51”单片机精简开发板的焊接方法。

同时培养我们理论与实践相结合的能力,提高分析问题和解决问题的能力,增强学生独立工作能力;培养了我们团结合作、共同探讨、共同前进的精神与严谨的科学作风。

此次实训主要有以下几个方面:一、实训目的1.了解“51”精简开发板的工作原理及其结构。

2.了解复杂电子产品生产制造的全过程。

3.熟练掌握电子元器件的焊接方法及技巧,训练动手能力,培养工程实践概念。

4.能运用51单片机进行简单的单片机应用系统的硬件设计。

5.掌握单片机应用系统的硬件、软件调试方法二、实验原理流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的硬件组成的单个单片机。

它的电气性能指标:输入电压:~6V,典型值为5V。

可用干电池组供电,也可用直流稳压电源供电。

如图所示:本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的硬件组成的单个单片机。

三、硬件组成1、晶振电路部分单片机系统正常工作的保证,如果振荡器不起振,系统将会不能工作;假如振荡器运行不规律,系统执行程序的时候就会出现时间上的误差,这在通信中会体现的很明显:电路将无法通信。

他是由一个晶振和两个瓷片电容组成的,x1和x2分别接单片机的x1和x2,晶振的瓷片电容是没有正负的,注意两个瓷片电容相连的那端一定要接地。

2、复位端、复位电路给单片机一个复位信号(一个一定时间的低电平)使程序从头开始执行;一般有两中复位方式:上电复位,在系统一上电时利用电容两端电压不能突变的原理给系统一个短时的低电平;手动复位,同过按钮接通低电平给系统复位,时如果手按着一直不放,系统将一直复位,不能正常。

单片机实训心得5篇

单片机实训心得5篇

单片机实训心得5篇(实用版)编制人:__________________审核人:__________________审批人:__________________编制单位:__________________编制时间:____年____月____日序言下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。

文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!并且,本店铺为大家提供各种类型的实用资料,如工作总结、工作报告、工作计划、心得体会、讲话致辞、教育教学、书信文档、述职报告、作文大全、其他资料等等,想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor.I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!Moreover, our store provides various types of practical materials for everyone, such as work summaries, work reports, work plans, reflections, speeches, education and teaching, letter documents, job reports, essay summaries, and other materials. If you want to learn about different data formats and writing methods, please stay tuned!单片机实训心得5篇通过与他人分享心得体会,可以促进交流和合作,共同探讨问题和解决挑战,心得体会是我们的财富,它们可以指导我们的决策和行动,本店铺今天就为您带来了单片机实训心得5篇,相信一定会对你有所帮助。

单片机基本输入输出实验总结

单片机基本输入输出实验总结

单片机基本输入输出实验总结
单片机基本输入输出实验是学习嵌入式系统开发的关键一步。

通过对单片机进行输入输出实验,可以掌握单片机的基本工作原理和使用方法。

以下是对单片机基本输入输出实验的总结。

在单片机基本输入输出实验中,我们使用了各种外设和传感器来实现输入输出功能。

其中,最常见的输入设备是按键和开关,而最常见的输出设备是LED和数码管。

在输入方面,我们学会了如何使用按键和开关来控制单片机的运行。

通过对按键和开关状态的检测,我们可以实现不同功能的切换和控制。

例如,我们可以通过按下按键来改变LED的亮灭状态,或者通过开关来选择不同的工作模式。

在输出方面,我们学会了如何使用LED和数码管来显示单片机的运行状态和结果。

通过控制LED的亮灭状态,我们可以直观地了解单片机的运行情况。

而通过数码管的显示,我们可以将数字、字符等信息以更直观的方式展示出来。

此外,我们还学会了使用串口通信来实现单片机与计算机之间的数据传输。

通过串口通信,我们可以将单片机采集到的数据传输到计算机上进行处理和分析。

同时,我们也可以将计算机上处理好的数据发送
给单片机,实现更复杂的控制和交互功能。

总的来说,通过单片机基本输入输出实验,我们对单片机的输入输出功能有了更深入的理解。

在今后的嵌入式系统开发中,我们可以根据实际需求,灵活运用这些输入输出功能,实现各种功能强大的应用。

单片机流水灯实验总结

单片机流水灯实验总结

单片机流水灯实验总结单片机流水灯实验是学习单片机编程的基础实验之一,通过这个实验可以了解单片机的基本输入输出功能,掌握单片机的编程和控制方法。

下面我将对单片机流水灯实验进行总结,包括实验原理、实验步骤、实验结果以及实验中遇到的问题和解决方法。

实验原理。

单片机流水灯实验是利用单片机的GPIO口控制LED灯的亮灭,通过不同的控制方式实现LED灯的流水效果。

在单片机中,通过将相应的GPIO口输出高电平或低电平来控制LED的亮灭,从而实现流水灯的效果。

实验步骤。

1. 硬件连接,将单片机和LED灯按照电路图连接好,确保连接正确无误。

2. 编写程序,利用单片机编程软件编写流水灯控制程序,设置相应的GPIO口输出高低电平的时间间隔和顺序。

3. 烧录程序,将编写好的程序通过编程器烧录到单片机中。

4. 调试程序,连接好电路后,通过上电测试程序,观察LED灯的流水效果是否符合预期。

实验结果。

经过以上步骤,我们成功实现了单片机流水灯的效果。

LED灯按照设定的顺序依次亮起和熄灭,形成了流水灯的效果。

实验结果符合预期,证明了程序编写和硬件连接的正确性。

实验中遇到的问题和解决方法。

在实验过程中,我们遇到了一些问题,例如LED灯未按照预期顺序亮起、熄灭或者有闪烁现象。

经过检查和调试,发现是程序编写中的逻辑错误或者硬件连接接触不良导致的。

通过仔细排查和调试,我们成功解决了这些问题,确保了实验的顺利进行和结果的准确性。

总结。

通过本次单片机流水灯实验,我们深入了解了单片机的GPIO口控制LED灯的方法,掌握了单片机编程和控制的基本技能。

同时,实验过程中遇到的问题也让我们学到了很多调试和排查的方法,提高了我们的实际操作能力和解决问题的能力。

希望通过这次实验,能够为我们今后的学习和实践打下坚实的基础。

结语。

单片机流水灯实验是单片机编程学习的重要实验之一,通过这个实验可以加深对单片机控制方法的理解,提高实际操作能力。

希望大家能够认真对待这个实验,通过自己的努力和实践,掌握单片机编程的基本技能,为今后的学习和工作打下坚实的基础。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

程序由410出品,与老师的不大一样,此处省去1万字-----最终解释归410所有1.试编写程序。

统计片RAM 30H~50H单元中FFH的个数,并将统计结果存51H。

mov r0,#30h //把30h赋给R0mov r1,#00h //把00h赋给R1loop: cjne r0,#0ffh,next //把R0所指的地址里的数(地址30h中的数)与0ffh比较inc r1 //若为0ffh则R1加1(计算0ffh的个数)next: inc r0 //若不一样则R0加1(即把R0里的地址加1,R0将指向下一个地址)cjne r0,#51h,loop //比较R0所存的地址与51h,若不等则跳回loop 继续执行mov 51h,r1 //若相等(R0里的数就为51h,完成30h到50h 的计数)将R1里的值赋到地址51h里,即地址51h中存储着0ffh的个数sjmp $ //等待end2、从片RAM 30H单元开始存放着一组无符号数,其个数存在21H单元中。

试编写程序,找出其中最小的数,并将其存入20H单元中。

mov r0,#30h //把30h赋给R0mov a,r0 //把R0所指30H中的数赋给a(a中就是地址30h中的无符号数)mov r1,21h //把21h中的数赋给R1loop: inc r0 //R0加1(即R0将指向下一个地址)mov 30h,r0 //把R0所指地址的数给到地址30h中cjne a,30h,chk //比较a中的数与地址30h中的数的大小,若a 中的数>30H中的数,则Cy=0;否则相反chk: jc lop //判断Cy是否为1,若是,则执行下面程序,否则跳至lop 继续执行mov a,r0 //把R0所指地址中的数给a,即把最小数赋给了a lop: djnz r1,loop //R1减一,程序跳至loop继续执行,循环直至R1减到0mov 20h,a //把a中的数赋到地址20h中end3、设片外RAM 2000H单元中有一个8位二进制数,试编程将该数的低四位屏蔽掉,并送回原存储单元。

mov dptr,#2000h //将片外地址2000h给dptrmovx a,dptr //将片外地址2000h中的数赋给aanl a,#0f0h //将a中的数与0f0h与下,屏蔽低四位的数movx dptr,a //将屏蔽好的数送回到片外地址2000h中end4、试编写程序,求出片RAM20H单元中“1”的个数,并将结果存入21H单元。

mov 21h,#0h //将地址21h中置0(例如20h中是01101000)mov r2,#08h //将8赋给R2(8个有效数)mov a,20h //将地址20h中的数赋给alop: rlc a //带Cy左循环移位(即第一次移位变为11010000,Cy=0) jnc loop //判断Cy是否不等于1,若不等1,则程序跳至loopinc 21h //若Cy等于1,则地址21h中的数加1loop: djnz r2,lop //R2减1,程序跳至lop执行直至R2=0,才执行下面的end5、试编一程序,分别统计在部RAM的30H~50H单元的数据区中奇数和偶数的个数,并将奇数和偶数的个数分别存放在51H和52H单元中。

mov r0,#30h //把30h给R0mov r1,#20h //把20h给R1mov 51h,#0mov 52h,#0 //把地址51h,52h中的数置零L1: mov b,#02h //把2h给bmov a,r0 //把R0所指地址中的数给adiv ab //a除以b,商给a,余数bmov a,b //把b的数给acjne a,#0,L2 //比较a与0的大小,若不等跳至L2inc 52h //若相等地址52h中的数加一jmp L3 //跳至L3L2: inc 51h //地址51h中的数加一L3: inc r0 //R0加一djnz r1,L1 //R1减一,跳至L1执行jmp $ //等待end6、在2000H~2004H单元中,存有5个压缩的BCD码,试编程将它们转换成ASCII码,并存入2005H开始的连续单元中。

mov dph,#20hmov dpl,#00hmov r0,#5hmov r1,#0hlop: mov dpl,r1movx a,dptrmov b,aanl a,#0fhorl a,#30hmov dpl,r0movx dptr,ainc r0xch a,bswap aanl a,#0fhorl a,#30hmov dpl,r0movx dptr,ainc r0inc r1cjne r1,#5h,lopEnd7、参考书中P109页,编写C语言和汇编语言的流水灯程序#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intvoid delayms(t){uint i;for(;t>0;t--)for(i=0;i<120;i++);}void main(){uint i;while(1){P1=0xfe;for(i=0;i<8;i++){P1=_crol_(P1,1);delayms(300);}}}8、使用89C51的P1连接到8颗LED,P1在正常状况下会输出跑马灯,然后通过用户触动外部按钮来中断INT0,当INT0引脚有低电位的脉冲出现时,8个LED会一闪一灭4次。

#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intvoid delayms(t){uint i;for(;t>0;t--)}void intx0_isr() interrupt 0 {uint i;for(i=0;i<4;i++){P1=0xff;delayms(200);P1=0x00;delayms(200);}}void main(){uint i;IT0=1;EX0=1;EA=1;while(1){P1=0xfe;{P1=_crol_(P1,1);delayms(300);}}}9、使用89C51的P1连接到8颗LED,使用外部中断方式,程序执行时,当用户每按一次按钮的中断进行计数,将其数值按二进制数在P1口驱动LED 灯上显示出来,计数到9次之后又会恢复到0。

(分别使用汇编语言和C51编程)#include<reg51.h>#define uchar unsigned char#define uint unsigned intuint j=255;void intx0_isr()interrupt 0{j--;P1=j;if(j==245){j=255;P1=255;}}void main(){P1=255;IT0=1;EX0=1;EA=1;while(1);}10、并行换串行输出#include<reg51.h>#include<intrins.h>#define uchar unsigned char #define uint unsigned int sbit spl=P2^5;void delay(uint time){uint j=0;for(;time>0;time--){for(j=0;j<120;j++);}}void main(){SCON=0x10;while(1){spl=0;spl=1;if(RI)RI=0;P0=SBUF;delay(100);}}11、串行换并行输出#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit clk=P3^1;void delay(uint time){uint j=0;for(;time>0;time--){for(j=0;j<120;j++);}}void main(){uint dataa=1;SCON=0;clk=1;while(1){unsigned int j;SBUF=dataa;if(TI)TI=0;dataa=_crol_(dataa,1);delay(500);}12、按键显示相应的数(数码管)#include<reg51.h>#define uint unsigned int#define uchar unsigned charuchar Pre=0xff,no=0xff;Uchar code DSY_CODE[]={0x3f,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6};void delay(uint ms){uchar i;while(ms--)for(i=0;i<120;i++);}void key(){uchar tmp;P1=0xf0;delay(1);tmp=P1^0xf0;switch(tmp)case 0x10:no=0;break;case 0x20:no=1;break;case 0x40:no=2;break;case 0x80:no=3;break;default:no=16;}P1=0x0f;delay(1);tmp=P1^0x0f;switch(tmp){case 2:no+=0;break;case 4:no+=4;break;case 8:no+=8;break;}}void main(){P0=0x00;while(1){P1=0xf0;if(P1!=0xf0) key();if(Pre!=no){P0=DSY_CODE[no+1];Pre=no;}delay(100);}}13、数码管循环显示(0~F)#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; void delay(t){uint i;while(t--)for(i=0;i<121;i++);}void main(){uint j=0;while(1){j=++j%16;P0=table[j];delay(300);}}14、甲机通过串口控制乙机LED闪烁甲机:#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED1=P0^0;sbit LED2=P0^3;sbit K1=P1^0;uchar Operation_No=0; //操作代码//延时void DelayMS(uint ms){uchar i;while(ms--) for(i=0;i<120;i++);}//向串口发送字符void Putc_to_SerialPort(uchar c) {SBUF=c;while(TI==0);TI=0;}//主程序void main(){LED1=LED2=1;SCON=0x40; //串口模式1,允许接收TMOD=0x20; //T1工作模式2 PCON=0x00; //波特率不倍增TH1=0xfd;TL1=0xfd;TI=0;TR1=1;while(1){DelayMS(100);if(K1==0) //按下K1时选择操作代码0,1,2,3{while(K1==0);Operation_No=(Operation_No+1)%4;switch(Operation_No) //根据操作代码发送A/B/C或停止发送{case 0: Putc_to_SerialPort('X');LED1=LED2=1;break;case 1: Putc_to_SerialPort('A');LED1=~LED1;LED2=1;break;case 2: Putc_to_SerialPort('B');LED2=~LED2;LED1=1;case 3: Putc_to_SerialPort('C'); LED1=~LED1;LED2=LED1; break;}}}}乙机:#include<reg51.h>#define uchar unsigned char #define uint unsigned intsbit LED1=P0^0;sbit LED2=P0^3;sbit K2=P1^0;uchar NumX=-1;//延时void DelayMS(uint ms){uchar i;while(ms--) for(i=0;i<120;i++); }void main(){LED1=LED2=1;SCON=0x50; //串口模式1,允许接收TMOD=0x20; //T1工作模式2TH1=0xfd; //波特率9600TL1=0xfd;PCON=0x00; //波特率不倍增RI=0;TR1=1;while(1){DelayMS(100);if(RI) //如收到则LED则动作{RI=0;switch(SBUF) //根据所收到的不同命令字符完成不同动作{case 'X': LED1=LED2=1;break; //全灭case 'A': LED1=0;LED2=1;break; //LED1亮case 'B': LED2=0;LED1=1;break; //LED2亮case 'C': LED1=LED2=0; //全亮}}}}15、乙机通过串口控制甲机数码管显示甲机:#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED1=P1^0;sbit LED2=P1^3;sbit K1=P1^7;uchar Operation_No=0; //操作代码//数码管代码uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f};//延时void DelayMS(uint ms){while(ms--) for(i=0;i<120;i++);}//向串口发送字符void send(uchar c){SBUF=c;while(TI==0);TI=0;}//主程序void main(){LED1=LED2=1;P0=0x00;SCON=0x50; //串口模式1,允许接收TMOD=0x20; //T1工作模式2 PCON=0x00; //波特率不倍增TH1=0xfd;TL1=0xfd;TR1=1;IE=0x90; //允许串口中断while(1){DelayMS(100);if(K1==0) //按下K1时选择操作代码0,1,2,3{while(K1==0);Operation_No=(Operation_No+1)%4;switch(Operation_No) //根据操作代码发送A/B/C或停止发送{case 0: send('X');LED1=LED2=1;break;case 1: send('A');LED1=~LED1;LED2=1;break;case 2: send('B');LED2=~LED2;LED1=1;case 3:send('C');LED1=~LED1;LED2=LED1;break;}}}}//甲机串口接收中断函数void Serial_INT() interrupt 4{if(RI){RI=0;if(SBUF>=0&&SBUF<=9) P0=DSY_CODE[SBUF]; else P0=0x00;}}乙机:#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED1=P1^0;sbit LED2=P1^3;sbit K2=P1^7;uchar NumX=-1;//延时void DelayMS(uint ms){uchar i;while(ms--) for(i=0;i<120;i++);}//主程序void main(){LED1=LED2=1;SCON=0x50; //串口模式1,允许接收TMOD=0x20; //T1工作模式2TH1=0xfd; //波特率9600TL1=0xfd;PCON=0x00; //波特率不倍增RI=TI=0;TR1=1;IE=0x90;while(1){DelayMS(100);if(K2==0){while(K2==0);NumX=++NumX%11; //产生0~10围的数字,其中10表示关闭SBUF=NumX;while(TI==0);TI=0;}}}void Serial_INT() interrupt 4{if(RI) //如收到则LED则动作{RI=0;switch(SBUF) //根据所收到的不同命令字符完成不同动作{case 'X': LED1=LED2=1;break; //全灭case 'A': LED1=0;LED2=1;break; //LED1亮case 'B': LED2=0;LED1=1;break; //LED2亮case 'C': LED1=LED2=0; //全亮}}}16、LCD显示#include<reg51.h>#define uint unsigned int#define uchar unsigned charsbit rs=P2^6;sbit rw=P2^5;sbit e=P2^7;uchar code table[]={""};void delayms(t){uint i;while(t--)for(i=0;i<121;i++);}void wr_(uchar ){rs=0;rw=0;P0=;e=1;e=0;}void wr_dat(uchar dat) {rs=1;rw=0;P0=dat;e=1;e=0;}void play(uchar *p) {while(*p!='\0'){wr_dat(*p);p++;delayms(1);}}void init(){delayms(15);wr_(0x38);delayms(5);wr_(0x01);delayms(5);wr_(0x14);delayms(5);wr_(0x06);delayms(5);wr_(0x0c);delayms(5); }void main(){e=0;init();wr_(0x80);play(table);delayms(1); }。

相关文档
最新文档