重庆邮电大学自动化电气与工程类 工程实训实验报告单片机最小系统实验报告
- 格式:doc
- 大小:197.50 KB
- 文档页数:10
自动化电气与工程类工程实训实验报告课程名称:自动化电气与工程类工程实训实验学院(系):自动化学院专业:自动化班级:0811102学号: 2011212935 201121925学生姓名:陆正媚欧杰基于单片机最小系统设计一、实验任务和性能指标1.1实验任务学习掌握PROTEUS仿真软件的基本使用,熟悉KEIL软件的使用。
并且对单片机最小系统进行仿真设计,实现1.在电路上实现秒表计时功能。
2.同时实现计时器功能,显示时分秒。
3.用单片机及外围接口电路(键盘接口和显示接口电路)制作一个计算器,实现对键盘的扫描,并用八位数码管显示结果。
1.2性能指标秒表计时要求能精确至0.01秒,计时器要求能循环显示,格式为时—分—秒,并能实现时间的调整,包括时间的增加和减小,对键盘的扫描实现4*4矩阵键盘的扫描,并能循环显示。
二、系统设计方案按照系统设计的功能的要求,初步确定设计系统由单片机主控模块、八位数码管显示模块、键扫描接口电路共三个主要模块组成。
主控芯片使用AT89C52单片机,键盘电路采用4*4矩阵键盘电路,并附有三位功能选择键模块,显示模块采用八位一体共阳极数码管。
对于秒表,选择功能一,4*4键盘的加号按钮为秒表的开始按钮,按下时秒表开始计时,再按一次停止计时;减号为清零按钮,按下时秒表清零。
对于时钟,选择功能二,4*4键盘的“1”“2”分别是小时,分钟的增大调节,“4”“5”分别是小时,分钟的减小调节。
三、硬件系统设计1.单片机最小系统单片机最小系统就是支持主芯片正常工作的最小电路部分,包括主控芯片、复位电路和晶振电路。
主控芯片选取AT89C52芯片,因其具有良好的性能及稳定性,价格便宜应用方便。
晶振选取12MHz,晶振旁电容选取30pF。
采用按键复位电路,电阻选取10KΩ,电容选取10μF。
单片机最小系统硬件电路图如附件图一所示。
2.键盘接口电路P3.4-3.7分别接S1-S4。
S1-S4功能分别是功能选择,秒表开关,秒表终止,设置只需要对P3.4-P3.7进行低电平检测就可以看出是否有键按下。
单片机最小系统设计安装调试实训总结一、前言单片机是现代电子技术中应用最广泛的一种芯片,其能够实现各种各样的功能。
为了更好地学习和掌握单片机的应用,我们需要进行实际操作,设计单片机最小系统并进行安装调试。
二、单片机最小系统设计1. 硬件部分单片机最小系统由四个基本部分组成:单片机、时钟电路、复位电路和供电电路。
其中,时钟电路是最重要的部分,其作用是为单片机提供稳定的时钟信号。
复位电路可以保证在系统启动时单片机处于一个确定的状态。
供电电路则为整个系统提供所需的稳定电源。
2. 软件部分软件部分主要包括编程工具和编程语言。
常见的编程工具有Keil、IAR 等,编程语言可以选择C语言或汇编语言。
三、安装调试流程1. 硬件连接将单片机与其他器件按照设计图连接好,注意接线正确性和稳定性。
2. 软件设置打开编程工具,在设置中选择正确的芯片型号和下载器型号,并设置好相应参数。
3. 编写程序根据实际需求编写程序,并进行编译和下载。
4. 调试程序通过单步调试、断点调试等方法,逐步排除程序中的错误,确保程序正常运行。
四、实训感悟通过本次实训,我深刻认识到了单片机最小系统设计的重要性和复杂性。
在实际操作中,需要仔细检查每一个连接点,保证电路的稳定性和正确性。
同时,在编写程序时也需要考虑到各种可能出现的问题,并进行充分测试和调试。
五、总结单片机最小系统设计安装调试是单片机应用中不可或缺的一部分。
通过本次实训,我们掌握了相关知识和技能,并在实践中加深了理解。
在今后的学习和工作中,我们将更加注重实践操作,并不断提高自己的技能水平。
单片机最小系统设计安装调试实训总结单片机最小系统设计安装调试实训总结我在这篇文章中将对单片机最小系统设计安装调试实训进行深入探讨。
我们将从简单到复杂,从基础到进阶,全面了解这一主题。
在本文的结尾,我将分享我的观点和理解。
首先,让我们来介绍一下单片机最小系统设计的概念。
单片机最小系统是指包含处理器、存储器和必要的外设的最基本的硬件配置。
这个系统可以完成最简单的任务,如控制一个LED灯的开关。
了解单片机最小系统的设计原理和调试方法对于学习嵌入式系统编程非常重要。
在进行单片机最小系统设计之前,我们需要明确所使用的单片机的型号和芯片架构。
不同的单片机可能有不同的引脚配置和寄存器设置。
因此,在实际设计之前,我们需要仔细研究单片机的datasheet和用户手册,以确保正确地连接和配置引脚和寄存器。
接下来,我们开始设计单片机最小系统。
首先,我们需要将单片机与外部晶体振荡器相连,以提供时钟信号。
晶体振荡器为单片机提供精确的时钟信号,使其能够按照我们的预期进行计算和操作。
我们需要配置单片机的时钟模块,并将晶体振荡器与相应的引脚相连。
接下来,我们需要将单片机与外部电源相连,以为其提供工作电压。
不同的单片机可能有不同的电源要求,我们需要根据单片机的规格和datasheet来选择适当的电源电压和电源稳压模块。
我们还需要将电源的正负极与相应的引脚相连。
此外,为了与单片机进行交互,我们可能还需要将键盘、显示器、传感器或其他外部设备与单片机相连。
我们需要根据设备的规格和datasheet,选择适当的接口方式,并将其与单片机的引脚相连。
在连接过程中,我们要确保引脚的电平和信号都正确地连接。
完成了硬件的连接之后,接下来是调试阶段。
在调试过程中,我们需要使用相应的调试工具和软件,检查每个引脚的连接和信号是否正确,确保所有的硬件都能正常工作。
如果发现问题,我们需要逐个检查和排除可能的故障点,直到问题得到解决。
在安装和调试完单片机最小系统后,我们可以开始进行简单的程序编写和运行。
一、实验目的1. 熟悉单片机的基本结构和原理。
2. 掌握单片机的编程方法和调试技巧。
3. 培养单片机应用系统的设计能力。
4. 提高实际操作能力和团队协作精神。
二、实验内容本次实验实训主要围绕单片机应用系统展开,包括以下内容:1. 单片机最小系统搭建- 熟悉单片机的最小系统组成,包括复位电路、晶振电路、VCC、GND等。
- 掌握电路板焊接和调试方法。
2. LED流水灯实验- 学习使用51单片机进行简单的单片机应用系统硬件设计。
- 掌握单片机GPIO端口的使用方法。
- 通过编程实现LED灯的流水效果。
3. 按键控制LED灯实验- 学习使用按键输入控制LED灯的亮灭。
- 掌握按键去抖动技术。
4. LCD1602显示屏控制实验- 学习使用LCD1602显示屏显示文字和数字。
- 掌握LCD1602的初始化和显示控制方法。
5. 串口通信实验- 学习使用单片机串口进行通信。
- 掌握串口初始化和通信协议。
6. 温湿度传感器实验- 学习使用温湿度传感器获取环境温度和湿度信息。
- 掌握传感器数据读取和温度湿度计算方法。
7. 多功能密码锁实验- 学习使用单片机实现密码锁功能。
- 掌握按键输入、密码存储和匹配方法。
三、实验步骤1. 实验一:单片机最小系统搭建- 根据实验指导书,准备好实验器材,包括51单片机、电路板、焊接工具等。
- 按照电路图焊接电路,确保电路连接正确。
- 上电测试,观察LED灯是否亮起,确认电路工作正常。
2. 实验二:LED流水灯实验- 编写LED流水灯程序,使用51单片机GPIO端口控制LED灯的亮灭。
- 烧录程序到单片机,观察LED灯的流水效果。
3. 实验三:按键控制LED灯实验- 编写按键控制LED灯的程序,使用按键输入控制LED灯的亮灭。
- 烧录程序到单片机,测试按键控制功能。
4. 实验四:LCD1602显示屏控制实验- 编写LCD1602显示屏显示文字和数字的程序。
- 烧录程序到单片机,观察LCD1602显示屏的显示效果。
单片机最小系统实验设计报告一、实验目的(1)熟悉单片机最小系统的组成,上机步骤及调试方法;(2)加深理解C51汇编语言逻辑结构,能够使用汇编进行简单的程序编写;(3)将课上学到的理论知识联系实际,完成简单的电子控制系统;二、实验所需仪器及设备三、实验线路及原理下图为实验板电路图:(1)硬件组成及原理硬件组成:89S52单片机、8D锁存器74LS573两片、16选1译码器74LS154、16位七段数码显示器、轻触开关;原理:采用扫描显示,利用人眼视觉暂留效应,产生稳定的数码显示效果。
基于上述基本原理,利用单片机的P0口作为七段数码显示器的段选控制,通过两片8D 锁存器74LS573将段选控制分配到两组总共16位七段数码显示器上;单片机的P1.0-P1.3作为16位七段数码显示器的位选,而如何用单片机的4个管脚控制两组总共16位的七段数码显示器呢?这里使用的是1片16选1的译码器74LS154。
(2)软件原理程序流程图:显示主循环个按键完成设置、加、在按键子程序中以及加减闪烁的值,数据缓FLASH修改显示缓冲 区闪烁位在显示子程序中,只需负责将显示缓冲区的数据取出来进行显示即可按键子程序说明:KEYIN: JNB SSET,KEYIN1 ;判断SET键是否按下ACALL DELAY1 ;延时去抖动JNB SSET,KEYIN1JB SSET,$ ;判断SET键是否松开INC FLASH ;SET键按下调整闪烁标志位MOV R7,FLASHCJNE R7,#17,KEYIN1;判断FLASH是否已经移出16位MOV FLASH,#0HKEYIN1: MOV TEMP1,R0JNB SSUB,KEYIN2;判断减键是否按下ACALL DELAY1;延时去抖动JNB SSUB,KEYIN2JB SSUB,$ ;判断减键是否松开MOV A,FLASHADD A,#60HMOV R0,ADEC @R0;减键按下修改数据缓冲区对应位的值CJNE @R0,#0FFH,KEYIN2MOV @R0,#0BHKEYIN2: JNB AADD,KEYIN3;判断加键是否按下ACALL DELAY1;延时去抖动JNB AADD,KEYIN3JB AADD,$ ;判断加键是否松开MOV A,FLASHADD A,#60HMOV R0,AINC @R0; 加键按下修改数据缓冲区对应位的值CJNE @R0,#0CH,KEYIN3MOV @R0,#0KEYIN3: MOV R0,TEMP1RET显示子程序:DISP: MOV A,@R0ACALL TAB;查表取得由第一片74LS573送出的段代码的值 ACALL SEGU9;调用第一片74LS573数据锁存子程序MOV A,@R1ACALL TAB1;查表取得由第二片74LS573送出的段代码的值 ACALL SEGU10;调用第二片74LS573数据锁存子程序INC R0;调整显缓指针INC R1;调整显缓指针ACALL SENDBIT;调用位选子程序点亮16位7段LED中的两位 ACALL DELAY;延时CJNE R0,#58H,DISP;判断是否已完成16位显示MOV R0,#50H;显缓指针付初值MOV R1,#58H;显缓指针付初值RET主程序:FLAG EQU 20HFG1 BIT FLAG.0FG2 BIT FLAG.1DATABUF1 EQU 60HDATABUF2 EQU 61HDATABUF3 EQU 62HDATABUF4 EQU 63HDATABUF5 EQU 64HDATABUF6 EQU 65HDATABUF7 EQU 66HDATABUF8 EQU 67HDATABUF9 EQU 68HDATABUF10 EQU 69HDATABUF11 EQU 6AHDATABUF12 EQU 6BHDATABUF13 EQU 6CHDATABUF14 EQU 6DHDATABUF15 EQU 6EHDATABUF16 EQU 6FHFLASH EQU 70H ;TEMP0 EQU 71HTEMP1 EQU 72HTEMP2 EQU 73HTEMP3 EQU 74HTEMP4 EQU 75HSSET BIT P3.0; SET键AADD BIT P1.7; 加键SSUB BIT P1.6; 减键ORG 0000HAJMP MAINORG 0030HMAIN: CLR CSETB FG1MOV R0,#50HMOV R1,#58HMOV TEMP0,#0MOV TEMP2,#40MOV FLASH,#16MOV DATABUF1,#2MOV DATABUF2,#0MOV DATABUF3,#0MOV DATABUF4,#5MOV DATABUF5,#0BHMOV DATABUF6,#0MOV DATABUF7,#3MOV DATABUF8,#0BHMOV DATABUF9,#0MOV DATABUF10,#9MOV DATABUF11,#0BHMOV DATABUF12,#0MOV DATABUF13,#2MOV DATABUF14,#0BHMOV DATABUF15,#5MOV DATABUF16,#0 MAIN1: ACALL KEYINACALL GETDATAMOV A,FLASHCJNE A,#16,MAIN4AJMP MAIN3MAIN4: DJNZ TEMP2,MAIN2MOV TEMP2,#60CPL FG1MAIN2: JB FG1,MAIN3MOV A,FLASHADD A,#50HMOV R0,AMOV @R0,#0AHMOV R0,#50HMAIN3: ACALL DISPAJMP MAIN1GETDATA:MOV TEMP3,R0MOV TEMP4,R1MOV R0,#50H ;//显缓 MOV R1,#60H NEXT: MOV A,@R1MOV @R0,AINC R0INC R1CJNE R0,#60H,NEXTMOV R0,TEMP3MOV R1,TEMP4RETDISP: MOV A,@R0ACALL TABACALL SEGU9MOV A,@R1ACALL TAB1ACALL SEGU10INC R0INC R1ACALL SENDBITACALL DELAYCJNE R0,#58H,DISPMOV R0,#50HMOV R1,#58HRETKEYIN: JNB SSET,KEYIN1ACALL DELAY1JNB SSET,KEYIN1JB SSET,$INC FLASHMOV R7,FLASHCJNE R7,#17,KEYIN1MOV FLASH,#0HKEYIN1: MOV TEMP1,R0JNB SSUB,KEYIN2ACALL DELAY1JNB SSUB,KEYIN2JB SSUB,$MOV A,FLASHADD A,#60HMOV R0,ADEC @R0CJNE @R0,#0FFH,KEYIN2 MOV @R0,#0BHKEYIN2: JNB AADD,KEYIN3ACALL DELAY1JNB AADD,KEYIN3JB AADD,$MOV A,FLASHADD A,#60HMOV R0,AINC @R0CJNE @R0,#0CH,KEYIN3 MOV @R0,#0KEYIN3: MOV R0,TEMP1RETSENDBIT:MOV A,P1ANL A,#0F0HORL A,TEMP0INC TEMP0MOV P1,AMOV R2,TEMP0CJNE R2,#8H,SENDBIT1 MOV TEMP0,#0 SENDBIT1:RETSEGU9: CLR P1.4CLR P1.5MOV P2,ASETB P1.4MOV P1,#0AHRETSEGU10: CLR P1.4CLR P1.5MOV P2,ASETB P1.5MOV P1,#0AHRETTAB: ADD A,#1MOVC A,@A+PCRETDB 0C0H,0F9H,0A4HDB 0B0H,99H,92HDB 82H,0F8H,80HDB 90H,0FFH,0BFHTAB1: ADD A,#1MOVC A,@A+PCRETDB 03H,09FH,25HDB 0DH,99H,49HDB 41H,1FH,01HDB 09H,0FFH,0FDHDELAY1: MOV R7,#200TM2: MOV R6,#100TM1: DJNZ R6,TM1DJNZ R7,TM2RETDELAY: MOV R7,#4TMM2: MOV R6,#50TMM1: DJNZ R6,TM1DJNZ R7,TM2RETEND元件清单:C1:104C2:103C3:103C4:103C5:33pC6:33pC7:220u电解C8:103C9: 220u电解C10:103C11:4.7u电解D1--D8以及DP:LEDD9:1N4001Jmper:IDC-20Jpower:电源接插件Q1—Q9:9012R1—R16:75欧R17—R25:220欧R26—R30:1KRESET以及S1,S2,S3:轻触开关RP1—RP4:4XLED七段数码管RP5—RP6:10K排阻U1:89s52U2:74ls145U3:lm7805U9,U10:74ls573Y1:12M晶振。
目录摘要 (2)关键字 (2)系统分布图 (2)一、流水灯 (3)二、数码管 (5)三、矩阵键盘 (7)四、蜂鸣器 (9)五、时钟电路 (11)六、片外扩展 (12)七、LCD1602 (13)八、AD转换电压表 (15)九、DA控制波形 (17)实验总结 (19)附录1:系统总体布局 (19)附录2:本系统所用源程序 (19)单片机最小系统实验报告摘要:本系统以ATMEL 公司生产的AT89C51单片机为核心,包括软件设计和硬件设计两大类。
其中硬件设计包括两部分:一是系统配置,及按照系统要求配置外围电路,如键盘,数码管,流水灯,A/D转换和D/A转换等;二是系统扩展,即是单片机内部功能单元不能满足应系统用要求时,必须在片外给出相应的电路,如单片机的片外扩展。
而系统中的应用软件是根据功能要求设计的,每个应用软件都应可靠地实现系统的各种功能。
我们在设计电路时还充分地考虑了硬件电路的可扩展性和软件的可读性和可移植性。
我们的系统基本完成并能够执行实验所要求的各项功能。
关键字:AT89C51、发光二极管、液晶显示器、数码管、矩阵键盘、74HC573、片外RAM、OP07、ADC0809、DAC0832系统分布图:一、流水灯1、实验原理及实验结果:发光二极管加正向电压时导通,加反向电压时截止。
通过每次对P1口某个I/O口送入高电平使其发光,其余的I/O送低电平使其截止,每次送电平时调用延时0.2s。
通过不断调整高电平的位置,最后达到流水效果。
2、实验原理图:V 54、实验遇到的问题:同一个批次的发光二极管,按照相同的方法连接,在通电时我们发现有一个二极管发光很暗,其余5个都很亮。
我们一直想不通这是为什么,故留在报告里,请大家指点。
(我们猜想是那个二极管接触不良,未证实)5、小结:流水灯是我们做的第一个实验。
在这个实验里我们学到了:1、发光二极管的工作原理及其使用方法(总体原则是保证每个二极管正常发光);2、直流稳压电源的制作方法(整流、滤波、稳压);3、电路板的焊接方法(不要裸线焊接,防止短路)。
自动化电气与工程类工程实训实验报告——单片机最小系统实验报告基于PROTEUS仿真平台的51系列单片机最小系统的设计、应用实验一、实验目的和性能指标1、实验目的学习掌握PROTEUS仿真软件的基本使用,熟悉KEIL软件的使用。
并且对单片机最小系统进行仿真设计,实现1.在电路上实现秒表计时、暂停、清零功能。
2.同时实现计时器功能,显示时、分、秒,能够修改时、分、秒。
3.用单片机及外围接口电路实现对键盘的扫描,并用八位数码管显示结果。
2、性能指标秒表计时要求能精确至0.01秒,计时器要求能循环显示,格式为时—分—秒,并能实现时间的调整,包括时间的增加和减小,对键盘的扫描实现4*4矩阵键盘的扫描,并能循环显示。
二、硬件系统设计STC89c51单片机的硬件资源包含:一个8位CPU、振荡器和时钟电路、至少128字节的内部数据存储器,可寻址外部程序存储器和数据存储器个64k字节,21个特殊功能寄存器,4个并行I/O接口,2个16位定时/计数器,至少5个中断源,提供两级中断优先级,可实现两级中断服务程序嵌套。
具有有位寻址功能,有较强的布尔处理能力。
各功能单元(包括IO端口和定时器/计数器等)都由特殊功能寄存器(SFR)集中管理。
中央处理器、ROM、RAM、定时/计数器和I/O口等,各个功能由内部的总线连接起来,从而实现数据通信。
单片机最小系统主要由电源、复位、振荡电路以及扩展部分等部分组成。
1、单片机最小系统单片机最小系统就是支持主芯片正常工作的最小电路部分,包括主控芯片、复位电路和晶振电路。
主控芯片选取AT89C52芯片,因其具有良好的性能及稳定性,价格便宜应用方便。
晶振选取12MHz,晶振旁电容选取30pF。
采用按键复位电路,电阻分别选取10KΩ,电容选取10μF。
2、键盘接口电路共计16个按键,采用4*4矩阵键盘,键盘的行和列之间都有公共端相连,四行采用端口P3.0~P3.3,四列采用端口P3.4~P3.7,通过8个端口的的高低电平完成对矩阵键盘的控制和扫描。
单片机最小应用系统制作实训报告《单片机最小应用系统制作实训报告》一、实训目的和背景单片机是嵌入式系统的核心,其应用广泛,包括家电控制、智能家居、工业控制等。
为了提高学生对单片机的理论和实践掌握能力,本次实践任务是制作一个单片机最小应用系统,以培养学生的创新意识和动手能力。
二、实训内容和步骤1.实训准备根据实验要求,选取合适的单片机型号,并准备相应的开发板、开发软件和实验器材。
2.系统设计根据实训要求,设计单片机系统的硬件和软件结构。
硬件部分包括单片机、外围设备(如按键、LED等)的连接方式和引脚分配;软件部分包括初始化设置和主程序的设计。
3.硬件搭建根据设计方案,将单片机和外围设备连接起来,并进行电路布线和焊接等工作。
4.软件编程使用开发软件对单片机进行编程,实现系统的功能。
根据设计方案,编写初始化设置的代码和主程序的代码,并进行调试和修改。
5.系统测试将制作好的单片机应用系统与外围设备连接,进行功能测试和性能评估。
调试系统,确保其各项功能正常运行,同时测试系统的稳定性和可靠性。
6.实训总结根据实训经验,总结制作单片机最小应用系统的过程中遇到的问题和解决方法,总结经验教训,并提出改进意见。
三、实训结果和体会通过实践制作单片机最小应用系统,我收获了许多经验和体会。
首先,在系统设计阶段,我深入了解了单片机的硬件和软件结构,对于系统连接和引脚分配有了更深入的理解。
其次,在硬件搭建和焊接过程中,我学会了认真仔细地进行电路布线和焊接,确保电路的正确连接和稳定性。
此外,编程过程中,我掌握了单片机的初始化设置和主程序设计的方法,提高了自己的编程能力。
通过实训测试,我发现单片机最小应用系统能够正常运行,实现了预期的功能,并且稳定性和可靠性良好。
同时,我也意识到在实践过程中,遇到问题是很正常的,关键是要善于思考和解决问题,通过调试和修改,最终找到正确的解决方案。
总之,通过这次实训,我不仅学到了单片机的基本原理和应用技术,更重要的是培养了自己的动手能力和创新意识。
一、实验目的
1、熟悉电路原理图的操作工具;
2、提高学生绘制电路原理图的能力;
3、熟悉元件属性的设置
二、实验内容
1、打开一个原理图的空白文档,选择B型图纸,标题栏为标准型;
2、添加常见的元件库如下:
DALLAS MICROPROSESSOR .DDB
INTEL DATABOOKS.DDB
PROTEL DOS SCHEMATIC LIBRARY .DDB
MISCELLANEOUS DEVICES .DDB
3、添加原理图中所需要的元件,各元件在库中的名称如下:
单片机:DS80C320MCG(40) 封装:DIP-40
电阻:RES2 封装:AXIAL0.3
锁存器:74LS373 封装:DIP-20
27C256:27C256 封装:DIP-30
电容: CAP 封装:RAD0.3
电解电容:CAPACITOR 封装:RAD0.3
开关:SW-PB 封装:RAD0.3
4、设置元件的属性,如元件的封装、流水序号等;
5、用导线、网络标号、总线和总线的输入输出端口等工具连接线路,
6、正确放置电源和地符号;
7、对绘制好的原理图进行保存。
绘制的电路图如图1:
图1 局部电路图如下:
图2
图3
图4
三、思考题
1、网络标号的作用是什么?
2、总线和总线输入输出端口有电气意义吗?。
单片机最小系统实验报告
实验目的:
本实验目的是探究微处理器系统最小化原理并实际运用该原理设计一个基于单片机主控的最小系统,用来分析各部件之间的作用以及学习计算机系统的操作。
实验设备:
1.单片机主芯片:亚宝半导体C02晶振
2.外部电路元器件:2个8位数据输入输出口,4个4位数据的输入输出口,4个开关,10K水银温度计,7个键盘,1个指示灯。
实验步骤:
1. 设计单片机最小系统电路:根据实验指导书绘制单片机最小系统电路图,接线涉及到的所有元器件,并标注出每个元器件的引脚号。
2. 编写相关的程序:根据实验的要求,编写相关的CH02语言程序来完成IO口的输入输出功能。
3. 上传程序:将编写的程序用串口烧录到单片机内存中
4. 测试程序:检查所有的管脚,检查程序的正确性,根据程序要求使用按键输入信号,测试输出结果。
实验结果:
在实验过程中,我发现单片机最小系统电路设计较为简单,只需要有基本的电路和编程知识,即可完成本次实验。
经过多次修改和测试,我可以得出程序正确运行的结论。
经过本次实验,我深刻理解了计算机系统的结构,学会了io口的编程,还认识了有关电子元器件的基本用途和功能,研究了系统的最小化原理,以及其背后的道理。
更重要的是,本次实验提高了我的动手能力和分析问题的能力。
自动化电气与工程类工程实训实验报告——单片机最小系统实验报告基于PROTEUS仿真平台的51系列单片机最小系统的设计、应用实验一、实验目的和性能指标1、实验目的学习掌握PROTEUS仿真软件的基本使用,熟悉KEIL软件的使用。
并且对单片机最小系统进行仿真设计,实现1.在电路上实现秒表计时、暂停、清零功能。
2.同时实现计时器功能,显示时、分、秒,能够修改时、分、秒。
3.用单片机及外围接口电路实现对键盘的扫描,并用八位数码管显示结果。
2、性能指标秒表计时要求能精确至0.01秒,计时器要求能循环显示,格式为时—分—秒,并能实现时间的调整,包括时间的增加和减小,对键盘的扫描实现4*4矩阵键盘的扫描,并能循环显示。
二、硬件系统设计STC89c51单片机的硬件资源包含:一个8位CPU、振荡器和时钟电路、至少128字节的内部数据存储器,可寻址外部程序存储器和数据存储器个64k字节,21个特殊功能寄存器,4个并行I/O接口,2个16位定时/计数器,至少5个中断源,提供两级中断优先级,可实现两级中断服务程序嵌套。
具有有位寻址功能,有较强的布尔处理能力。
各功能单元(包括IO端口和定时器/计数器等)都由特殊功能寄存器(SFR)集中管理。
中央处理器、ROM、RAM、定时/计数器和I/O口等,各个功能由内部的总线连接起来,从而实现数据通信。
单片机最小系统主要由电源、复位、振荡电路以及扩展部分等部分组成。
1、单片机最小系统单片机最小系统就是支持主芯片正常工作的最小电路部分,包括主控芯片、复位电路和晶振电路。
主控芯片选取AT89C52芯片,因其具有良好的性能及稳定性,价格便宜应用方便。
晶振选取12MHz,晶振旁电容选取30pF。
采用按键复位电路,电阻分别选取10KΩ,电容选取10μF。
2、键盘接口电路共计16个按键,采用4*4矩阵键盘,键盘的行和列之间都有公共端相连,四行采用端口P3.0~P3.3,四列采用端口P3.4~P3.7,通过8个端口的的高低电平完成对矩阵键盘的控制和扫描。
通过对16个按键进行编码,从而得到键盘的口地址,我们就可以得到是哪个键按下,从而完成键盘的功能。
3、数码管显示电路采用八位一体的数码管对计算数据和结果进行显示,这里选取共阴极数码管,使用P0口对数码管进行段选控制,用P2口对数码管进行位选控制,方便实现动态显示的效果。
三、系统设计方案按照系统设计的功能的要求,初步确定设计系统由单片机主控模块、八位数码管显示模块、键扫描接口电路共三个主要模块组成。
主控芯片使用AT89C52单片机,键盘电路采用4*4矩阵键盘电路,并附有三位功能选择键模块,显示模块采用八位一体共阴极数码管。
51系列单片机定时器的结构及工作原理:组成:两个16位的定时器T0和T1,以及他们的工作方式寄存器TMOD和控制寄存器TCON等组成。
内部通过总线与CPU相连。
定时器T0和T1各由两个8位特殊功能寄存器TH0、TL0、TH1、TL1构成。
工作方式寄存器TMOD:用于设置定时器的工作模式和工作方式;控制寄存器TCON:用于启动和停止定时器的计数,并控制定时器的状态;单片机复位时,两个寄存器的所有位都被清0。
四、软件仿真单片机最小系统电路图如图五、程序#include<reg52.h>#define uchar unsigned char #define uint unsigned short int sbit p14=P1^4; sbit p15=P1^5;sbit p16=P1^6;sbit p17=P1^7; uchar code table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0,0x40};//定义显示段码uchar num,temp;short int x1=0,x2=0;ucharoperateFlag=0,a=1,b=1,c=1,d=1,e=1,f=1 ,g=1,h=1;bit result=0,keyDown=0,affirm=0;uchartime=0,seconds=0,minutes=0,hours=0,c hoice=0;void delay(uchar k)//定义延时函数{uchar i,j;for(i=k;i>0;i--)for(j=124;j>0;j--);}void TIME0_INT() //初始化定时器0{TMOD=0x01;TH0=(65536-10000)/256;TL0=(65536-10000)%256;a=b=d=e=g=h=0;c=f=16;EA=1;ET0=1;TR0=1;}void timer0() interrupt 1//定时器中断0服务函数{TH0=(65536-10000)/256;TL0=(65536-10000)%256;time++;}void AllInitial()//每种功能的初始化{if(choice==0||affirm==0){a=h=16;b=c=g=f=16;d=0;e=choice;EA=0;}elseif(choice==1&&affirm==1){h=g=f=e=0;a=b=c=d=16;time=seconds=minutes=hours=0;}elseif(choice==2&&affirm==1){time=seconds=minutes=hours=0;c=f=17;EA=1;}elseif(choice==3&&affirm==1){a=b=c=d=e=f=g=16;h=num=0;EA=0;}}char keyscan(){keyDown=0;P3=0xfe;temp=P3;temp=temp&0xf0;while(temp!=0xf0){delay(5);while(temp!=0xf0){temp=P3;switch(temp){case 0xee:num=1;break;case 0xde:num=2;break;case 0xbe:num=3;break;case 0x7e:operateFlag=0x01;break;}while(temp!=0xf0) //判断按键是否松开{temp=P3;temp=temp&0xf0;}keyDown=1;}}P3=0xfd;temp=P3;temp=temp&0xf0;while(temp!=0xf0){delay(5);while(temp!=0xf0){temp=P3;switch(temp){case 0xed:num=4;break;case 0xdd:num=5;break;case 0xbd:num=6;break;case 0x7d:operateFlag=0x02;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}keyDown=1;}}P3=0xfb;temp=P3;temp=temp&0xf0;while(temp!=0xf0){delay(5);while(temp!=0xf0){temp=P3;switch(temp){case 0xeb:num=7;break;case 0xdb:num=8;break;case 0xbb:num=9;break;case 0x7b:break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}keyDown=1;}}P3=0xf7;temp=P3;temp=temp&0xf0;while(temp!=0xf0){delay(5);while(temp!=0xf0){temp=P3;switch(temp){case 0xe7:num=0;break;case 0xd7:num=0;break;case 0xb7:break;case 0x77:break;}while(temp!=0xf0){temp=P3; temp=temp&0xf0;}keyDown=1;}}return num;}void smg(uchar a, uchar b,uchar c, uchar d, uchar e,uchar f, uchar g, uchar h){P0=0;P2=0xfe;P0=table1[a];delay(1);P2=0xff;P0=0;P2=0xfd;P0=table1[b];delay(1);P2=0xff;P0=0;P2=0xfb;P0=table1[c];delay(1);P2=0xff;P0=0;P2=0xf7;P0=table1[d];delay(1);P2=0xff;P0=0;P2=0xef;P0=table1[e];delay(1);P2=0xff;P0=0;P2=0xdf;P0=table1[f];delay(1);P2=0xff;P0=0;P2=0xbf;P0=table1[g];delay(1);P2=0xff;P0=0;P2=0x7f;P0=table1[h];delay(1);P2=0xff;}void jishu(uchar num1) {if(h==0&g==16){h=num1;} else if(g==16) {g=h;h=num1; }else if(f==16) {f=g;g=h;h=num1; }else if(e==16) {e=f;f=g;g=h;h=num1; }else if(d==16) {d=e;e=f;f=g;g=h;h=num1; }else if(c==16) {c=d;d=e;e=f;f=g;g=h;h=num1; }else if(b==16) {b=c;c=d;d=e;e=f;f=g;g=h;h=num1;}else if(a==16){a=b;b=c;c=d;d=e;e=f;f=g;g=h; h=num1;}else{a=b;b=c;c=d;d=e;e=f;f=g;g=h; h=num1;}}void calculator(){num=keyscan();if(keyDown==1){jishu(num);num=0;}smg(a,b,c,d,e,f,g,h);}//*******秒表程序********** void mbcs(){num=keyscan();if(keyDown==1){if(operateFlag==0x01){EA=!EA;}if(operateFlag==0x02) time=seconds=minutes=0;}if(time>=100){time=0;++seconds;if(seconds==60){seconds=0;++minutes;if(minutes==60){minutes=0;}}}h=time%10;g=time/10;f=seconds%10;e=seconds/10;a=b=c=d=16;smg(a,b,c,d,e,f,g,h);}//********时钟程序********** void szcs(){num=keyscan();if(keyDown==1){if(num==1)++hours;else if(num==4)--hours;else if(num==2)++minutes;else if(num==5)--minutes;else if(num==3)++seconds;else if(num==6)--seconds;num=0;}if(time==100){seconds++;time=0;}//增长溢出if(seconds==60){minutes++;seconds=0;if(minutes==60){++hours;minutes=0;if(hours>=24)hours=minutes=seconds=0;}}if(minutes==60){++hours;minutes=0;if(hours>=24)hours=minutes=seconds=0;}if(hours>=24)hours=minutes=seconds=0;//消减溢出if(seconds==255){seconds=59;--minutes;}if(minutes==255){minutes=59;--hours;}if(hours==255){hours=minutes=seconds=0;}a=hours/10;b=hours%10;d=minutes/10;e=minutes%10;g=seconds/10;h=seconds%10;smg(a,b,c,d,e,f,g,h);}void singal(int wei,int duan,int timeSpan){P0=0;P2=wei;P0=duan;delay(timeSpan);P2=0xff;}void mainKey()//扫描按键的功能变化{if(p14==0){delay(5);if(p14==0){choice=1;e=choice;}while(!p14);}else if(p15==0){delay(5);if(p15==0){choice=2;e=choice;}while(!p15);}else if(p16==0){delay(5);if(p16==0){choice=3;e=choice;}while(!p16);}if(p17==0){delay(5);if(p17==0&&choice!=0){affirm=!affirm;AllInitial();}while(!p17);}smg(a,b,c,d,e,f,g,h);}void main(){TIME0_INT();EA=0;AllInitial();while(1) //主循环{mainKey();if(affirm==1){switch(choice){case 1:mbcs();break;case 2:szcs();break;case 3:calculator();break;}}}}软件设计好后,在KEIL上面进行编译,把编译得到的hex文件加载到Proteus 里面进行仿真,得到Proteus仿真电路图如图。