单片机实验指导书
单片机实验指导书

目录实验一系统认识实验 (2)实验二端口I/O输入输出实验 (14)实验三外部中断实验 (17)实验四定时器实验 (21)实验五串行口通信实验 (25)实验六串行通信的调试实验 (29)实验七数码管静态显示实验 (34)实验八数码管动态显示实验 (39)实验一系统认识实验一、实验目的1.学习Keil C51编译环境的使用;2.学习STC单片机的下载软件STC-ISP的使用;3.掌握51单片机输出端口的使用方法。
二、实验内容任选单片机的一组I/O端口,连接LED发光二极管,编写程序实现8个LED按二进制加1点亮。
三、接线方案单片机P10~P17/C51单片机接L0~L7/LED显示,如下图:图1-1实验线路四、实验原理51单片机有4个8位的并行I/O端口:P0、P1、P2、P3,在不扩展存储器、I/O端口,在不使用定时器、中断、串行口时,4个并行端口,32根口线均可用作输入或输出。
作为输出时,除P0口要加上拉电阻外,其余端口与一般的并行输出接口用法相同,但作为输入端口时,必须先向该端口写“1”。
例如P0接有一个输入设备,从P0口输入数据至累加器A中,程序为:MOV P0, #0FFHMOV A, P0若将P0.0位的数据传送至C中,程序为:SETB P0.0MOV C, P0.0五、实验步骤1、连接串行通信电缆和电源线;2、根据图1-1实验线路进行电路连接;3、将C51单片机核心板上的三个开关分别拨到“独立”、“运行”“单片机”;4、打开实验箱上的电源开关。
5、利用Keil C51创建实验程序,并进行编译生成后缀为.HEX的文件;6、利用STC-ISP软件将后缀为.HEX的文件下载到单片机ROM中;7、观察实验现象,并记录。
若实验现象有误请重复第5、6步。
六、参考程序ORG 0000H ;程序的开始LJMP MAIN ;转入主程序ORG 0200H ;主程序的开始MAIN: MOV P1,#00H ;P1口做准备M1: INC P1 ;P1口连接输出计数,LCALL DELAY ;转入延时子程序LJMP M1 ;循环DELAY: MOV R5,#255 ;延时子程序D1: MOV R6,#255DJNZ R6,$DJNZ R5,D1RETEND ;程序体结束七、思考题1、利用其他I/O口实现LED加1点亮功能;2、利用P1端口实现流水灯(左移或右移)功能;3、实现LED其他点亮功能。
单片机实验指导书(6个实验)

单片机原理和接口技术实验指导书襄樊学院物理和电子信息技术系实验要求1.进入实验室前完成的部分1)认真阅读实验指导书,弄懂实验原理和实验内容。
2)编写实验所要用到的程序,将其放在U盘上。
3)写出预习报告。
2. 进入实验室后完成的部分1)建立工程,加入已准备好的程序文件。
2)对程序进行调试,修改错误,获得要求的结果。
3)保存调试后的程序。
3.实验结束后的部分对实验结果进行分析、总结,写出实验报告。
实验报告内容及格式1.实验目的2.实验设备3.实验原理及环境4.实验内容只做文字叙述,程序部分放在程序清单中。
流程图也可不画。
5.程序清单本实验使用的完整程序。
如果使用了本实验或前面实验中完全相同的子程序,可不列写,只做注明即可。
6.实验步骤7.实验总结主要包括对实验结果、调试过程、错误及产生的原因的分析,以及本次实验的重要收获等。
此项为实验成绩评定的重要依据。
实验1 Keil C51的使用(汇编语言)实验目的:初步掌握Keil C51(汇编语言)和ZY15MCU12BD型综合单片机实验箱的操作和使用,能够输入和运行简单的程序。
实验设备:ZY15MCU12BD型综合单片机实验箱一台、具有一个RS232串行口并安装Keil C51的计算机一台。
实验原理及环境:在计算机上已安装Keil C51软件。
这个软件既可以和硬件(ZY15MCU12BD型综合单片机实验箱)连接,在硬件(单片机)上运行程序;也可以不和硬件连接,仅在计算机上以虚拟仿真的方法运行程序。
如果程序有对硬件的驱动,就需要和硬件连接;如果没有硬件动作,仅有软件操作,就可以使用虚拟仿真。
实验内容:1.掌握软件的开发过程:1)建立一个工程项目选择芯片确定选项。
2)加入C 源文件或汇编源文件。
3)用项目管理器生成各种使用文件。
4)检查并修改源文件中的错误。
5)编译连接通过后进行软件模拟仿真。
6)编译连接通过后进行硬件仿真。
7)I A P 编程操作2.按以上步骤实现在P1.0输出一个频率为1Hz的方波。
单片机实验指导书

单片机实验指导书一、实验介绍单片机是一种集成电路,能够完成各种控制和计算任务。
本实验指导书将引导您进行单片机实验,以帮助您了解单片机的基本原理和应用。
在本实验中,您将学习如何搭建实验环境、编写程序以及进行各种实验操作。
二、实验准备1. 实验设备和材料:- 单片机开发板- USB数据线- 适配器- 数字电路元件(如LED、电位器等)2. 软件准备:- 单片机开发软件(如Keil、IAR EWARM等)- 编程软件(如C语言编辑器)- USB驱动程序三、实验步骤1. 搭建实验环境:- 将USB数据线连接单片机开发板和计算机。
- 通过适配器给单片机开发板供电。
- 检查驱动程序是否正确安装。
2. 编写程序:- 打开单片机开发软件,并创建一个新的工程。
- 选择适当的单片机型号和编程语言。
- 编写程序代码,实现所需功能。
- 编译程序并下载到单片机开发板。
3. 实验操作:- 根据实验要求连接相应的电路元件。
- 调试程序,确保程序能正确运行。
- 运行实验并观察结果。
四、实验注意事项1. 请确保您具备基本的电路和编程知识。
2. 在操作实验设备和元件时,请小心谨慎,避免发生触电等事故。
3. 如果遇到问题,请及时咨询实验指导人员或相关专家。
五、实验示例以下是一个简单的实验示例,用于演示如何控制LED灯的亮度:实验电路连接:将一个LED灯连接至单片机开发板的一个GPIO口。
程序代码:#include <reg51.h>sbit LED = P1^0;void delay(unsigned int time){unsigned int i,j;for(i=0;i<time;i++)for(j=0;j<120;j++);}void main(){while(1){LED = 1; // 点亮LEDdelay(200); // 延时200msLED = 0; // 熄灭LEDdelay(200); // 延时200ms}}六、实验总结通过本次实验,我们学习了搭建实验环境、编写程序以及进行单片机实验操作的基本步骤和注意事项。
单片机部分实验指导书

目录1、实验一多路开关实验 (3)2、实验二可编程增益放大器实验 (5)3、实验三A/D转换实验 (7)4、实验四D/A转换实验 (11)5、实验五静态显示实验 (13)6、实验六动态扫描显示实验 (15)7、实验七液晶显示实验 (18)8、实验八矩阵式键盘实验 (23)9、实验九开关量输入输出实验 (28)10、实验十24WC02串行E2PROM的读写实验 (30)11、实验十一PCF8563时钟/日历芯片的应用实验 (37)12、实验十二外部程序存储器EPROM的扩展实验 (45)13、实验十三 SRAM外部数据存储器扩展实验 (47)14、实验十四单片机与PC机的RS232串行通信实验 (50)15、实验十五单片机与PC机的MAX485串行通信实验 (52)16、实验十六打印机实验 (54)17、实验十七 USB通信实验 (57)18、实验十八网络控制器实验 (102)实验一多路开关实验一.实验目的1.掌握多路开关与单片机的接口方法。
了解按键识别的编程方法。
2.通过实验了解单片机如何进行多路开关实验。
二.实验内容利用线路板DSC-SCM01提供CPU处理器,利用线路板DCP-SCM02上的发光二级管显示及查询式键盘完成多路开关实验。
当对应的按键按下时,相应的发光二极管亮。
三.实验器材1.主控屏+5V电源2. DCP-SCM01 单片机电路3. DCP-SCM02 键盘及显示电路四.实验原理图五.实验说明该实验通过线路板DCP-SCM01及线路板DCP-SCM02完成,线路板DCP-SCM02上发光二极管的阳极接正5V电源,所以要使某个发光二极管亮,只要使对应的发光二极管的阴极为低电平即可。
六.实验步骤1.利用导线按表格中的对应关系将DCP-SCM01对应的端口与DCP-SCM02对应的端口连接起来即可DCP-SCM02 DCP-SCM01发光二极管显示单元的插座U3 P0查询式键盘区域的插座U4 P1EA脚接+5VD_SWITCH.C3.输入并编辑D_SWITCH.C文件,并且编译生成HEX文件。
单片机实验指导书

单片机实验指导书一、硬件实验系统介绍(一)电路原理实验板的主要组成有STC-89C51,电源开关、复位电路,发光二极管、数码管、键盘、模/数转换电路(ADC0809电路),数/模转换电路(DAC0832电路)、12232F液晶显示电路,温度检测模块、DS1302时钟电路,I2C总线电路(AT24C02电路),串行接口(MAX232电路、MAX485电路),步进电机调速电路等组成。
详细的电路原理图见附件(二)各模块开关控制简表二、单片机实验板使用说明(一)程序下载1、下载软件为STC-ISP V3.X,建议使用V3.5版本。
2、程序下载前,建议将所有器件的开关置于关闭状态,尤其是MAX485的开关S7,必须关闭;RS232的开关S6必须打开。
3、开始下载程序前,关闭实验板的总电源,等待下载软件提示上电后,再打开实验板电源。
(二)程序运行1、将程序涉及到的元件开关打开,原则上关闭与程序无关的元件开关。
2、各元件的电源开关均靠近本元件。
(三)注意事项由于ADC0809采用了最简化设计,使用液晶模块12232F时,须将DAC0832和ADC0809的电源开关打开,选择开关S13,S14拨向ADC0809侧,同时,程序中将P1.1和P1.2清零。
2. LED显示可采用动态扫描或串行74LS164显示,采用一种显示方式时,须将另一种方式的电源关闭,以免发生冲突。
使用动态扫描显示时,拨码开关均拨向下方与地断开,由74LS14(反向驱动)控制位选;使用串行静态显示时,拨码开关拨向上方与地接通。
3.由于P2.5作了DS1302的片选控制,在电机调速模块应使其清零三、Keil软件使用简要说明1、建立工程文件:单击“工程”菜单中的“新工程”命令。
选择路径、输入项目名称,不需要扩展名。
在Select Device for Target窗口中,选择“Atmel”中的“89C**”系列。
2、工程对象选项设定:单击“工程”菜单中的“options for Target属性”命令。
单片机实验指导书

单片机实验指导书实验一拆字程序实验一、实验目的:掌握汇编语言程序设计方法。
二、实验内容:把8000H地址的内容拆开,高位送8001H地址的低位,低位送8002H地址的低位,8001H、8002H地址的高位清0。
本程序通常把数据送显示缓冲区时使用。
三、实验器材:计算机1台。
四、实验步骤:1、按流程图编写程序,以下是通过计算机交叉汇编得到的LST文件清单,供参考。
2、文件编译连接、装载,用鼠标点击[项目/重建所有目标文件],系统自动进行编译,并弹出信息窗口,若有错误则重新修改再编译;若无错误,点击[调试/启动/停止调试]后进入调试状态。
3、设置观察窗口:(1)用鼠标点击[视图/存储器窗口],在地址栏中输入:[x:0x8000];(2)在8000H写入任意数据:在地址栏内选定任意数据,[如:0x008000:00 00 00 00……](注:初始数据均为“00”)。
右键点击一初始数据“00”,在出现的对话框中点击“修改位于X:0x008000的内存”,在新弹出的对话框:[输入字节于X:0x008000]内输入任意数据,确定即完成数据的写入。
(3)单步执行观察寄存器8000H-8002H的变化。
六、实验程序:(51ASM\A8051.asm);把指定字节的高低位拆开分别存放,多用于显示字程序ORG 0000HMOV DPTR,#8000H ;指定的字节MOVX A,@DPTRMOV B,A ;暂存SW AP A ;交换ANL A,#0FH ;屏蔽高位INC DPTRMOVX @DPTR,AINC DPTRMOV A,BANL A,#0FH ;指定字节的内容屏蔽高位MOVX @DPTR,ALOOP: SJMP LOOPEND ;结束汇编实验二拼字程序实验一、实验目的:1、进一步掌握汇编语言设计。
2、熟悉软件调试方法。
二、实验内容:把8000H、8001H两个字节的低位分别送入8002H的高位和低位。
本程序一般用于把显示缓冲区数据取出拼装成一个字节。
单片机实验指导书

实验一数制转换实验一、实验目的:(1)、熟悉单片机实验系统板、稳压电源及示波器的使用方法。
(2)、培养程序编制及调试的方法。
(3)、输入自己编写的程序(机器码),并通过实验板和示波器观察程序运行结果。
二、实验要求:(1)、给出程序设计流程图。
(2)、设计数制转换实验程序。
(3)、记录单片机实验板晶体振荡器的波形图。
(4)、记录单片机实验板上电复位电路的波形图。
三、实验原理:以下是把16进制数转换为10进制数的参考程序清单及机器码表:测试程序:四、实验仪器:稳压电源一台HB-51教学实验系统一套五、实验步骤:1、HB-51教学实验系统简介:(1)、+5V电源,+12V电源,-12V电源(2)、CPU、程序存储器、数据存储器、晶体振荡器、手动复位、LED发光管、键盘、显示器(LED 数码管)。
(3)、显示器介绍该系统共有6个数码管,分为两组,左边4个为一组,右边2个为一组。
在大部分情况下,左边4个数码管作为地址显示器,右边2个数码管作为内容显示器。
(4)、键盘介绍0~F 为数字键,用来输入0~F的数字,并且系统默认十六进制输入MEM 为程序存储器内容检查/修改键REG 为寄存器/内部RAM内容检查/修改键LAST 用来向上跳一个地址单元NEXT 用来向下跳一个地址单元EXEC 为连续执行键SCAL 为单步调用键STEP 为单步执行键MON 为返回系统监控状态,相当于让系统回到刚刚上电时的状态。
也是其他功能键的前导按键2、HB-51教学实验系统与稳压电源的连接。
实验系统上的+5V电源与稳压电源正确相连,接好以后,给稳压电源上电。
此时,如果系统工作正常,会在显示器上显示“HB--51”。
如果显示内容不是“HB--51”,则说明系统上电复位过程不正常。
此时按一下红色的手动复位按钮,系统就应当正常工作了。
如果系统还是有问题,甚至,显示器什么都不显示,处于黑屏状态,则立刻关掉稳压电源,然后请实验室老师来解决问题。
单片机实验指导书

单片机实验指导书第一章实验概述本实验指导书旨在帮助学生掌握单片机基本原理和应用技巧。
通过实验的学习,学生将了解单片机的内部结构,学习单片机的编程方法,并能够用单片机实现简单的控制功能。
第二章实验准备2.1 实验器材准备本实验需要准备以下器材:- 单片机开发板- USB线- 电脑2.2 软件安装在开始实验之前,需要安装以下软件:- Keil C51开发环境- STC单片机系列驱动程序第三章实验步骤3.1 硬件连接将单片机开发板通过USB线连接到电脑上,并确保连接正常。
3.2 软件设置打开Keil C51开发环境,点击菜单栏中的“文件”选项,选择“新建”创建新的工程。
设置工程的名称和保存位置,确定后点击“保存”。
3.3 编写程序在Keil C51开发环境中,编写单片机程序。
首先需要包含相应的头文件,然后编写具体的程序逻辑,实现所需的功能。
3.4 编译和烧录程序在编写完程序后,点击菜单栏中的“编译”选项进行编译。
编译成功后,点击菜单栏中的“下载”选项将程序烧录到单片机开发板中。
3.5 实验验证将程序烧录完毕后,将开发板与外部模块连接,观察实验现象是否符合预期。
第四章实验注意事项4.1 安全注意事项在实验过程中,要注意使用安全电压和电流,避免短路和电击风险。
4.2 实验环境实验需要在安静、整洁的环境中进行,以避免干扰和误操作。
4.3 调试和故障排除如果遇到实验效果不理想或者出现故障的情况,可以参考开发板的说明书进行故障排查和调试。
第五章实验总结通过本次实验,我深入了解了单片机的基本原理和应用技巧。
通过编写程序并实际观察实验现象,我成功掌握了单片机编程的方法和技巧,并能够用单片机实现简单的控制功能。
本次实验还让我意识到了实验中的安全注意事项和环境要求的重要性。
在实验过程中,我严格遵守了安全规定,并在安静整洁的环境中进行操作,确保实验顺利进行。
通过反复实践和调试,我不断提高了自己的实验技巧和问题排查能力。
在遇到故障时,我能够通过检查并参考说明书,准确地找到并解决问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机实验指导书适用专业:计算机控制、网络、物联网等学时:12编写人:孔庆臣2016-5-12实验一 IO口输入输出实验1. 实验内容(1) P2口做输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。
(2) P1口做输入口,接八个扭子开关,P2口接八只发光二极管,编写程序读取开关状态,将此状态在发光二极管上显示出来。
2. 实验目的学习keil仿真软件的使用方法学习IO口的使用方法。
学习延时子程序的编写和使用。
stc-isp软件的使用3.有关说明P1口为准双向口,P1的每一位都能独立地定义为输入或输出线,作为输入的口线,必须向锁存器相应位写入“1”,该位才能作为输入。
单片机IO口在复位时均置为“1”,如果后来在口锁存器写入过“0”,在需要时应写入一个“1”使它再成为一个输入。
可以用第二个实验做一下实验。
先按要求做好程序并调试成功后,可将P1口锁存器中置“0”,此时将P1作输入口,会有什么结果。
再来看一下延时程序的实现。
通常用的有两种方法,一是用定时器中断来实现,一是用指令循环来实现。
在系统时间允许的情况下可以采用后一种方法。
本实验系统晶振为11.0592MHZ,则一个时钟周期为0.0904us。
现要写一个延时0.1s的程序,可大致写出如下:void Delay100ms() //@11.0592MHz{ unsigned char i, j, k;i = 5;j = 52;k = 195;do{do{while (--k);} while (--j);} while (--i);}5.实验电路设计(1)分析附录1 单片机实验系统部分原理图,选择合适的电路模块,并根据实验要求的功能进行合理的电路模块间的电路连接。
(2)画出本次实验独立的原理图5、实验要求(1)完成实验电路设计(2)完成实验程序设计(3)实现要求的实验结果(4)对实验内容做全面总结实验二定时器实验1. 实验内容模拟八台电机延时启动,要求当按下启动按钮后,第一台电机马上启动,其他七台每隔10秒启动一台,当按下停止按钮时所有电机同时停止,同时用发光管显示出启动与停止状态。
启动、停止时低电平有效,电机运行使用发光管电路模拟,低电平运行,高电平停止。
2. 实验目的(1)熟悉定时器工作原理(2)掌握定时器应用编程的方法及使用技巧。
(3)了解单片机技术的基本应用设计3. 实验电路设计(1)分析附录1 单片机实验系统部分原理图,选择合适的电路模块,并根据实验要求的功能进行合理的电路模块间的电路连接。
(2)画出本次实验独立的原理图4、实验要求(1)完成实验电路设计(2)完成实验程序设计(3)实现要求的实验结果(4)对实验内容做全面总结实验三矩阵键盘及数码管显示器实验1. 实验内容P1口完成4*4键盘输入;P2口连接数码管,显示当前按下的键位号;P0口连接数码管,记录按下按键的次数,超过16次归零从新计数。
2. 实验目的(1)熟悉矩阵键盘与单片机的常用连接方法(2)掌握矩阵键盘的编程方法。
(3)掌握数码管与单片机的接口方式与编程方法3. 实验电路设计(1)分析附录1 单片机实验系统部分原理图,选择合适的电路模块,并根据实验要求的功能进行合理的电路模块间的电路连接。
(2)画出本次实验独立的原理图4、实验要求(1)完成实验电路设计(2)完成实验程序设计(3)实现要求的实验结果(4)对实验内容做全面总结实验四 A/D转换实验1.实验内容利用实验台上的ADC0809做A/D转换器,实验台上的电位器提供模拟量输入,编制程序,将模拟量转换成数字量用8个数码管显示,显示格式为“模拟电压转换成的数字量(3位数码管显示)- - 模拟电压转换成的数字量对应的电压值(3位数码管显示)”。
2.实验目的掌握A/D转换与单片机的接口方法。
熟悉A/D芯片ADC0809转换性能及编程方法。
掌握动态显示的原理及编程方法。
通过实验了解单片机如何进行数据采集。
3. 实验电路设计(1)分析附录1 单片机实验系统部分原理图,选择合适的电路模块,并根据实验要求的功能进行合理的电路模块间的电路连接。
(2)画出本次实验独立的原理图4、实验要求(1)完成实验电路设计(2)完成实验程序设计(3)实现要求的实验结果(4)对实验内容做全面总结实验五八路抢答器实验1. 实验内容利用实验系统中的八个独立键盘作为抢答输入端,数码管显示抢答选手号,同时该选手对应的发光管闪烁并伴有嗡名器发声几秒,最后发光管一直保持点亮状态直到新的抢答开始。
要求当抢答开始时,第一个选手抢答后其他选手抢答无效,抢答开始键可由开关替代或使用单片机复位键实现。
2. 实验目的(1)学会单片机基本应用系统的软硬件设计的基本流程及实现方法。
(2)学会对单片机简单接口电路如:数码管、嗡名器等的原理及编程方法(3)提高学生独立设计、开发的能力3. 实验电路设计(1)分析附录1 单片机实验系统部分原理图,选择合适的电路模块,并根据实验要求的功能进行合理的电路模块间的电路连接。
(2)画出本次实验独立的原理图4、实验要求(1)完成实验电路设计(2)完成实验程序设计(3)实现要求的实验结果(4)对实验内容做全面总结实验六电子钟及计时器实验1. 实验内容学生独立设计一个电子钟与计时器系统,要求:(1)完成显示时、分、秒,时、分、秒中间用“-”分开(2)完成计时器设计,计时器显示格式;“小时.分钟.秒钟.百分秒”(3)电子钟必须可调整显示时间功能(4)计时器具备开始计时、暂停、清零功能(5)电子钟与计时器可通过按键相互切换显示2. 实验目的(1)学会单片机较复杂应用系统的软硬件设计的基本流程及实现方法。
(2)学会对单片机简单接口电路如:数码管动态显示原理及编程方法(3)学会如何根据所完成的功能合理对键盘输入进行软硬件设计(4)提高学生独立设计、开发的能力3. 实验电路(1)分析附录1 单片机实验系统部分原理图,选择合适的电路模块,并根据实验要求的功能进行合理的电路模块间的电路连接。
(2)画出本次实验独立的原理图4、实验要求(1)完成实验电路设计(2)完成实验程序设计(3)实现要求的实验结果(4)对实验内容做全面总结附录1 单片机实验系统部分原理图总体模块图U_AD 与DA 转换U_IO 输出U_LED 显示U_处理器U_串口下载与通讯U_点阵U_光电隔离及继电器输出电路U_键盘与开关U_其它电路U_系统扩展电路U_液晶与时钟电路U_声音及步进与直流电机电路U_电源原理图总体结构第1页 共14页串口通讯及声音输出电路单片机最小电路独立键盘及开关电路AD转换电路矩阵键盘电路附录2 实验程序及硬件电路连接关系参考实验一第一部分://2JP3 1、2脚分别连接3JP2 1、2脚//2JP2 1-8脚分别连接JPP1 1-8脚//本程序完成发光管循环闪亮//晶振为11.0592MHz#include<reg51.h>void Delay100ms() //延时100ms{ unsigned char i, j, k;i = 5;j = 52;k = 195;do{do{while (--k);} while (--j);} while (--i);}main(){unsigned char i,y=0,temp=1; //取反后为8个发光管控制初值while(1){P2=~temp;for(i=0;i<10;i++) //延时1sDelay100ms();temp=(temp<<1); //左移1位++y; //计数器加1if(y>7) //8个发光管循环点亮一次后从新开始{y=0;temp=1;}}}第二部分://晶振为11.0592MHz//2JP3 1、2脚分别连接3JP2 1、2脚//将1JP2 1-8脚分别与2JP1 1-8脚相连,将JPP1 1-8脚分别与2JP2 1-8脚分相连//将开关全置下,发光管全灭,将开关全置上,发光管全亮#include<reg51.h>main(){P1=0XFF;while(1){P2=P1;}}实验二//晶振为11.0592MHz//设定启动时间为10s,8台逐一启动//2JP3 1、2脚分别连接3JP2 1、2脚//2JP1 1、2脚分别连接1JP1 1、2脚//2JP1 7、8脚分别连接JPP5 4、6脚//2JP2 1-8脚分别连接JPP1 1-8脚//P2口模拟8台电机启停状态,0启动,1停止#include<reg51.h>n1=200; //计数器1,对定时器中断次数进行减1计数,初值200 n2=7; //计数器2,对启动电机台数进行减1计数,初值7+1台sbit start=P1^0; //启动按钮sbit stop=P1^1; //停止按钮sbit led1=P1^6; //运行显示sbit led2=P1^7; //停止运行显示void time_0() interrupt 1{TH0=0x4c; //恢复定时初值TL0=0x00; //恢复定时初值 50msn1--; //定时器中断次数进行减1if(n1==0) //定时器减1到0(达到200*50ms){n1=200; //定时器中断次数恢复计数初值200P2=(P2<<1); //再启动下一台电机n2--; //启动电机台数减1if(n2==0) TR0; //8台全启动,停止定时器}}main(){TMOD=0x01; //设置定时器模式TL0=0x00; //设置定时初值 50msTH0=0x4c; //设置定时初值EA=1; //开定时器0中断ET0=1;led1=1; //停止指示灯亮led2=0; //运行指示灯灭while(1){if(start==0) //判断启动按钮是否按下,0按下{P2=0xfe; //启动第一台电机TR0=1; //启动定时器led1=0; //运行指示灯亮led2=1; //停止指示灯灭}if(stop==0) //判断停止按钮是否按下,0按下{TR0=0; //停止定时器P2=0xff; //停止所有电机TH0=0x4c; //恢复定时初值TL0=0x00; //恢复定时初值 50msn1=200; // 定时器中断次数恢复计数初值200n2=7; //恢复启动电机总台数led1=1; //停止指示灯亮led2=0; //运行指示灯灭}}}实验三/**************** 矩阵键盘实例*******************************P1口连接4*4键盘,行:P1.0-P1.3,列:P1.4-P1.7P0口显示键位号,P2口显示按下该键位的次数,超过16次从0从新计数************************************************************/ //2JP3 1、2脚分别连接3JP2 1、2脚//P1连接4*4键盘,即2JP1连接1JP3//P0口(2JP0)连接共阴极数码管(4JP5),显示按下按键的次数//P2口(2JP2)连接共阳极数码管(4JP2),显示当前按下的键位号//分别将4JP3、4JP4的2、3脚用短路片短接//实验结束后分别恢复原来的4JP3、4JP4的1、2脚用短路片短接状态#include <reg51.h>#define uchar unsigned char#define uint unsigned int//显示段码共阳,如要加上小数点则与上0x7fcode uchar seg7code_a[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阴,如要加上小数点则或上0x80uchar code seg7code_c[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};//存放0、1、2、3、……、E、F键的键位值,高4位存按下按键所在的列、低4位存按下按键所在的行uchar code key_a[16]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7, 0xb7,0x77};//保存每个按键按下的次数,即:array[0]存放0号键按下的次数,array[1]存放1号键按下的次数,... data uchar array[16];void delay(uint a) // 延时a毫秒{ uint i;while(--a!=0){for(i=0;i<125;i++);}}void main(){uchar k,h;P0=0; //关闭共阴极数码管while(1){uchar h,l; //h:行 l:列P1=0xf0; //列全置高电平,行全置低电平,即列输入、行输出if(P1!=0xf0) //若有键按下则列会出现低电平{delay(10); //按键去抖h=P1&0xf0;P1=0x0f; //电平反转l=P1&0x0f; //读入行值while(P1!=0x0f);delay(10); //按键去抖k=h|l; //行值+列值,即按键值for(h=0;h<16;h++) //键盘处理if(key_a[h]==k) //根据键值查键位号{P0=seg7code_c[h];array[h]=array[h]+1; //保存当前按下的按键对应的数组元素增1if(array[h]>15) array[h]=0 ;P2=seg7code_a[array[h]]; //显示当前按下的按键累计次数}}}}实验四//2JP3 1、2脚分别连接3JP2 1、2脚//2JP2(P2口) 1-8脚分别连接4JP1 8-1脚,输出要显示数字的位码//2JP0连接4JP2,输出要显示数字的段码//2JP1(P1口)按管脚顺序连接5JP7,输入转换成的数字量//2JP3(P3口)按管脚顺序连接5JP2//5JP1 1-3分别连接11JP10 5-7脚//调节电位器11RW1,数码管显示输出的数字量#include<reg51.h>#include<intrins.h>//显示段码共阳,如要加上小数点则与上0x7f//显示内容为0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f、-code unsigned char seg7code_a[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88, 0x83,0xc6,0xa1,0x86,0x8e,0xbf};code unsigned char wm[8]={0X80,0X40,0X20,0X10,0X8,0X4,0X2,0x1}; //位码sbit START=P3^0;sbit OE=P3^1;sbit ADD0=P3^2;sbit ADD1=P3^3;sbit ADD2=P3^4;sbit ALE=P3^5;sbit EOC=P3^6;sbit CLK=P3^7;data unsigned int temp; //存放ad转换结果data unsigned int temp1[8]; //存放用于显示的数据,高3位显示ad转换结果,低3位显示电压值data unsigned int i=0; //对显示位数计数void time1() interrupt 1 //定时器T0服务程序{ CLK=~CLK; } //输出25kKHz方波void adzh(void ) //A/D转换程序{P3=0xC0; //原理:时序图_nop_;_nop_;ALE=1;START=1;_nop_;_nop_;ALE=0;START=0;_nop_;_nop_;while(EOC==0){;}OE=1;_nop_;temp=P1; //存转换结果}void xscl(void) //显示处理,得到要显示8位数据的段码{temp1[0]=temp/100; //转换结果数字量temp1[1]=temp%100/10;temp1[2]=temp%10;temp1[3]=16;temp1[4]=16;temp1[5]=((temp*100/51)/100); //转换结果对应的电压值temp1[6]=(temp*100/51)%100/10;temp1[7]=(temp*100/51)%10;}void delayms( unsigned char j) //延时j毫秒程序{ unsigned char k;while(j--){ for(k=0;k<125;k++){;}}}void dtxs(void) //动态显示{P2=0;if(i==5) {P0=seg7code_a[temp1[i]]&0x7f;} //送显示数字段码给P0口 else P0=seg7code_a[temp1[i]]; //加小数点P2=wm[i]; // 送显示数字位码段码给P2口i++;if(i>7) i=0;delayms(2); // 延时}main(){TMOD=0x02; //设置定时器模式,方式2T L0=0xee; //设置定时初值定时时间20usTH0=0xee; //设置定时重载值EA=1; //开定时器中断T0ET0=1;TR0=1; //定时器开始定时while(1){adzh(); //AD转换xscl(); //显示数据处理dtxs(); //数码管动态显示}}实验五/*;八路抢答器(主控用数码管显示,抢答者指示带有闪烁功能);2JP3 1、2脚分别连接3JP2 1、2脚;P1口(2JP1 )连接独立键盘输入(1JP1);从新抢答按钮P3.2(2JP3 3脚)连接1号开关1JP2 1脚,也可不连接,用复位按钮代替;抢答声音提示P3.3(2JP3 4脚)接嗡鸣器8JP4-2;P2口(2JP2 )连接发光管显示(JPP2);P0口(2JP0)连接数码管显示(4JP2);4JP3 2、3脚用短路片短接,注意实验后恢复原来的1、2脚短接*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit P3_3=P3^3; //嗡鸣器控制输出管脚,0响,1不响sbit P3_2=P3^2; //从新抢答,0键入,1无效//共阳极数码管显示段码,如要加上小数点则与上0x7fcode unsigned char seg7code_a[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88, 0x83,0xc6,0xa1,0x86,0x8e};code uchar jpsr[8]={1,2,4,8,0x10,0x20,0x40,0x80}; //当1-8号按键分别按下时,口P1取反对应的数值uchar display(uchar temp) //查输入按键的段码即抢答选手号对应的段码{uchar k;for (k=0;k<0x7;k++){ if(jpsr[k]==temp) break; }return(seg7code_a[++k]);}void delay100ms (uchar n) //延时n*100ms{uchar i, j, k,h;for(h=0;h<n;h++){i = 5;j = 52;k = 195;do{do{while (--k);} while (--j);} while (--i);}}main(){ u char input1;bit start;uint j;while(1){i nput1=P1; //临时保存8个按钮但前状态start=P3_2; //临时保存从新抢答按钮状态if(start==0) //是否键入从新抢答,0键入{P1=0xff; // P1、P2、P0口置1,恢复初始状态P2=0xff;P0=0xff;}if(~input1&&input1) //判断是否有选手抢答{P1=0; // 屏蔽其他选手P2=input1; //显示抢答选手P0=display(~input1) ; //调用display(),查抢答选手段码,送P0口显示 P3_3=0; //嗡鸣器响for(j=0;j<5;j++) //闪烁5次{delay100ms(1);P2=0xff; //灭delay100ms(1);P2=input1; //显示}P3_3=1; // 嗡鸣器停止发生}}}实验六//*****单片机stc11f60xe 12MHz晶振**////*******P0段选,P2位选**********////***P1.0:时分秒设置切换********////***P1.1:增1;P1.2:减1*******////2JP3 1、2脚分别连接3JP2 1、2脚//2JP0 1-8脚分别连接4JP2 1-8脚//2JP2 1-8脚分别连接4JP1 8-1脚//2JP1 1、2、3、5、7、8脚分别连接 1JP1 1、2、3、5、7、8脚//1JP1 1脚为时分秒设置切换键,1JP1 2脚增1键,1JP1 3脚为减1键//1JP1 5脚为电子钟与计时器切换键//1JP1 7脚为计时、暂停键,1JP1 8脚为计时器清零键#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff}; uint int_time; /*定义中断次数计数变量*/char second; /*秒计数变量*/char minute; /*分钟计数变量*/char hour; /*小时计数变量*/uint int_time1; /*定义中断次数计数变量*/char ms1; //毫秒计数1char second1; /*秒计数变量1*/char minute1; /*分钟计数变量1*/char hour1; /*小时计数变量1*/uchar temp=2; //调整时分秒设置变量bit temp1; //显示方式设置变量sbit P2_0=P2^0; //数码管位选sbit P2_1=P2^1;sbit P2_2=P2^2;sbit P2_3=P2^3;sbit P2_4=P2^4;sbit P2_5=P2^5;sbit P2_6=P2^6;sbit P2_7=P2^7;sbit P1_0=P1^0; //时分秒调整切换sbit P1_1=P1^1; //时钟加1sbit P1_2=P1^2; //时钟减1sbit P1_4=P1^4; //时钟、计时切换sbit P1_6=P1^6; //计时启停sbit P1_7=P1^7; //计时清零void T0_interserve(void) interrupt 1 using 0 /*定时器T0中断服务子程序,电子时钟部分*/ { int_time++; /*中断次数加1*/if(int_time==4000) /*若中断次数计满4000次*/{ int_time=0; /*中断次数变量清0*/second++; /*秒计数变量加 1*/}if(second==60) /*若计满60s*/{ second=0; /*秒计数变量清0*/minute++ ; /*分计数变量加 1*/}if(minute==60) /*若计满60分*/{ minute=0; /*分计数变量清0*/hour++; /*小时计数变量加1*/}if(hour==24){ hour++; /*小时计数计满24,将小时计数变量清0*/}}void T1_interserve(void) interrupt 3 /*定时器T1中断服务子程序,电子计时器用*/{ int_time1++; /*中断次数加1*/if(int_time1==800) //到200毫秒{ms1=ms1+20;int_time1=0;} //毫秒位加20if(ms1>=100){ms1=0;second1++;} //1000毫秒时 ms1清0、秒加1// if(int_time1==4000) /*若中断次数计满4000次*/// { int_time1=0; /*中断次数变量清0*/// second1++; /*秒计数变量加 1*/// }if(second1==60) /*若计满60s*/{ second1=0; /*秒计数变量清0*/minute1++ ; /*分计数变量加 1*/}if(minute1==60) /*若计满60分*/{minute1=0; /*分计数变量清0*/hour1++; /*小时计数变量加1*/}if(hour1==24){hour1++; /*小时计数计满24,将小时计数变量清0*/ }}void delay(int m) //延时程序,延时m*0.5毫秒{uint i;uint j;for (i=0;i<m;i++){for(j=0;j<500;j++);}}Display( ) /*显示时钟*/{P0=tab[hour/10];P2_7=1;delay(1);P2_7=0; //小时十位P0=tab[hour%10];P2_6=1;delay(1);P2_6=0; //小时个位P0=tab[10];P2_5=1;delay(1);P2_5=0; //"-"P0=tab[minute/10];P2_4=1;delay(1);P2_4=0; //分钟十位P0=tab[minute%10];P2_3=1;delay(1);P2_3=0; //分钟个位P0=tab[10];P2_2=1;delay(1);P2_2=0; //"-"P0=tab[second/10];P2_1=1;delay(1);P2_1=0; //秒十位P0=tab[second%10];P2_0=1;delay(1);P2_0=0; //秒个位}void Display1( ) /*显示计时*/{P0=tab[hour1/10];P2_7=1;delay(1);P2_7=0; //时十位P0=tab[hour1%10]&0x7f;P2_6=1;delay(1);P2_6=0; //时个位P0=tab[minute1/10];P2_5=1;delay(1);P2_5=0; //分十位P0=tab[minute1%10]&0x7f;P2_4=1;delay(1);P2_4=0; //分个位P0=tab[second1/10];P2_3=1;delay(1);P2_3=0; //秒十位P0=tab[second1%10]&0x7f;P2_2=1;delay(1);P2_2=0; //秒个位P0=tab[ms1/10];P2_1=1;delay(1);P2_1=0; //毫秒十位P0=tab[ms1%10];P2_0=1;delay(1);P2_0=0; //毫秒个位}void time() //计时设置{if(P1_6==0) //计时启停键按下{ delay(20) ; //去抖if(P1_6==0)TR1=~TR1; //TR1=0 停止计时,TR1=1 启动计时while(P1_6==0);delay(20) ; //去抖}if(P1_7==0) //计时清零{ms1=0; //毫秒计数变量second1=0; /*秒计数变量*/minute1=0; /*分钟计数变量*/hour1=0;TH1=6; /*给T0装初值*/TL1=6;int_time1=0; //中断次数}}void clk() //时钟设置{if(P1_0==0) //时分秒调整切换{delay(20); //去抖temp++;if(temp>2) temp=0;while(P1_0==0) ;delay(20); //去抖}if(P1_1==0) //递增调时分秒,temp=0、1、2{delay(20); //去抖switch (temp) //根据temp=0、1、2分别调整时、分、秒{case 0 : { hour++; if(hour>23) hour=0;}; break;case 1: {minute++;if(minute>59) minute=0;}; break;case 2: {second++;if(second>59) second=0;}; break;}while(P1_1==0) ;delay(20); //去抖}if(P1_2==0) //递减向调时分秒{delay(20); //去抖switch (temp) //根据temp=0、1、2分别调整时、分、秒{case 0 : { hour--; if(hour<0) hour=23;}; break;case 1: {minute--;if(minute<0) minute=59;}; break;case 2: {second--;if(second<0) second=59;}; break;}while(P1_2==0) ;delay(20); //去抖}}main(){ TMOD=0x22; /*设置定时器T0、T1为方式2定时*/ EA=1; /* 总中断开 */ET0=1; /* 允许T0中断 */TH0=6; /*给T0装初值*/TL0=6;TR0=1;int_time=0; /*中断次数、秒、分、时单元清0*/ET1=1; /* 允许T1中断 */TH1=6; /*给T1装初值*/TL1=6;TR1=0;int_time1=0; /*中断次数、秒、分、时单元清0*/second=36; //时钟初值minute=24;hour=12;while(1){ if(P1_4==0) //时钟、计时显示切换键{delay(20) ;if(P1_4==0)temp1=~temp1; //显示方式设置变量取反while(P1_4==0);delay(20) ;}if(temp1==0) //temp1==0 时钟显示、设置{Display( ); //显示时钟clk(); //时钟设置}if(temp1==1) //temp1==0 计时显示、设置{Display1( ); //显示计时 time(); //计时设置}}}附录3 实验电路设计要求实验电路设计要求:(1)分析附录1 单片机实验系统部分原理图,选择合适的电路模块,并根据此次实验要求的功能进行合理的电路模块间的电路连接。