单片机与接口技术课程方案设计_第1页
单片机与接口技术课程方案设计_第2页
单片机与接口技术课程方案设计_第3页
单片机与接口技术课程方案设计_第4页
单片机与接口技术课程方案设计_第5页
已阅读5页,还剩33页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

个人资料整理 仅限学习使用洛阳理工学院课程设计报告课程名称 单片机原理与接口技术设计题目 基于STC单片机的实验平台开发设计专 业通信工程班 级学 号姓 名完成日期 2018年1月2日课程设计任务书设计题目:基于STC单片机的实验平台开发设计一、设计内容利用STC系列单片机作为微控制器开发一套软、硬结合的单片机实验平台,主要包括以下内容:1.使用Proteus7.8进行仿真电路原理图设计,主要包括LCD显示模块、串口通信模块、数码管显示模块、LED发光二极管、键盘等接口电路的设计;结合电路原理图,在KeiluVision4软件环境下,进行实验平台软件设计。主要包括流水灯、计数器、定时器、LCD字符显示、键盘控制等功能程序设计;进行电路元器件的识别,学习分立元件、集成电路等芯片的焊接方法与技巧,集中进行电路板焊接与测试;将编写的各模块程序下载到测试后的实验平台上,验证硬件实现的效果是否与软件仿真一致;结合器件选择、原理图设计、硬件焊接、软件编程调试、软硬件联调等方面写出课程设计报告。二、设计要求完成综合实验平台的电路结构分析,进行模块分解,掌握各部分电路的工作原理;每组协作完成电路板的焊接,掌握故障排除方法,完成实验平台的硬件设计及开发;/38个人资料整理 仅限学习使用3. 结合KeiluVision4软件在焊接无误的单片机实验平台上开发出流水灯、LCD显示模块,通信模块等程序设计;根据分组情况,从硬件、软件方面对学生进行逐一答辩考核;按照要求撰写课程设计论文。指导教师:2018年12月16日课程设计评语成绩: 指导教师:_______________年 月 日I/38个人资料整理 仅限学习使用基于STC89C52单片机的实验平台开发设计摘要本文阐述了 STC单片机实验平台设计原理与实现方法。本实验以设计过程为主线,分别从硬件和软件两个方面描述设计过程,即从硬件电路的焊接到实现所要求功能的软件技术。 b5E2RGbCAP此实验平台具有成本低、体积小、可靠性高、多功能、低功耗、操作方便等特点。设计报告介绍了该开发板的开发过程及相关硬件设计。实验板以STC89C52单片机为核心控制器,板上资源主要包括按键模块、 LED模块、数码管模块、串口通信模块等。 实验板可以作为主控制模块安装于控制系统中执行控制任务,也可以用于高校教案,能够完成 LED灯、按键、数码管、液晶等多数通用实验,操作简单,性价比高,具有一定的实用价值。p1EanqFDPw关键词:STC89C52,实验平台,数码管,流水灯,串口通信52seriesmicrocontrollercomprehensiveexperimentalboarddevelopmentdesignDXDiTa9E3dABSTRACTInthispaperthedesignprincipleandimplementationmethodonSTCmicrocontrollerexperimentalplatform.Thisexperimentistodesignprocessasthemainline,respectivelyfromtwoaspectsofhardwareandsoftwaredescribedthedesignprocess,fromthehardwarecircuitofweldingtechnologytorealizetherequiredfunctionofsoftware.RTCrpUDGiTThisexperimentplatformisoflowcost,smallvolume,highreliability,multi-function,lowpowerconsumption,convenientoperation,etc.Designthereportintroducesthedevelopmentprocessofthedevelopmentboardandrelatedhardwaredesign.ExperimentalplateSTC89C52microcontrollerasthecorecontroller,resourcemodulemainlyincludesthebuttonsonthedigitaltube,LEDmodule,module,LCDmodule,etc.Experimentboardcanbeinstalledinthecontrolsystemasthemaincontrolmodulecontroltasks,alsocanbeusedincollegeteaching,candoLEDlights,/38个人资料整理 仅限学习使用buttons,digitaltube,liquidcrystal,suchasmostcommonexperiment,theoperationissimple,cost-effective,hascertainpracticalvalue5PCzVD7HxA.KEYWORDS: STC89C52, comprehensive experimental board, LCD, button, software andhardwarecombinedwith,andtheprogramdevelopmentdesignjLBHrnAILg目录摘要 xHAQX74J0X目录 ILDAYtRyKfE前言 Zzz6ZB2Ltk0第1章系统概述0dvzfvkwMI11.1设计题目 rqyn14ZNXI01.1.1设计目的 0EmxvxOtOco1.1.2设计内容 SixE2yXPq501.1.3设计要求 6ewMyirQFL11.1.4设计步骤 kavU42VRUs1第2章整体设计方案1y6v3ALoS892.1开发板整体外观 M2ub6vSTnP12.2整板电路PROTUES仿真电路 0YujCfmUCw22.3软件功能描述 eUts8ZQVRd22.4仿真软件PROTUES中的效果图 3sQsAEJkW5T第3章硬件电路设计3GMsIasNXkA3.1两位一体共阴数码管 3TIrRGchYzg3.1.1数码管概述 7EqZcWLZNX33.1.2数码管内部结构 lzq7IGf02E33.1.3两位一体共阴数码管和 74LS373锁存器接口电路 4zvpgeqJ1hk3.2LCD1602液晶 NrpoJac3v153.2.1LCD1602液晶简介 1nowfTG4KI53.2.2LCD1602液晶引脚介绍 fjnFLDa5Zo3.2.3LCD1602液晶外围接口电路 tfnNhnE6e53.3串口通信 6HbmVN777sL3.3.1串口通讯概述 6V7l4jRB8Hs3.3.2MAX232接口电路 83lcPA59W97第4章软件设计8mZkklkzaaP4.1程序整体流程图 AVktR43bpw84.2程序清单 8ORjBnOwcEd第5章调试及故障分析92MiJTy0dTT5.1焊接准备阶段元器件测试、电路原理图故障分析 9gIiSpiue7A5.2电路焊接过程中的故障分析 uEh0U1Yfmh95.3程序编写过程中的故障分析 IAg9qLsgBX5.4实物演示效果 10WwghWvVhPE结论 asfpsfpi4k10谢辞 10ooeyYZTjj1参考文献 11BkeGuInkxII/38个人资料整理 仅限学习使用附录111PgdO0sRlMo附录2293cdXwckm15II/38个人资料整理 仅限学习使用前言随着电子技术的飞速发展,基于单片机的控制系统已广泛应用于工业、农业、电力、电子、智能楼宇等行业,微型计算机作为嵌入式控制系统的主体与核心,代替了传统的控制系统的常规电子线路。同时楼宇智能化的发展与成熟,也为基于单片机控制系统的普及与应用奠定了坚实的基础。 h8c52WOngM单片机技术在各个领域中正得到越来越广泛的应用, STC89C52单片机具有体积小、集成度高、可靠性强、低功耗、结构简单等特点。现在许多现代先进设备,如汽车电子、智能楼宇、手机等设备的智能化控制,都普遍地使用控制机。基于STC89C52单片机的实验平台因其具有操作灵活,精度高,易于控制,设计简单等优点而成为优选的对象。 v4bdyGious基于电子技术的不断发展,大规模集成电路的运用越来越普遍,用CPLD/FPGA来开发新产品是电子技术发展必然趋势。目前各高校逐步开设了单片机课程和可编程器件设计课程,而两门课程往往是独立开设,尤其是实验,而实验是检验理论正确与否的试金石,是学好两门课程的重要手段和方法。学习并运用单片机知识控制简单的单片机实验平台是计算机专业学生应当具备的基本能力,对以STC89C52为主控实验平台的课程设计能极大地锻炼学生对单片机知识的实践能力。J0bm4qMpJ9第1章 系统概述1.1 设计题目基于STC89C52系列单片机的实验平台开发设计1.1.1设计目的通过本课程设计,使学生熟悉单片机控制系统的组成与原理以及开发流程,对电子产品的制作调试及基本焊接方法有深入的理解,巩固单片机、接口等理论知识,提高学生动手设计的能力及独立分析问题和解决问题的能力、综合设计及创新能力。XVauA9grYP1.1.2设计内容电路原理图设计,实现LED发光二极管、数码管显示器、LCD液晶显示器、键盘、串口等模块在Proteus环境下电路的仿真设计。bR9C6TJscw2.学习集成电路等芯片的焊接方法与技巧、实际元器件的识别,完成PCB板焊接。3.在KeilC环境下,进行模块化程序设计。包括键盘、流水灯、数码管、0/38个人资料整理 仅限学习使用液晶等控制功能程序的编写,实现模块化编程,并加上详细的注释。pN9LBDdtrd针对所开发的实验板,结合器件选择、原理图设计、硬件焊接、软件编程调试、软硬件联调等方面撰写课程设计报告。DJ8T7nHuGT1.1.3设计要求完成综合实验平台的电路结构分析,进行模块分解,掌握各部分电路的工作原理;独立完成电路板的焊接,掌握故障排除的方法,完成实验平台的硬件设计及开发;运用KeilC集成开发环境,在焊接无误的单片机实验平台上编写流水灯、数码管显示、LCD显示,通信模块等程序,并具体实现;QF81D7bvUA按照要求撰写课程设计论文。1.1.4设计步骤熟悉单片机实验平台工作原理、KeilC、Proteus软件的联合调试方法、STC89C52实验板的基本组成、原理和使用方法。4B7a9QFw9h学生根据课程设计的任务书,设计出合适的方案,制定焊接与调试步骤,进行元器件的焊接。通过串口实现上位机与下位机的通信,编写的各模块程序经调试无误后,下载到单片机中,查看实际运行效果。根据课程设计要求写出设计报告。第2章整体设计方案1.1开发板整体外观图1开发板整体外观1/38个人资料整理 仅限学习使用1.2整板电路PROTUES仿真电路图2整板电路PROTUES仿真电路1.3软件功能描述软件整体分为计数器、流水灯、数码管及液晶 4种模式,其中流水灯、数码管及液晶模式下各分 3种状态。1. SW2~5为4个控制开关,选择计数器、流水灯、数码管及液晶 4种模式。计数器模式<SW2),可以实现0~99计数,并在数码管上显示,SW5退出。流水灯模式<SW2退出后再次按下SW1),此模式下SW3选择左循环,SW4选择回荡式循环,SW5模拟音量循环。ix6iFA8xoX数码管模式<SW3),SW2和SW4实现“L2”“H3”的显示切换,SW5为计时器,实现0~59s计时。wt6qbkCyDE5. 液晶模式<SW4),SW2液晶显示课程设计信息, SW5显示个人信息。上电运行时液晶会一直显示提示信息。2/38个人资料整理 仅限学习使用1.4仿真软件PROTUES中的效果图图3仿真软件 PROTUES中的效果图第3章 硬件电路设计3.1两位一体共阴数码管1.1.5数码管概述常见的LED数码管为“8”字型的,共计 8段。每一段对应一个发光二极管。有共阳极和共阴极两种,如图 4所示。共阴极发光二极管的阴极连在一起,通常公共阴极接地。当阳极为高电平时,发光二极管发光。 Kp5zH46zRk同样,共阳极发光二极管的阳极连接在一起,公共阳极接正电压,当某个发光二极管的阴极接低电平时,发光二极管发光,显示相应的段。 Yl4HdOAA611.1.6数码管内部结构实验板使用的两位一体的共阴极发光数码管,其内部引脚已经连好,引脚如图4所示<正面朝自己,小数点在下方)。a、b、c、d、e、f、g、dp为段引脚,图5中Y0表示数码管的位选端。ch4PJx4BlI3/38个人资料整理 仅限学习使用图4八段LED数码管结构及外形表1:共阳极数码管字模表显示0123456789字模0xc00xf90xa40xb00x990x920x820xf80x800x90表2:共阴极数码管字模表显示0123456789字模0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f1.1.7两位一体共阴数码管和 74LS373锁存器接口电路图5数码管和 74LS373锁存器接口电路本实验板采用74LS138<3-8译码器)位选两位数码管,其中Y0,Y1分别是两个数码管的位选端,位选控制信号送到图5中74LS373锁存器,通过锁存器驱动数码管显示,实验板中共用了两个锁存器来驱动数码管。 qd3YfhxCzo4/38个人资料整理 仅限学习使用1.2LCD1602液晶1.2.1LCD1602液晶简介1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5*7或者5*11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用。 E836L11DO51602LCD是指显示的内容为16*2,即可以显示两行,每行16个字符液晶模块<显示字符和数字)。市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。S42ehLvE3M1.2.2LCD1602液晶引脚介绍如图6,1602采用标准的16脚接口,其中:第1脚:VSS为电源地第2脚:VCC接5V电源正极第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高<对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。501nNvZFis第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。第5脚:RW为读写信号线,高电平(1>时进行读操作,低电平(0>时进行写操作。第6脚:E(或EN>端为使能(enable>端,高电平<1)时读取信息,负跳变时执行指令。第7~14脚:D0~D7为8位双向数据端。第15~16脚:空脚或背灯电源。15脚背光正极,16脚背光负极。5/38个人资料整理 仅限学习使用图6LCD1602引脚图1.2.3LCD1602液晶外围接口电路实验板中使用 3-8译码器的Y2端作为选通端,如图 7,当Y2端为高电平时NPN三极管处于高阻状态,负跳变时 LCD_EN端使能并驱动 LCD1602,显示字模。jW1viftGw9图7LCD1602液晶外围接口电路3.3串口通信3.3.1串口通讯概述52系列单片机的串口有4个模式,可分别用作串并转换、并串转换、异步串行通信<2种模式)。异步串行通信中,有1+8+1和1+8+1+1两种帧格式,多机通信是特殊的通信方式。基本原理是两组移位寄存器。将并行通信转换成串行通信模式<发送部分),或反之<接收部分)。也可全双工运行。 xS0DOYWHLP6/38个人资料整理 仅限学习使用串行端口的本质功能是作为CPU和串行设备间的编码转换器。当数据从CPU经过串行端口发送出去时,字节数据转换为串行的位。在接收数据时,串行的位被转换为字节数据。应用程序要使用串口进行通信,必须在使用之前向操作系统提出资源申请要求 <打开串口),通信完成后必须释放资源 <关闭串口)。LOZMkIqI0w3.3.2MAX232接口电路图8MAX232接口电路原理图7/38个人资料整理 仅限学习使用第4章 软件设计4.1程序整体流程图开始SW2提示SW4计数器退出计数器SW2选择模式SW3SW4流水灯数码管SW3SW4SW5液晶SW2SW4SW5SW2SW4SW5左花累L2H3计循样加信结留切切时环循模息束下换换器环式介语备绍用结束ZKZUQsUJed图9程序整体流程图4.2程序清单表3程序清单及功能介绍程序名头文件功能main.creg52.h主程序模式选择Delay.cdelay.h延时函数Key.ckey.h开关选择LED1.cled1.h流水灯LED2.cled2.h数码管LCD.clcd.h液晶显示LED1_switch.cled1_switch.h流水灯模式LED2_switch.cled2_switch.h数码管模式LCD_switch.clcd_switch.h液晶模式8/38个人资料整理 仅限学习使用第5章 调试及故障分析5.1焊接准备阶段元器件测试、电路原理图故障分析焊接电路钱应该先对各器件识别、测试,包括二极管,色环电阻,电容,按键开关,自锁开关,排阻,芯片等。然后按照所给的电路图正确焊接。dGY2mcoKtT元器件的识别与测试方法不止一种。例如,发光二极管可以直接识别引脚的长短来判断正负,长引脚的为正极,也可利用万用表合适的欧姆档接在二极管两端,看是否会亮;此实验平台的电容分电解电容、陶瓷电容两种,电解电容不分正负极,电解电容长引脚的为正极,电容上的标识表示电容的大小;色环电阻一般比较难识别,可以直接用万用表测量其阻值;按键开关分并行的两路导通与断开的,焊接时应注意所需要的状态,自锁开关也分为并行的两排,共有六个引脚,焊接前应先测量,以免出错。rCYbSWRLIA电路原理图故障分析:图中 3-8译码器的接法出现矛盾, E1端为使能端,反而接在GND,低电平不能使 3-8译码器工作,经过仿真电路测试,将 E1端接在P1.5引脚,作为3-8译码器的使能控制端;原理图中译码器的引脚位置与实际电路也存在出入,但不存在逻辑错误,实际焊接电路的时候需要特别注意。FyXjoFlMWh5.2电路焊接过程中的故障分析首先对电路板中可能存在虚焊的地方用万用表一一检查,并对焊接不牢固的焊点进行修补。上电前用万用表测得单片机的 GND与VCC是导通的,通过老师讲解才知道电路板在设计的时候存在缺陷, USB接口与电源插口的连线需要断开。上电下载程序时MAX芯片存在问题,更换一个MAX232芯片下载程序正常。测试时一个数码管有一段接触不良,通过修补数码管的排母得到解决。TuWrUpPObX一般在不知问题出在何处的情况下利用万用表从最可能存在问题的地方开始用进行逐步排查,找出电路中错误的地方,然后进行修改。一般根据二极管单向导通、电容通交流阻直流的特性等,帮助检查电路的错误。 7qWAq9jPqE5.3程序编写过程中的故障分析编程调试过程中使用中断作为计数器的触发条件,但是实际电路中按键触发中断时会发生抖动,造成计数不准确,后改成开关作为触发条件,并在程序中进行消除抖动的操作,计数器的功能完整实现。llVIWTNQFk由于对模块化编程的熟悉程度还不够,刚开始使用模块化方法编写程序时常忘记添加进工作组,软件编译过程中也很难查找到错误。不过警告可以很好的提示程序编译过程中的问题。模块化编程使程序更清晰明了,程序编写还应该注9/38个人资料整理 仅限学习使用意一个问题,很好的程序应该具备明确的注释及说明文档。 yhUQsDgRT15.4实物演示效果图10实物演示效果结论本文研究了基于AT89C52单片机的实验平台的设计原理与实现方法,包括硬件与软件设计。实现了单片机的基本功能的仿真、实际电路中的调试功能。对单片机原理及应用中定时器、中断、LED、LCD、按键、数码管等原理有了系统的了解,并能很好地在实际电路中实现程序的控制。MdUZYnKS8I本次单片机课程设计,学到了单片机实际应用的许多东西,即使在实验过程中遇到了很多问题,但最终都在队友的相互配合下得以解决,解决问题的过程中不仅学到了很多书本上难以理解的问题,也明白一个道理:团队的力量大于个人能力。实习中队友无比激情地去面对每个需要解决的问题,每一个焊点都会认真对待,经过深思熟虑、团队讨论之后得出最好的解决方案,完成焊接测试的任务。09T7t6eTno课程知识与实际实践的结合,使自己对单片机的实际应用有了更深刻的理解。软硬件结合,灵活运用所学知识解决实际问题。通过这次课程设计,提高了自己的课题分析能力,编程能力,和解决实际综合问题的能力。 e5TfZQIUB5谢辞本论文的完成需特别感谢老师的精心指导。在本课题的设计过程中,通过老师耐心的指导和队友李晓颖、刘书全的通力合作,受到很多的启发,并学到许多单片机的理论实践知识。同时联系到大学两年所学的相关专业知识,加深10/38个人资料整理 仅限学习使用了对单片机系统的认识。在老师的谆谆教导下,掌握了许多相关专业知识,从而有机会有可能完成这个设计,从而学到很多有关单片机的实践知识,除对于书本上理论知识的巩固与加深外,对于自己的动手能力也有很大的提高。在此也衷心的感谢身边的同学和朋友给我的关心和指导。s1SovAcVQM参考文献李蒙毛建东编单片机原理及应用[M].北京:中国轻工业出版社,2018[2] 林立张俊亮编 单片机原理及应用:基于 Proteus和KeilC[M]. 北京:电子工业出版社,2018.1[3] 丁明亮,唐前辉。 51单片机应用设计与仿真 [M]. 北京:北京航空航天大学出版社,2009[4]徐爱钧,彭秀华。单片机高级语言编程与应用实践[M].北京:电子工业出版社,2008.[5]李学礼。基于Proteus的8051单片机实例教程[M].北京:电子工业出版社,2008.[6]郭天祥编新概念51单片机C语言教程:入门、提高、开发、扩展全攻略[M].北京:电子工业出版 ,2009.1附录1单片机源程序主函数#include"delay.h"//延时的头文件#include"lcd.h"//液晶的头文件#include"led1.h"//LED灯的头文件#include"led2.h"//数码管的头文件#include"key.h"//开关选择的头文件#include"led1_switch.h"//选择流水灯模式的头文件#include"led2_switch.h"#include"lcd_switch.h"#include<reg52.h>/********************************************************************GXRw1kFW5sfunction:sbit*explain:位及变量的定义*add:********************************************************************/UTREx49Xj9sbitKey1=P3^2。//Key1sbitKey3=P3^4。//Key3sbitKey4=P3^5。//Key4sbitLS138_EN=P1^5。//74LS138ucharcount=0。ucharmod[]={0x3f,0x06,0x5b,0x4f,0x66,11/38个人资料整理 仅限学习使用0x6d,0x7d,0x07,0x7f,0x6f} 。 //共阴极数码管字模voidcount_sys(>{LS138_EN=1。 //74LS138 G引脚低电平有效EN_Y0(>。P0=mod[count%10]。delay_1ms(10>。EN_Y1(>。P0=mod[count/10]。delay_1ms(10>。}/********************************************************************function:main* explain: 开机显示 welcometouse 随后提示开关控制* add :********************************************************************/voidmain(void>{intmode_switch。charflag=0。IT0=1。IE=0x81。P0=0x00。welcome(>。 // 欢迎使用delay_1ms(1500>。point(>。 // 提示信息while(flag==0>{// Key4while(Key4==0>{

8PQN3NDYyPmLPVzx7ZNwdelay_1ms(10>。if(Key4==0>{flag=1。}}count_sys(>。 // 计数器while(Key1==0>{delay_1ms(10>。if(Key1==0>{12/38个人资料整理 仅限学习使用count++。 // 计数值if(count==100>{count=0。}}while(Key1==0>。}}while(flag==1>{mode_switch=Key_mode(>。switch(mode_switch>{case1:LED1_switch(>。 // Key1流水灯模式break。case2:LED2_switch(>。 // 数码管模式break。case3: // 液晶模式LCD_switch(>。break。}}}延时函数#include"delay.h"/********************************************************************function:delay_1ms* explain: 实现timems延时* add :********************************************************************/voiddelay_1ms(uinttime>{uchari。while(time-->

AHP35hB02dNDOcB141gTfor(i=0。i<120。i++>。}voiddelay_us(uinty> //微秒级延时{for(。y>0。y-->。}开关选择函数#include"key.h"13/38个人资料整理 仅限学习使用#include"delay.h"#include<reg52.h>/********************************************************************function:sbit*explain:开关位定义*add:********************************************************************/sbitKey1=P3^2。//Key1LED的各种循环显示sbitKey2=P3^3。//Key2sbitKey3=P3^4。//Key3sbitKey4=P3^5。//Key4/********************************************************************function:Key_modeexplain:开机/复位选择工作模式add:********************************************************************/intKey_mode(void>{intmode。Key1if(Key1==0>{delay_1ms(10>。if(Key1==0>{mode=1。 // 流水灯模式}}Key2if(Key2==0>{delay_1ms(10>。if(Key2==0>{mode=2。 // 数码管模式}}Key3if(Key3==0>{delay_1ms(10>。if(Key3==0>{mode=3。 // 液晶模式

1zOk7Ly2vAfuNsDv23KhtqMB9ew4YXHmMJFY05dE14/38个人资料整理 仅限学习使用}}returnmode。}流水灯#include"led1.h"#include"lcd.h"#include"delay.h"#include<reg52.h>#include<intrins.h> /*循环左移函数 *//******************************************************************** ViLRaIt6skfunction:LED_LEFT_CIR* explain: LED左循环的函数 改回非递归的函数* add :********************************************************************/ 9eK0GsX7H1voidLED_LEFT_CIR(void>{chartemp。charcount_led=0。temp=0xfe。 //fe是11111110P2=temp。 //最上面的 LED亮for(count_led=0。count_led<8。count_led++>{temp=_crol_(temp,1>。 //循环左移一位delay_1ms(100>。P2=temp。}}/******************************************************************** naK8ccr8VIfunction:LED_RIGHT_CIR* explain: LED右循环的函数* add :********************************************************************/ B6JgIVV9aovoidLED_RIGHT_CIR(void>{chartemp。charcount_led=0。temp=0x7f。 //fe是11111110P2=temp。 //最上面的 LED亮for(count_led=0。count_led<8。count_led++>{temp=_cror_(temp,1>。 //循环右移一位delay_1ms(100>。P2=temp。15/38个人资料整理 仅限学习使用}}/********************************************************************function:LED_ADD_CIR********************************************************************/voidLED_ADD(void>{ucharled=0x80。ucharyiwei=0x40。P2=0x00。while(1>{delay_1ms(100>。P2=led。led=led+yiwei。if(led==0xff>break。yiwei>>=1。}while(1>{delay_1ms(150>。led=led-yiwei。P2=led。if(yiwei==0x40>{P2=0x80。delay_1ms(100>。break。}yiwei<<=1。}}voidLR(void>{LED_LEFT_CIR(>。LED_RIGHT_CIR(> 。}流水灯模式选择#include"led1_switch.h"#include"led1.h"#include"delay.h"#include<reg52.h>/********************************************************************* function: sbit

P2IpeFpap53YIxKpScDMgUHFg9mdSs16/38个人资料整理 仅限学习使用* explain: 开关位定义* add :********************************************************************/sbitKey2=P3^3。//Key2左循环sbitKey3=P3^4。//Key3右循环sbitKey4=P3^5。//Key4花样循环/********************************************************************function:LED1_switch* explain: 选择LED的循环模式* add :********************************************************************/voidLED1_switch(void>{int led1_switch。while(1>{Key2if(Key2==0>{delay_1ms(10>。if(Key2==0>{led1_switch=2。 // 左循环}}Key3if(Key3==0>{delay_1ms(10>。if(Key3==0>{led1_switch=3。 // 右循环}}Key4if(Key4==0>{delay_1ms(10>。if(Key4==0>{led1_switch=4。 // 花样循环}}switch(led1_switch>

uQHOMTQe79IMGWiDkflPWHF4OmOgAw17/38个人资料整理 仅限学习使用{case2:LED_LEFT_CIR(>。 // 左循环break。case3:LR(>。// 右循环break。case4:LED_ADD(>。 // 花样break。}}}数码管#include"led2.h"#include"delay.h"#include<reg52.h>/******************************************************************** aDFdk6hhPd* function: sbit及相应变量的定义* explain:* add :********************************************************************/ ozElQQLi4Tsbit LS138_A=P2^5。 // 3-8译码器的地址选择线 其中为高位sbitLS138_B=P2^6。sbitLS138_C=P2^7。sbitLS138_EN=P1^5。//74LS138uchari,num=0。ucharflag=0,t=1。 // 定义延时 1S的标志位ucharled_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} 。 //共阴极数码管字模ucharled_mod1[]={0x38,0x5b,0x76,0x4f} 。 //L2H3CvDtmAfjiA/******************************************************************** QrDCRkJkxhfunction:EN_Y0* explain: 使能Y0口 打开LED1* add :********************************************************************/ 4nCKn3dlMXvoidEN_Y0(void>{LS138_C=0。LS138_B=0。 // 000 Y0 为低电平 使能Y0LS138_A=0。}18/38个人资料整理 仅限学习使用/********************************************************************function:EN_Y1* explain: 使能Y1口 打开LED2* add :********************************************************************/voidEN_Y1(void>{

ijCSTNGm0EvfB1pxanfkLS138_C=0。LS138_B=0。//001Y1为低电平使能Y0LS138_A=1。}/********************************************************************JbA9VhEou1function:L2* explain: 显示L2* add :********************************************************************/voidL2(void>{LS138_EN=1。 //74LS138 G引脚低电平有效EN_Y1(>。P0=led_mod1[0]。delay_1ms(10>。EN_Y0(>。P0=led_mod1[1]。delay_1ms(10>。}/********************************************************************

X7Ahr18pJIb3zqXLCqXofunction:H3* explain: 显示H3* add :********************************************************************/voidH3(void>{LS138_EN=1。 //74LS138 G引脚低电平有效EN_Y1(>。P0=led_mod1[2]。delay_1ms(10>。EN_Y0(>。P0=led_mod1[3]。delay_1ms(10>。}/********************************************************************function:watchexplain:秒表显示函数

pZyytu5rc5DVyGZezsrM19/38个人资料整理 仅限学习使用* add :********************************************************************/ RQxPvY3tFsvoidwatch(void>{intshi=0,ge=0。TMOD=0x01。 //0x01=00000001,定时器T0,工作方式 1TH0=60。 //装初值,定时50ms,软件循环 20次TL0=176。TR0=1。 //打开定时器P0=0x3f。 //开始全置0while(1>{while(TF0>//使用查询方式实现{t++。TF0=0。//TF0清零,循环定时20次}if(t==18>{t=1。num++。shi=num/10。ge=num%10。}while(num==60> //判断计数到{num=0。}EN_Y1(>。P0=led_mod[shi]。 //显示十位数delay_us(500>。EN_Y0(>。P0=led_mod[ge]。 //显示个位数delay_us(500>。}}数码管选择#include"led2_switch.h"#include"led2.h"#include"delay.h"#include<reg52.h>/********************************************************************function:sbit* explain: 开关位定义* add :

S时,数码管从零计数5MxX1IxuU920/38个人资料整理 仅限学习使用********************************************************************/sbitKey1=P3^2。//Key1显示L2sbitKey3=P3^4。//Key3显示H3sbitKey4=P3^5。//Key4显示秒表/********************************************************************function:LED2_switch* explain: 选择LED的循环模式* add :********************************************************************/voidLED2_switch(void>{int led2_switch。while(1>{Key1if(Key1==0>{delay_1ms(10>。if(Key1==0>{led2_switch=1。 // 左循环}}Key3if(Key3==0>{delay_1ms(10>。if(Key3==0>{led2_switch=3。 // 右循环}}Key4if(Key4==0>{delay_1ms(10>。if(Key4==0>{led2_switch=4。 // 花样循环}}switch(led2_switch>{case1:

jIw5xs0v9PxEve2buwnwKAvmyVYxCd21/38个人资料整理 仅限学习使用L2(>。break。case3:H3(>。break。case4:watch(>。break。}}}液晶显示#include"lcd.h"#include"lcd_switch.h"#include"delay.h"#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitRS=P1^6。sbitRW=P1^7。ucharLCD_Status。/********************************************************************function:sbit及相应变量的定义explain:add:********************************************************************/sbit LS138_A=P2^5。 // 3-8译码器的地址选择线为高位sbitLS138_B=P2^6。sbitLS138_C=P2^7。sbitLS138_EN=P1^5。//74LS138/********************************************************************function:EN_Y2explain:add:********************************************************************/voidEN_Y2(void>{LS138_C=0。LS138_B=1。//010LS138_A=0。}/********************************************************************* function: EN_Y7

Ywuu4FszRTcstDApWA6A其中qotL69pBkhEksTCSTCzXSgs28CnDOE22/38个人资料整理 仅限学习使用* explain:********************************************************************/ 6craEmRE2kvoidEN_Y7(void>{LS138_C=1。LS138_B=1。 // 111LS138_A=1。}/****************************************************************** 检查忙函数function:BF<BusyFlag)位为忙标志。explain:BF=1,表示忙,LCM不能接收命令和数据;* BF=0,表示LCM不忙,可以接收命令和数据。* ADD :*****************************************************************/ucharBusy_Check(>{

k8qia6lFh1y3qrGQOGwIRS=0。RW=1。//RS=0控制寄存器RW=1读EN_Y2(>。delay_1ms(2>。//E为使能端LCD_Status=P0。//读出LCD状态delay_1ms(2>。EN_Y2(>。 EN_Y7(>。 // 当 E出现负跳变时,液晶模块执行命令returnLCD_Status。}/***************************************************************** MZpzcAiHKo*function: wcmd*explain: 写命令函数 RS=0。RW=0。* ADD :*****************************************************************/ 0VoHIjMIZ5voidwcmd(ucharcmd>{while((Busy_Check(>&0x80>==0x80> 。 // 判断设备处于忙状态RS=0。RW=0。 // 指令寄存器写入EN_Y2(>。 //E置高等待负跳变写入P0=cmd。 // 命令由P0送入LCDdelay_1ms(2>。EN_Y7(>。 // 负跳变 执行命令}/***************************************************************** dRoQe3gJeM*function: wdat*explain: 写数据函数 RS=1。RW=0。23/38个人资料整理 仅限学习使用* ADD :*****************************************************************/voidwdat(uchardat>{

rNnYJNKKtswhile((Busy_Check(>&0x80>==0x80> 。 // 判断设备处于忙状态RS=1。RW=0。 // 数据寄存器写入EN_Y2(>。P0=dat。 // 命令由P0送入LCDdelay_1ms(2>。EN_Y7(>。 // 负跳变写入数据}/***************************************************************** FJn6fxdLH9*function: LCD_Init*explain: LCD 初始化* ADD :*****************************************************************/ TFmfLhHMWPvoidLCD_Init(>{wcmd(0x38>。delay_1ms(20>。 // 00111000 8bit数据接口N=1双行显示 F=05*7点阵字符 7Blnh0bNbwwcmd(0x01>。delay_1ms(20>。 // 00000001 清屏wcmd(0x06>。delay_1ms(20>。 // 00000110// I/D=1光标左->右当读或写一个字符后 地址指针加 1// 且光标加 1向右移动一个字符位置// S=0写入一个字符整屏显净漂wcmd(0x0e>。delay_1ms(20>。 //00001110 D=1,开显示 C=1,有光标 B=0,字符不闪烁 lxlvNKFOpd}/******************************************************************function:point*explain: 主程序进来显示开关模式的提示信息* ADD :*****************************************************************/voidpoint(>{wcmd(0x80+0x00>。 //第1行第1列显示“1.Light"LCD_Init(>。wdat('1'>。wdat('.'>。wdat('L'>。wdat('i'>。

ztkEju9PETNpjMPeCQTA24/38个人资料整理 仅限学习使用wdat('g'>。wdat('h'>。wdat('t'>。wcmd(0x80+0x09>。 //第1行第10列显示“2.LED"wdat('2'>。wdat('.'>。wdat('L'>。wdat('E'>。wdat('D'>。wcmd(0x80+0x40>。 //第2行第1列显示“3.LCD"wdat('3'>。wdat('.'>。wdat('L'>。wdat('C'>。wdat('D'>。wcmd(0x80+0x49>。 //第2行第10列显示“4.ADD"wdat('4'>。wdat('.'>。wdat('A'>。wdat('D'>。wdat('D'>。}/***************************************************************** 1ljUlY6R8h*function: course_design*explain: 显示“洛阳理工学院课程设计 ”* ADD :*****************************************************************/ fhi3RIASmXvoidcourse_design(>{LCD_Init(>。wcmd(0x80+0x00>。 // 显示 "LIT"wdat('L'>。wdat('I'>。wdat('T'>。wcmd(0x80+0x04>。 //显示"coursedesign"wdat('C'>。wdat('o'>。wdat('u'>。wdat('r'>。wdat('s'>。wdat('e'>。wdat('D'>。wdat('e'>。wdat('s'>。25/38个人资料整理 仅限学习使用wdat('i'>。wdat('g'>。wdat('n'>。wcmd(0x80+0x47>。//显示B11050707swdat('B'>。wdat('1'>。wdat('1'>。wdat('0'>。wdat('5'>。wdat('0'>。wdat('7'>。wdat('0'>。wdat('7'>。while(1>。}/******************************************************************function: GOOD_BYE*explain: 显示GOODBYE* ADD :*****************************************************************/voidGOOD_BYE(>{

scibnr4TBEG8hjTbyUQkLCD_Init(>。//0x80wcmd(0x80+00>。//写入显示缓冲区起始地址为第1行第1列wdat('G'>。//第1行第1列显示字母“G”wdat('O'>。wdat('O'>。wdat('D'>。wcmd(0x80+0x07>。wdat('B'>。wdat('Y'>。wdat('E'>。wcmd(0x80+0x44>。//写入显示缓冲区起始地址为第2行第10列wdat('-'>。wdat('-'>。wdat('H'>。wdat('o'>。wdat('u'>。wdat('S'>。wdat('h'>。wdat('a'>。wdat('o'>。wdat('L'>。26/38个人资料整理 仅限学习使用wdat('i'>。wdat('n'>。while(1>。}/******************************************************************function: welcometouse*explain: 显示welcometouse 89C51SYS* ADD :*****************************************************************/voidwelcome(>{LCD_Init(>。wcmd(0x80+00>。wdat('w'>。wdat('e'>。wdat('l'>。wdat('c'>。wdat('o'>。wdat('m'>。wdat('e'>。wdat(''>。wdat('t'>。wdat('o'>。wdat(''>。wdat('u'>。wdat('s'>。wdat('e'>。wcmd(0x80+0x47>。wdat('8'>。wdat('9'>。wdat('C'>。wdat('5'>。wdat('1'>。wdat('_'>。wdat('S'>。wdat('Y'>。wdat('S'>。}液晶开关选择#include"lcd_switch.h"#include"lcd.h"#include"led2.h"#include"delay.h"#include<reg52.h>

U4gspV1V4180gAVFvXjI27/38个人资料整理 仅限学习使用/******************************************************************

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论