单片机实验总结

合集下载

单片机实训实验报告总结

单片机实训实验报告总结

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

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

本次实训以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灯的亮灭状态和数码管上的温度、湿度值。

单片机实验总结

单片机实验总结

单片机实验总结引言单片机是一种集成电路,具有计算、存储和控制功能,并可编程。

在学习单片机的过程中,进行了一系列的实验。

本文旨在总结我在单片机实验中的经验和收获,并对实验中遇到的问题和解决方法进行归纳。

实验一:LED闪烁在第一个实验中,我们学习了如何通过单片机控制LED实现闪烁效果。

这个实验使我对单片机的基本结构和工作原理有了更深的理解。

通过编写简单的程序,我成功实现了LED的闪烁,并通过修改程序中的参数实现了不同频率和节奏的闪烁效果。

实验二:数码管显示计数器实验二是在实验一的基础上进一步学习了数码管的控制。

通过编写程序,我们能够将实验一中的计数器的结果显示在数码管上。

在这个实验中,我学会了如何控制多个数码管的显示,以及如何实现数字的动态显示效果。

这个实验提高了我对单片机编程的熟练程度。

实验三:蜂鸣器发声实验三是学习如何通过单片机控制蜂鸣器发声。

通过对蜂鸣器的控制,我们可以发出不同的音调和节奏。

在这个实验中,我学会了如何使用单片机的PWM功能控制蜂鸣器,以及如何编写程序实现不同的音调和节奏。

这个实验加深了我对单片机的理论与实践的联系。

实验四:温度传感器数据采集实验四是学习如何通过单片机采集温度传感器的数据。

通过编写程序,我们可以获取温度传感器的输出值,并将其显示在数码管上。

在这个实验中,我学会了如何接口温度传感器,以及如何读取和处理传感器的输出值。

这个实验让我更深入地了解了单片机在数据采集方面的应用。

实验五:红外遥控器实验五是学习如何通过单片机接收红外遥控器的信号,并解析出其中的指令。

通过编写程序,我们可以控制LED的亮灭,实现对电器的遥控。

在这个实验中,我学会了如何接口红外接收头,并如何解析红外遥控器发送的信号。

这个实验为我进一步了解单片机在无线通信方面的应用提供了基础。

实验六:电机控制实验六是学习如何通过单片机控制电机的转速和方向。

通过编写程序,我们可以实现电机的正转、反转和调速功能。

在这个实验中,我学会了如何接口电机驱动器,并使用PWM信号控制电机的转速。

单片机实训总结(集锦10篇)

单片机实训总结(集锦10篇)

单片机实训总结(集锦10篇)单片机实训总结第1篇单片机是一门应用性和综合性很强的学科,它综合了电子技术中的模拟电路和数字电路方面的知识,特别是数字电路,因为数字电路在单片机里面的应用很多。

由于单片机涉及的知识很多,所以我们只能循序渐进的学习,逐步的积累,没有什么捷径可循。

在大二的时候,我就听学长介绍过单片机,当时感觉很神奇,从此就对单片机特别感兴趣,也感觉它特别有用。

于是经学长推荐,在大二上学期我利用学习之余在图书馆借书,学习了KILE和Proteus软件,刚开始学习的时候,对单片机没有什么认识,不知道什么是单片机,更不知道它有什么作用。

通过学习才大体知道了单片机的一些知识。

由中央处理器CPU、随机存储器RAM、只读存储器ROM、I/O接口、定时器/计数器以及串行通信接口等集成在一块芯片上,构成了一个单片微型计算机,简称为单片机。

也算给我正式学习单片机打下一个基础。

在大二下学期,我购买了一套单片机学习开发板和郭天祥主编的《新概念51单片机C语言教程》,从此正式开启我的单片机学习之路。

在刚开始学时,就完全模仿郭天祥主编的这本书再结合开发板一步一步的学,从点亮一个发光二级管,流水灯,数码管,定时器,中断,矩阵键盘,AD、DA,串口通行,I2C总线等一步一步的深入学习。

此时,我虽然能看懂程序,一些简单的程序可以自己编写,但一些比较复杂的自己编不出来。

在大二暑假,我发现了郭天祥主讲的《十天学会单片机》视屏,于是我坚持天天看视屏,然后在自己根据视屏内容结合开发板写程序,调程序,就这样学了一个暑假。

通过这个视屏,我初步了解了单片机的硬件结构,编程方法及调试方法(用KILE软件调试和用开发板调试),寄存器的使用,学会了如何看芯片资料,初步开始利用芯片时序图来编程。

可以说这个视屏对我学习单片机有巨大的帮助,更夸张的说是这个视屏将我带进了单片机的世界,让我尽情的体验单片机带给我的快乐!在大三上学期,我有幸参加了教改班的单片机课程学习。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

单片机实训心得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的亮灭状态,我们可以直观地了解单片机的运行情况。

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

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

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

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

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

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

单片机实习总结

单片机实习总结

单片机实习总结单片机实习总结 3篇单片机实习总结 1这次实习我们使用控制电路的单片机是AT89S51型号的,单片机实习报告总结。

通过它实现对八盏双色灯发光二极管的控制P0和P2口控制四盏灯。

在AT89S51的9引脚接复位电路,对电路实现复位控制。

在电路中接入74S164译码器和共阴极数码管,通过AT89S51的P3口数据的输入对共阴极数码管的控制。

同时也可实现双色发光的二极管与共阴极数码管的共同作用。

在AT89S51的P3.2口接上中断控制电路,P3.5口接入蜂鸣器,使电路实现中断作用,也使电路便于检测。

尽量朝“单片”方向设计硬件系统。

系统器件越多,器件之间相互干扰也越强,功耗也增大,也不可避免地降低了系统的稳定性。

系统中的相关器件要尽可能做到性能匹配。

如选用CMOS芯片单片机构成低功耗系统时,系统中所有芯片都应尽可能选择低功耗产品。

硬件电路设计:1)确保硬件结构和应用软件方案相结合。

硬件结构与软件方案会相互影响,软件能实现的功能尽可能由软件实现,以简化硬件结构。

必须注意,由软件实现的硬件功能,一般响应时间比硬件实现长,且占用CPU时间;2)可靠性及抗干扰设计是硬件设计必不可少的一部分,它包括芯片、器件选择、去耦滤波、印刷电路板的合理布线、各元器相互隔离等;3)尽量朝“MCS-51单片”方向设计硬件系统。

系统器件越多,器件之间相互干扰也越强,所消耗功耗也增大,也不可避免地降低了系统的稳定性;4)系统中的相关器件要尽可能做到性能匹配。

如选用CMOS芯片单片机构成低功耗系统时,系统中所有芯片都应尽可能选择低功耗产品。

1.1 单片机型号及特性单片机型号是 AT89S51。

特性是:⑴8031 CPU与MCS-51⑵兼容 4K字节可编程FLASH存储器(寿命:1000写/擦循环) ⑶全静态工作:0Hz-24KHz ⑷三级程序存储器保密锁定⑸128*8位内部RAM ⑹32条可编程I/O线⑺两个16位定时器/计数器⑻6个中断源⑼可编程串行通道⑽低功耗的闲置和掉电模式⑾片内振荡器和时钟电路。

  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,即把最小数赋给了alop: 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--)for(i=0;i<120;i++);}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;for(i=0;i<8;i++){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 intsbit 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工作模式2PCON=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;break;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工作模式2PCON=0x00; //波特率不倍增TH1=0xfd;TL1=0xfd;TI=RI=0;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;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_com(uchar com){rs=0;rw=0;P0=com;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_com(0x38);delayms(5);wr_com(0x01);delayms(5);wr_com(0x14);delayms(5);wr_com(0x06);delayms(5);wr_com(0x0c);delayms(5); }void main(){e=0;init();wr_com(0x80);play(table);delayms(1); }。

相关文档
最新文档