STC 12C5A60S2芯片的实验板报告
- 格式:doc
- 大小:803.50 KB
- 文档页数:30
基于STC12C5A60S2多功能通信开发板设计
引言
随着通信技术日新月异,无线通信应用领域越来越广泛,如无线远程家庭防盗系统、无线车载终端智能防盗系统、无线温度采集系统、短距离无线蓝牙系统、ZigBee无线网络通信系统等应用。
然而,一直以来,高校在教学中讲解现代无线通信的多种应用时,基本上都是停留在书本上的原理、理论,学生也只能很抽象地了解这些应用案例;即使有机会接触实际硬件时,但由于硬件平台要求学生的知识起点很高,大部分学生也只能是看看实验现象,不能很好地掌握它。
出现这种情况有以下原因:通信技术变化太快,新的技术不断涌现,而学校的很多硬件设备都是停留于5年前甚至10年前,更新太慢;可能有部分学校购置了最新的无线通信实验平台,但是由于没有考虑这些新的设备是否适合相关专业学生的接受能力,所以教学效果不好,学生对知识的应用仅仅停留在感性的认识上。
鉴于此,结合多年的实践教学经历,根据通信专业学生的特点,自行设计了一套多
功能通信开发板(可以扩展),用于专业综合实践、毕业实践、创新实践等课程;考虑到本专业学生先前学过51系列单片机,开发板CPU芯片选用STC12C5A60S2;利用开发板可直接完成以下综合项目:基于GPRS网络的手机短信远程控制小灯;基于GPRS网络的温湿度数据采集;基于GPRS网络的家庭防盗系统设计;基于nRF905的无线温度数传;多功能万年历设计(可以用无线按键控制实现)。
另外,本多功能开发板有扩展引脚,方。
智能循迹避障小车设计报告学院名称:机械工程学院专业班级:光信息1202学生姓名:石云杰、李志岗、李召旭学生学号:**********、54、46摘要根据小车各部分功能,模块化硬件电路,并调试电路。
将调试成功的各个模块逐个地“融合”成整体,再进行软件编程调试,直到完成小车,使小车智能地循迹、避障。
利用红外线传感器检测黑线与障碍物,当左边传感器检测到黑线时,小车往左边偏转,右边的传感器检测到黑线时,小车往右边偏转。
当前边用于避障的传感器检测到障碍物时,小车往左偏转避开障碍物后,回到原轨道。
以STC12C5A60S2单片机为控制芯片控制电动小车的速度及转向,从而实现自动循迹避障的功能。
其中小车驱动由L298N驱动电路完成,速度由单片机控制。
关键词:AT89S52单片机; L298N;红外对管;智能小车一、背景随着汽车工业的迅速发展,关于汽车的研究也就越来越受人关注。
全国电子大赛和省内电子大赛几乎每次都有智能小车这方面的题目,全国各高校也都很重视该题目的研究。
自第一台工业机器人诞生以来,机器人的发展已经遍及机械、电子、冶金、交通、宇航、国防等领域。
近年来机器人的智能水平不断提高,并且迅速地改变着人们的生活方式。
人们在不断探讨、改造、认识自然的过程中,制造能替代人劳动的机器一直是人类的梦想。
随着科学技术的发展,机器人的感觉传感器种类越来越多,其中视觉传感器成为自动行走和驾驶的重要部件。
视觉的典型应用领域为自主式智能导航系统,对于视觉的各种技术而言图像处理技术已相当发达,而基于图像的理解技术还很落后,机器视觉需要通过大量的运算也只能识别一些结构化环境简单的目标。
视觉传感器的核心器件是摄像管或CCD,目前的CCD已能做到自动聚焦。
但CCD传感器的价格、体积和使用方式上并不占优势,因此在不要求清晰图像只需要粗略感觉的系统中考虑使用接近觉传感器是一种实用有效的方法。
机器人要实现自动导引功能和避障功能就必须要感知导引线和障碍物,感知导引线相当给机器人一个视觉功能。
基于STC12C5A60S2单片机的水弹感应靶【摘要】本文介绍了基于STC12C5A60S2单片机的水弹感应靶系统的设计与研究。
在分析了研究背景和目的意义,明确了本文的研究重点。
接着,详细介绍了STC12C5A60S2单片机的特点和功能,为后续实现水弹感应靶提供了技术支持。
设计原理部分解析了水弹感应靶的工作原理和实现方法,系统硬件设计和软件设计部分展示了系统的具体实现过程。
在系统性能分析中,评估了系统的稳定性和准确性。
结论部分展望了水弹感应靶在射击训练和娱乐领域的应用前景,提出了存在问题与展望,总结了本文的研究工作。
通过本文的研究,为水弹感应靶的进一步发展提供了参考和指导。
【关键词】STC12C5A60S2单片机、水弹感应靶、硬件设计、软件设计、系统性能分析、应用前景、存在问题、展望、研究工作总结。
1. 引言1.1 研究背景水弹感应靶是一种新型的靶射击设备,它能够通过感应水弹的命中情况来实现自动计分和反馈。
随着射击运动的普及和发展,人们对射击训练的需求也越来越大。
传统的靶射击方式存在着固定目标、无法实时反馈等问题,严重制约了射击训练的效果和乐趣。
开发一种能够提高射击训练效果、增加趣味性的新型靶射击设备就显得尤为重要。
目前市面上已经有一些智能靶射击系统,但大多数价格昂贵,且功能繁杂,操作复杂。
基于STC12C5A60S2单片机的水弹感应靶正是针对这一问题而设计的,它采用了简单而稳定的单片机控制技术,具有低成本、易操作、高精度等特点,可以很好地满足射击训练的需求。
利用STC12C5A60S2单片机设计水弹感应靶具有重要的研究意义和应用价值。
通过本研究,将为射击训练提供一种新的解决方案,有望推动射击运动的发展,提高射击爱好者的训练效果,为靶射击领域的发展做出贡献。
1.2 目的和意义水弹感应靶是一种用于射击训练和娱乐活动的设备,能够感知水弹击中靶子的位置并进行准确计数。
本文旨在利用STC12C5A60S2单片机作为控制核心,设计一款高性能的水弹感应靶系统。
目录第一章硬件部分 (1)1.1 主要芯片介绍 (1)1.1.1 AT89S52单片机 (1)1.1.2 MAX232芯片 (3)1.1.3 74HC573芯片 (3)1.1.4 DS12C887实时时钟芯片 (4)1.1.5 LCD1602液晶显示器 (5)1.2 硬件电路板 (7)第二章软件部分 (8)2.1 Keil软件 (8)2.2 C语言调试程序 (8)2.2.1 跑马灯主要程序 (8)2.2.2 定时1s闪烁,从p1口输出电频 (10)2.2.3 液晶1602显示姓名学号主要程序 (11)2.2.4 键盘数显示主要程序 (14)2.2.5 LCD1602显示实时温度主要程序 (20)2.2.6 A/D转换 (26)2.3 开发板应用程序键盘密码锁 (32)2.3.1 密码锁功能介绍及主程序 (32)第三章总结 (36)第一章硬件部分1.1 主要芯片介绍1.1.1 AT89S52单片机1.概述AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
2.引脚说明图1-1 AT89S52单片机芯片VCC : 电源。
一、课程设计基本情况介绍1.1课程设计的基本目的与任务本课程设计旨在驾驭本专业学生理论指导实践能力以及电子产品工程设计与开发能力。
本实践课所要达到的主要目的是:1、通过本次课程设计,是对学生综合能力的检,提高学生综合运用专业知识,强化单片机应用系统设计与防震能力。
2、本次课程设计是在生产实习所完成的“单片机核心板+电子钟模块+MP3模块+RFID模块+无线传输模块+GPS模块+脉搏传感模块”的基础上设计该硬件系统的工作程序。
1.2课程设计的基本内容1、在生产实习设计单片机硬件系统的基础上,设计相应的应用软件系统。
2、在LCD1602上显示学号程序设计。
3、基于DS1302的实时时钟软件设计。
4、基于DS18B20的温度测量软件设计。
5、基于TL1838A的红外遥控解码软件设计。
6、设计应用软件系统框图和流程图,完成所设计软件的调试。
1.3课程设计的教学要求1、通过资料查阅及学习了解单片机应用系统的软件设计方法及单片机编程、软硬件联机调试技巧。
2、独立设计并编写下列应用程序:(1)LCD1602学号显示程序;(2)DS1302实时时钟程序;(3)DS18B20温度测量程序;(4)TL1838A红外遥控解码程序;3、独立完成所设计程序与硬件系统的联机仿真。
二、整机系统框图(硬件、软件)该设计方案是以STC12C5A60S2单片机为核心,采用LCD液晶屏幕显示模块、实时时钟模块、温度测量模块、红外遥控解码等模块所构建的系统,能在LCD1602液晶屏上显示当前的日期(年、月、日)、时间(时、分、秒)数据、当前环境温度值和红外遥控解码值。
用户可通过遥控器或单片机核心板上的按键来进行日期和时间的设置。
本系统设计大部分功能由软件来实现,电路简单明了,系统稳定性也得到大大提高。
1、总体硬件设计框架图:2、总体软件设计框架图///////三、整机硬件电路原理图(见99SE图)1、核心板电路原理图2、蜂鸣器驱动电路3、按键电路4、单片机复位电路5、LCD1602液晶显示电路6、电子钟模块接口电路四、软件系统设计思想////////////五、系统软件资源分配表(调试程序、工作程序)//////////////六、显示学号的调试程序流程图、程序源代码1、程序流程图///////////2、程序源代码/*************LCD1602***************************/#include<reg51.h>#include<intrins.h>sbit RS=P3^7;sbit RW=P3^6;sbit E=P2^7;sbit BF=P0^7;#define LCD_Data P0/**************函数声明**********************/void Lcd_Int(void);void huanying_show(void);void dongtai_show(void);char string1[]=" LIU JING ";//LIU JINGchar string2[]=" 080104020013 ";//080104020013/***************函数功能:主函数***************************/ void main(){Lcd_Int(); //1602初始化while(1){huanying_show();dongtai_show();}}/*********************************************函数功能:延时1ms注:不同单片机不同晶振需要对此函数进行修改*********************************************/void Lcd_delay1ms(){unsigned char i,j;for(i=0;i<90;i++)for(j=0;j<33;j++);}/*********************************************函数功能:延时若干毫秒入口参数:n*********************************************/void Lcd_delay(unsigned int n){unsigned int i;for(i=0;i<n;i++)Lcd_delay1ms();}/*********************************************函数功能:判断液晶模块的忙碌状态返回值:result。
STC12C5A60S2
现代化进程加快,越来越多的改成建筑拔地而起,电梯成了人们主要的上楼代步工具,电梯安全就尤为重要,我们应该重视电梯安全来有效保障我们的生命财产安全。
目前我们的电梯上配备的保护装置有限速系统、行程极限系统、缓冲器系统、制动器系统。
文章是通过加速度传感器和红外测距传感器,计算和测量出电梯的加速度和速度,通过两个指标监测电梯的运行状态,在发生故障时通过电机控制液压系统使电梯制动,有效保障乘客的生命财产安全。
系统的总体框图如图1 所示,系统以STC12C5A60S2-351 单片机作为控制器,红外测距传感器和加速传感器将测得数据发送到单片机中,红外测距传感器测量电梯的速度,通过单片机进行AD 转换后,根据时间差算出电梯此时的速度,加速度传感器可以测量电梯此时的重力加速度,单片机判断轿厢加速度和速度是否超过预设值,假设超过预设值,单片机会通过L9110 电机模块来控制电机的正反转,从而控制液压系统转达到制动效果。
图1 系统总体框图。
附页:
一、学生实验报告
14)8通道,10位高速ADC,速度可达25万次/秒,2路PWM还可当2路D/A使用。
15)2通道捕获/比较单元(PWM/PCA/CCP),也可用来再实现2个定时器或2个外部中断(支持上升沿/下降沿中断)。
16)4个16位定时器,兼容普通8051的定时器T0/T1,2路PCA实现2个定时器。
17)可编程时钟输出功能,T0在P3.4输出时钟,T1在P3.5输出时钟,BRT 在P1.0输出时钟。
18)硬件看门狗(WDT)。
19)高速SPI串行通信端口。
20)全双工异步串行口(UART),兼容普通8051的串口。
21)通用I/O口(36/40/44个),复位后为:准双向口/弱上拉(普通8051传统I/O口)。
可设置成四种模式:准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏。
每个I/O口驱动能力均可达到20mA,但整个芯片最大不得超过120mA。
二、学生参加实验室开放项目的体会与建议。
基于STC12C5A60S2单片机的温度监测系统设计摘要在机械、化工、纺织等行业,随着生产规模的不断扩大,以及对生产过程集中监控的迫切要求,现场总线技术应运而生,并成为了当今测控领域研究的热点之一。
在实际的生产实验环境下,由于系统内部和外界的热量交换是很难控制的,而且其他干扰因素也是无法去精确计算的,因此温度量的变化往往受到不可精确预计的外界环境扰动的影响。
但是正常工业生产过程中,对生产中的温度要求又是相对精确和苛刻的,工业生产中经常要保持反应炉中保持一定的温度,来促进反应的持续快速进行,同时,以前的温度控制大多是人工通过仪表的显示来调节温度的模式,然而人工控制温度的精确度不高,而且反应不灵敏,存在较大误差,因此需要更好的测温控温方法。
Modbus协议作为现场总线的一种,以其开发成本低,简单易用等诸多优点己被工业领域广泛接受。
温度作为工业中重要的测量参数之一,本课题选择了温度作为测量的对象,并设计了基于Modbus协议的温度测控节点。
本设计采用TC1047A传感器采集现场温度,由STC12C5A60S2单片机进行AD 转换和Modbus协议通讯。
通讯的物理层采用RS485接口,并增加了光电隔离、抗雷击和短路保护等功能。
最后实现了单个节点和PC机的Modbus协议通讯,并通过控制蜂鸣器和继电器来模拟工业现场控制。
本文分别从硬件和软件上阐述了该温度测控节点的实现方法。
关键词温度测控Modbus协议RS485 STC12C5A60S2The Design of Temperature Measuring and ControllingNodeBased to Modbus ProtocolABSTRACTWith the continuous expansion of production scale, and the urgent requirements in centralized monitoring of the production process in mechanical, chemical, textile and other industries. Fieldbus technology came into being, and become one of hot research field of measurement and control today. As one of field bus, Modbus protocol have been widely accepted because of low development cost, easy to use and many other advantages in industry.The temperature is one of the important parameters measured in industry,so it has been chosen a measurement of the object,temperature measurement and control nodes has been designed based on Modbus protocol.This design uses TC1047A sensor to collect on-site temperature,AD conversion and Modbus protocol communications can be done by STC12C5A60S2 microcontroller.The physical layer of communication adopts RS485 interface, and have optical isolation, anti-lightning and short circuit protection in addition. Finally, achieved the Modbus protocol communication between a single node and the PC, and simulate industrial control by controlling the buzzer, and relay. This paper describes the implementation of temperature control node from hardware and software.KEY WORDS Temperature Monitoring Modbus protocol RS485 STC12C5A60目录中文摘要 (Ⅰ)英文摘要 (Ⅱ)1 绪论 (1)2 设计方案 (3)2.1方案概述 (3)2.2方案论证 (3)2.2.1 通讯可靠性 (4)2.2.2 温度检测电路选择 (4)2.2.3 系统电源稳定性 (5)3 硬件电路设计 (6)3.1最小系统电路 (6)3.2温度检测电路 (6)3.3电源电路 (7)3.4报警控制电路 (9)3.5通讯电路 (10)3.6显示电路 (13)3.7硬件抗干扰的设计 (14)4 MODBUS协议概述与应用 (16)4.1MODBUS协议概述 (16)4.1.1 总体描述 (16)4.1.2 MODBUS数据单元 (17)4.1.3 MODBUS通信原理 (17)4.2M两种传输方式 (19)4.2.1 ASCll模式 (20)4.2.2 RTU模式 (20)4.3MODBUS消息帧 (21)4.3.1 ASCll帧 (21)4.3.2 RTU帧 (21)4.3.3 字符的连续传输 (22)4.5错误检测方法 (23)4.5.1 LRC检测 (24)4.5.2 CRC检测 (24)5 软件设计 (25)5.1AD采集程序设计 (26)5.2串口中断处理程序设计 (27)5.3MODBUS协议程序设计 (29)5.4CRC计算及校验程序设计 (29)6 总结 (33)致谢............................................................ 错误!未定义书签。
目录第一章单片机概述 (1)1.1主要芯片介绍 (1)1.1.1MAX232芯片 (1)1.1.2 LCD1602液晶显示 (2)1.1.3 12C5A60S2 (2)第二章实验板介绍 (6)2.1 实验板介绍 (6)2.2 实验板地址分配及跳线说明 (7)第三章调试 (9)3.1 LED灯从低八位到高八位一次亮 (9)3.1.1 调试程序 (9)3.2 A/D电路 (10)3.2.1 程序 (10)3.3 1602显示学号和姓名拼音 (15)3.3.1 调试程序 (15)3.4 一盏灯闪一下 (19)3.4.1 调试程序 (19)3.5 数码管显示按键 (21)3.5.1 调试程序 (21)3.6 左右各移动一次并闪一次 (23)3.6.1 调试程序 (23)第四章拓展部分 (25)4.1 拓展编程以及调试部分 (25)第五章实习总结 (29)第一章单片机概述1.1主要芯片介绍1.1.1MAX232芯片MAX232芯片是美信公司专门为电脑的RS-232标准串口设计的单电源平转换芯片,使用+5V单电源供电。
特点:符合所有的RS-232C技术标准;只需要单一的+5V电源供电;片载电荷泵具有升压、电压极性反转能力,能够产生+10V和-10V电压;功耗低、典型供电电流5mA;内部集成2个RS-232C驱动器;内部集成两个RS-232C接收器。
引脚介绍:第一部分是电荷泵电路。
由1、2、3、4、5、6脚和4只电容构成。
功能是产生+12V和-12V两个电源,提供给RS-232串口电平的需要。
第二部分是数据转换通道。
由7、8、9、10、11、12、13、14脚构成两个数据通道。
其中14脚(T1OUT)、13脚(RIN)、12脚(R1OUT)、11脚(T1IN)为第一数据通道。
7脚(T2OUT)、8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、为第二数据通道。
TTL/COMS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;DB9插头的RS-232数据从T1IN、T2IN输入转换成TTL/COMS数据后从R1OUT、R2OUT输出。
第三部分是供电。
15引脚GND、16引脚VCC(+5V)。
图1-1 MAX232芯片1.1.2 LCD1602液晶显示液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在各类仪表和低功耗系统中得到广泛的应用。
能显示16行2列,32个字符。
引脚介绍如下:1引脚:VSS接地2引脚:VDD接+5V电源3引脚:V0为液晶显示器对比度调节,接正电源时对比度最低,接地电源对比度最高,对比度过高会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
4引脚:RS为寄存器选择,高电平时选择数据寄存器,低电平时选择指令寄存器。
5引脚:RW为读写信号线,高点评时进行读操作,低电平时进行写操作。
6引脚:E端为使能端,当E端由高电平跳到低电平,液晶模块执行命令。
7-14引脚:D0-D78位双向数据线15、16引脚:悬空引脚图1-2 1602引脚1.1.3 12C5A60S2STC12C5A60S2是STC生产的单时钟/机器周期(1T)的单片机,是高速、低功耗、超强抗干扰的新一代8051单片机,指令代码完全兼容传统的8051,但速度快8-12倍。
内部集成MAX810专用复位电路,2位PWM,8路高速10位A/D转换,针对电机控制,强干扰场合。
1、增强型8051CPU,1T(1024G),单时钟/机器周期2、工作电压 5.5-3.5V3、1280字节RAM4、通用I/O口,复位后为:准双向口/弱上拉可设置成四种模式:准双向口/弱上拉,强推挽/强上拉,仅为输入/高阻,开漏每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过120mA5、有EEPROM功能6、看门狗7、内部集成MAX810专用复位电路8、外部掉电检测电路9、时钟源:外部高精度晶体/时钟,内部R/C振荡器10、4个16位定时器两个与传统8051兼容的定时器/计数器,16位定时器T0和T111、3个时钟输出口,可由T0的溢出在P3.4/T0输出时钟,可由T1的溢出在P3.5/T1输出时钟,独立波特率发生器可以在P1.0口输出时钟12、外部中断I/O口7路,传统的下降沿中断或电平触发中断,并新增支持上升沿中断的PCA 模块,Power Down模式可由外部中断唤醒,INT0/P3.2,INT1/P3.3,T0/P3.4,T1/P3.5,RxD/P3.0,CCP0/P1.3,CCP0/P1.313、PWM2路14、A/D转换,10位精度ADC,共8路,转换速度可达250K/S15、通用全双工异步串行口(UART)16、双串口,RxD2/P1.2,TxD2/P1.317、工作范围:-40~8518、封装:LQFP-48,LQFP-44,PDIP-40,PLCC管脚说明:P0.0~P0.7 P0:P0口既可以作为输入/输出口,也可以作为地址/数据复用总线使用。
当P0口作为输入/输出口时,P0是一个8位准双向口,内部有弱上拉电阻,无需外接上拉电阻。
当P0作为地址/数据复用总线使用时,是低8位地址线A0~A7,数据线D0~D7 。
P1.0/ADC0/CLKOUT2标准IO口、ADC输入通道0、独立波特率发生器的时钟输出。
P1.1/ADC1。
P1.2/ADC2/ECI/RxD2标准IO口、ADC输入通道2、PCA计数器的外部脉冲输入脚,第二串口数据接收端。
P1.3/ADC3/CCP0/TxD2外部信号捕获,高速脉冲输出及脉宽调制输出、第二串口数据发送端。
P1.4/ADC4/CCP1/SS非SPI同步串行接口的从机选择信号。
P1.5/ADC5/MOSISPI同步串行接口的主出从入(主器件的输入和从器件的输出) 。
SPI同步串行接口的主入从出。
P2.0~P2.7P2口内部有上拉电阻,既可作为输入输出口(8位准双向口),也可作为高8位地址总线使用。
P3.0/RxD标准IO口、串口1数据接收端。
P3.1/INT0非外部中断0,下降沿中断或低电平中断。
P3.3/INT1。
P3.4/T0/INT非/CLKOUT0定时器计数器0外部输入、定时器0下降沿中断、定时计数器0的时钟输出。
A/D转换器的结构:STC12C5A60AD/S2系列带A/D转换的单片机的A/D转换口在P1口,有8路10位高速A/D 转换器,速度可达到250KHz(25万次/秒)。
8路电压输入型A/D,可做温度检测、电池电压检测、按键扫描、频谱检测等。
上电复位后P1口为弱上拉型IO口,用户可以通过软件设置将8路中的任何一路设置为A/D转换,不须作为A/D使用的口可继续作为IO口使用。
单片机ADC由多路开关、比较器、逐次比较寄存器、10位DAC、转换结果寄存器以及ADC_CONTER构成。
该单片机的ADC是逐次比较型ADC。
主次比较型ADC由一个比较器和D/A转换器构成,通过逐次比较逻辑,从最高位(MSB)开始,顺序地对每一输入电压与内置D/A转换器输出进行比较,经过多次比较,使转换所得的数字量逐次逼近输入模拟量对应值。
逐次比较型A/D 转换器具有速度高,功耗低等优点。
需作为AD使用的口先将P1ASF特殊功能寄存器中的相应位置为‘1’,将相应的口设置为模拟功能芯片引脚图:图1-3 12C5A60S2芯片引脚第二章实验板介绍2.1 实验板介绍SCKJ-I型实验板包括:单片机、ISP程序下载器、数码管动态显示电路、8位LED指示灯、液晶显示模块1602和12864、时钟芯片DS12C887、温度传感器DS18B20、74HC573输出口扩展、A/D转换、按键、遥控接收、继电器输出、蜂鸣器报警等电路,可进行相关电路和程序运行。
同时,单片机、74HC573输出口扩展等接有外部插针,也可用于其它相关外围设别的调试。
实验板实物图如下:图2-1 实验板实物图整体电路:图2-2 整体电路图2.2 实验板地址分配及跳线说明地址分配:时钟芯片DS12C887地址:0000H——1FFFH74HC573扩展I/O口地址:6000H——7FFFH液晶显示模块LCD地址:0C000H——0DFFFH跳线说明:J1、J2:单片机引脚J4、J5、J6:用于DS18B20的硬件连接J7、J15 :数码管的位选和段选输入J8:蜂鸣器、继电器的控制输入J9、J10:继电器的控制输出J12:扩展至J11附近的P1口引脚J13:8位LED灯的控制输入J14:I/O扩展74HC573的输出,与J13或者J15可用跳线连接J16、J17:电位器引出端J18:STC单片机下载输入端,可用跳线器与电路板上的下载器输出端Ju1连接J19:可用跳线器将遥控输出、DS12C887中的中断信号连接到单片机的INT1、INT0 J21:地线引出端J22:+5V引出端第三章调试3.1 LED灯从低八位到高八位一次亮3.1.1 调试程序#include<reg52.h>#define uchar unsigned char#define uint unsigned intvoid Delay(uint del){uint i,j;for(i=0; i<del; i++)for(j=0; j<1827; j++);}void Main(void){while(1){P1 =0xfe;Delay(100);P1=0xfd;Delay(100);P1 =0xfb;Delay(100);P1=0xf7;Delay(100);P1=0xef;Delay(100);P1=0xdf;Delay(100);P1 =0xbf;Delay(100);P1=0x7f;}}3.2 A/D电路3.2.1 程序void Delay(WORD n){WORD y;while(n--){y=500;while(y--);}}/************************************************************************ Function name: write_cmdDescriptions: 向lcd输入指令************************************************************************/ void write_cmd(BYTE cmd){P20=0; //写指令模式P21=0;P27=1;P37=0;P36=0;P0=cmd;P27=0;P37=0;P36=0;Delay(10);}/********************************************************************** Function name: write_dataDescriptions: 写入数据**********************************************************************/ void write_data(BYTE dat){P20=1; //写数据模式P21=0;P27=1;P37=0;P36=0;P0=dat;P27=0;P37=0;P36=0;Delay(10);}/*********************************************************************** Function name: write_stringDescriptions: 写入字符串***********************************************************************//*void write_string(BYTE *s) {while(*s != '\0') //'\0'为字符串结束标志{write_data(*s);s++;}}*//********************************************************************** Function name: set_display_placeDescriptions: 设置字符的显示位置**********************************************************************/void set_display_place(BYTE line,column){BYTE address;if(line == 1){address = 0x80 + column;}else if(line == 2){address = 0xc0 + column;}write_cmd(address);}/******************************************************************* Function name: 将字符串写到指定的位置Descriptions: 将字符串显示在lcd的特定位置*******************************************************************/ /*void write_string_lcd(BYTE line,column,unsigned char *string){set_display_place(line,column);write_string(string);Delay(1);}*/void write_data_lcd(BYTE line,column,dat){set_display_place(line,column);write_data(dat);Delay(1);}/****************************************************************** Function name: 将字符写到指定的位置Descriptions: 将字符串显示在lcd的特定位置*******************************************************************/ /***************************************************************液晶模块初始化****************************** ****************************************************/ void lcd_init(void){write_cmd(0x06);//write_cmd(0x38);//// write_cmd(0x38);//write_cmd(0x0c);//write_cmd(0x01);//}/*****************LED显示位置********************/void display(uint z){uchar i;disbuf[8]=z/10000+0x30;disbuf[10]=z%10000/1000+0x30;disbuf[11]=z%1000/100+0x30 ;disbuf[12]=z%100/10+0x30;disbuf[13]=z%10+0x30;for(i=0;i<14;i++)write_data_lcd(1,1+i,disbuf[i]);}/*void read_ad(void){uint ad_data[8];uint x,a,b;uchar i;uint res,res1;uchar status=0;ADC_CONTR=0x80;Delay(1);for(i=0;i<8;i++){ADC_CONTR=(0x80|i);ADC_CONTR|=0x80;status=0;while(!(ADC_CONTR&0x10));ADC_CONTR&=0xE7;res=ADC_RES;res1=ADC_RESL;ad_data[i]=res*256+res1;}for(i=0;i<8;i++){x=ad_data[i];a=x/10+0x30;b=x%10+0x30;write_data_lcd(2,1,a);write_data_lcd(2,2,b);}}*///------------------------------------------------------------------------------ uint AD_get(uchar channel){ADC_CONTR=0x88|channel; //开启AD转换1000 1000 即POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0_nop_(); _nop_(); _nop_(); _nop_();//要经过4个CPU时钟的延时,其值才能够保证被设置进ADC_CONTR 寄存器while(!(ADC_CONTR&0x10)); //等待转换完成ADC_CONTR&=0xe7; //关闭AD转换,ADC_FLAG位由软件清0return(ADC_RES*4+ADC_RESL); //返回AD转换完成的10位数据(16进制)}//------------------------------------------------------------------------------ float AD_work(uchar channel){float AD_val; //定义处理后的数值AD_val为浮点数uchar i;for(i=0;i<100;i++)AD_val+=AD_get(channel); //转换100次求平均值(提高精度)AD_val/=100;AD_val=(AD_val*5)/1024; //AD的参考电压是单片机上的5v,所以乘5即为实际电压值AD_val=AD_val*10000;return AD_val;}//------------------------------------------------------------------------------//------------------------------------------------------------------------------//------------------------------------------------------------------------------ void AD_init(){P1ASF=0x01; //P1.0 作为模拟功能AD使用ADC_RES=0; //清零转换结果寄存器高8位ADC_RESL=0; //清零转换结果寄存器低2位ADC_CONTR=0x80;//开启AD电源Delay(2); //等待1ms,让AD电源稳定ES=1;EA=1;}3.3 1602显示学号和姓名拼音3.3.1 调试程序#include "reg51.h"#include"absacc.h"typedef unsigned char BYTE;typedef unsigned int WORD;/* 液晶1602口地址 */#define wr_com XBYTE[0xC000] //写命令#define wr_data XBYTE[0xC100] //写数据#define rd_com XBYTE[0xC200] //读命令#define rd_data XBYTE[0xC300] //读数据void lcd_init(void); // lcd初始化void write_cmd(BYTE cmd); // lcd写命令//void write_string(unsigned char *s); // 写字符串void write_data(BYTE dat) ; // 写数据void set_display_place(BYTE line,column);void write_string_lcd(BYTE line,column,unsigned char *string);//void write_data_lcd(BYTE line,column,dat);//void crti(unsigned long dat);//void crt_r(float x,BYTE N);void Delay(WORD n){WORD x;while(n--){x=500;while(x--);}}/*void Delay2(WORD n){WORD x;while(n--){x=5000;while(x--);}}*//************************************************************************ Function name: write_cmdDescriptions: 向lcd输入指令************************************************************************/ void write_cmd(BYTE cmd){BYTE dl;do {dl=rd_com;} while((dl&0x80)!=0); //判忙wr_com= cmd;Delay(1);}/********************************************************************** Function name: write_dataDescriptions: 写入数据**********************************************************************/ void write_data(BYTE dat){BYTE dl;do {dl=rd_com;} while((dl&0x80)!=0); //判忙wr_data= dat;Delay(1);}/*********************************************************************** Function name: write_stringDescriptions: 写入字符串***********************************************************************/ void write_string(BYTE *s){while(*s != '\0') //'\0'为字符串结束标志{write_data(*s);s++;}}/********************************************************************** Function name: set_display_placeDescriptions: 设置字符的显示位置**********************************************************************/ void set_display_place(BYTE line,column){BYTE address;if(line == 1){address = 0x80 + column;}else if(line == 2){address = 0xc0 + column;}write_cmd(address);}/******************************************************************* Function name: 将字符串写到指定的位置Descriptions: 将字符串显示在lcd的特定位置*******************************************************************/ void write_string_lcd(BYTE line,column,unsigned char *string){set_display_place(line,column);write_string(string);Delay(1);}/****************************************************************** Function name: 将字符写到指定的位置Descriptions: 将字符串显示在lcd的特定位置*******************************************************************//*void write_data_lcd(BYTE line,column,dat){set_display_place(line,column);write_data(dat);Delay(1);}*//***************************************************************液晶模块初始化**********************************************************************************/void lcd_init(void){write_cmd(0x38);//write_cmd(0x38);//write_cmd(0x06);//write_cmd(0x0c);//write_cmd(0x01);//}/*****************LED显示位置********************/void main(){//SP=0x60;lcd_init();while(1){write_string_lcd(1,1," 10700238 ");write_string_lcd(2,1," liyijing ");}}3.4 一盏灯闪一下3.4.1 调试程序#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义sbit OUT=P1^2; //定义OUT输出端口/*------------------------------------------------定时器初始化子程序------------------------------------------------*/void Init_Timer0(void){TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响//TH0=0x00; //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出 //TL0=0x00;EA=1; //总中断打开ET0=1; //定时器中断打开TR0=1; //定时器开关打开}/*------------------------------------------------主程序------------------------------------------------*/main(){Init_Timer0();while(1);}/*------------------------------------------------定时器中断子程序------------------------------------------------*/void Timer0_isr(void) interrupt 1 using 1{static unsigned char i;TH0=(65536-10000)/256; //重新赋值 12M晶振计算,指令周期1uS,//200mS方波半个周期100mS,由于定时器//最大值65536 即65.536ms 所以TL0=(65536-10000)*256; //直接定时器不够用,需要用循环处理,//定时10ms,然后循环100次后输出 10x100=1000msi++;if(i==101){i=0;OUT=~OUT; //用示波器可看到方波输出}}3.5 数码管显示按键3.5.1 调试程序/*******行扫描法扫描键盘,通过数码管来显示********/#include<reg51.h>unsigned char code table[16] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e };sbit A13=P2^5;sbit w0=P2^0;sbit w1=P2^1;sbit w2=P2^2;sbit w3=P2^3;void Delay(int Time_ms)//延时{int i;unsigned char j;for(i=0;i<Time_ms;i++){for(j=0;j<=150;j++){}}}unsigned char Keyscan() //行列式键盘扫描{unsigned char i,j, temp, Buffer[4] = {0xef, 0xdf, 0xbf, 0x7f}; //让矩阵键盘的每行分别为低电平for(j=0; j<4; j++){P1 = Buffer[j];temp = 0x01;for(i=0; i<4; i++){if(!(P1 & temp)) //判断P1口高4位某一行为低电平{return (j+i*4); //返回键码}temp <<= 1;}}return 0;}void main(){unsigned char Key_Value; //读出的键值A13=1;while(1){P1 = 0xf0;if(P1 != 0xf0) //判断有无按键按下{Delay(15); //按键消抖if(P1 != 0xf0){Key_Value = Keyscan();WR=0;P0 = table[Key_Value];WR=1;w0=0;w1=0;w2=0;w3=0;}}}3.6 左右各移动一次并闪一次3.6.1 调试程序#include<reg52.h>#define uchar unsigned char #define uint unsigned intvoid Delay(uint del){uint i,j;for(i=0; i<del; i++)for(j=0; j<1827; j++);}void main (void){int i;while(1){for(i=0;i<2;i++){P1 = 0xfe;Delay(100);P1 = 0xfd;Delay(100);P1 = 0xfb;Delay(100);P1 = 0xf7;Delay(100);P1 = 0xef;Delay(100);P1 = 0xdf;Delay(100);P1 = 0xbf;Delay(100);P1 = 0x7f;Delay(100);}for(i=0;i<2;i++){P1 = 0x7f;Delay(100);P1 = 0xbf;Delay(100);P1 = 0xdf;Delay(100);P1 = 0xef;Delay(100);P1 = 0xf7;Delay(100);P1 = 0xfb;Delay(100);P1 = 0xfd;Delay(100);P1 = 0xfe;Delay(100);}for(i=0;i<2;i++){P1=0x00;Delay(200);P1=0xff;Delay(200);}}}第四章拓展部分4.1 拓展编程以及调试部分第六个:程序:nclude<reg52.h>#include"sky.h"#include"1602.h"sbit baojing=P2^6;unsigned char num1=0;void change(){write_com_1602(0xc0);write_date_1602(' ');write_date_1602(' ');write_date_1602('C');write_date_1602('H');write_date_1602('A');write_date_1602('N');write_date_1602('G');write_date_1602('E');}void wrong(){start_1602();write_com_1602(0x80);write_date_1602(' ');write_date_1602(' ');write_date_1602(' ');write_date_1602(' ');write_date_1602('W');write_date_1602('R');write_date_1602('O');write_date_1602('N');write_date_1602('G');while(num1==3){baojing=0;delay(100);}}void true(){start_1602();write_com_1602(0x80);write_date_1602(' ');write_date_1602(' ');write_date_1602(' ');write_date_1602(' ');write_date_1602('T');write_date_1602('R');write_date_1602('U');write_date_1602('E');}void main(){unsigned char i,j,gai=0,num=0;unsigned char a[4]={0,1,2,3};unsigned char b[4]={0,0,0,0};while(1){num1++;for(i=0;i<4;i++){j=1;while(j){b[i]=sky();if(b[i]==112)j=1;elsej=0;}}for(i=0;i<4;i++){if(a[i]==b[i])num++;elsenum=0;}if(num==4){true();j=1;while(j){num=sky();if(num==112)j=1;elsej=0;}if(num==15){change();for(i=0;i<4;i++){j=1;while(j){a[i]=sky();if(a[i]==112)j=1;elsej=0;}}write_com_1602(0x01);}num=0;}else{wrong();}}}第五章实习总结四周的生产实习,我们完成了实验板的焊接、程序调试。