单片机交通灯实验设计报告_第1页
单片机交通灯实验设计报告_第2页
单片机交通灯实验设计报告_第3页
单片机交通灯实验设计报告_第4页
单片机交通灯实验设计报告_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

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

文档简介

东北林业大学单片机原理实验课程设计总结报告设计项目: 电子交通灯的设计 项目完成人: 指导教师: 学院: 信息与计算机工程学院 专业:电子信息工程2008级3班2011年5月23日

综合电子课程设计任务书学生姓名郜天斌学号20082978专业(班级)电信三班学生姓名刘佳滨学号20082996专业(班级)电信三班设计项目电子交通灯的设计设计内容(1) 通过8*8点阵简单实现直行、转弯的交通指挥设计(2) 显示年、月、日、星期、时、分、秒(3)能够通过键盘输入日期和时间的初值(4) 通过功能键能够实现数据储存、查询、上传(串行通讯)功能(5) 通过功能键能够实现外中断和定时中断功能主要技术指标和要求设计所用仪器设备工作计划参考资料指导教师签字系主任签字摘要随着目前微电子技术的发展,技术工艺的不断提高,单片机技术也有了长足的进步。单片机即单片微型计算机,它是微型计算机的一个分支,它是在一块芯片上集成了CPU、RAM和ROM存储器I/O接口等而构成的微型计算机。因为它主要应用于工业测控领域故又叫做微控器或嵌入式控制器。单片机的核心是CPU用超大规模集成技术把CPU集成在一块芯片上,称为微处理器。单片机在最近几年中得到了极大的发展,目前世界范围内单片机发展的主要领域有4个:一是欧美,最新开发产品及主要厂商有:Nationalsemicundutor的cop3系列单片机,美国的Scenix的八位单片机,荷兰PHILIPS的51系列单片机,,美国AMD公司186系列16位嵌入式微机控制器,MOTOROLA的各个系列单片机;二是日本,TOSHIBA公司开发了从4位到64位多系列单片机,日立公司也有从4位到32位多系列单片机,NEC公司的75X、78X系列微机;三是台湾地区,主要有WINBOND的W741/W516,W78/W77等系列产品微控制器;四是韩国,主要有HYUNDAImicroelectrionics的GMS800、GMS30系列微控制器。另外还有LG公司也生产单片机,可见单片机发展到今天可以说种类繁多、性能各异。但目前我国的许多单片机应用单位仍停留在采用片内无ROM等低档单片机状态。十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。那么靠什么来实现这井然秩序呢?靠的就是交通信号灯的自动指挥系统。交通信号灯控制方式很多。本系统采用MSC-51系列单片机ATSC51和可编程并行I/O接口芯片CH451为中心器件来设计交通灯控制器,实现了能根据实际车流量通过8051芯片的P1口设置红、绿灯燃亮时间的功能;红绿灯循环点亮,倒计时剩5秒时黄灯闪烁警示(交通灯信号通过PA口输出,显示时间直接通过CH451的PC口输出至双位数码管);车辆闯红灯报警;绿灯时间可检测车流量并可通过双位数码管显示。本系统实用性强、操作简单、扩展功能强。关键词:单片机、交通灯、LJD-SY-5200单片机实验系统基于单片机的交通灯设计目录TOC\o"1-5"\h\z\o"CurrentDocument"1绪论 1\o"CurrentDocument"1.1引言 1\o"CurrentDocument"系统方案设计 2\o"CurrentDocument"2芯片简介 2\o"CurrentDocument"MSC-51芯片简介 2\o"CurrentDocument"DS1302芯片简介 5\o"CurrentDocument"74HC573简介 7\o"CurrentDocument"CH451芯片简介 7\o"CurrentDocument"74HC138芯片简介 10\o"CurrentDocument"3系统硬件设计 11\o"CurrentDocument"3.1系统硬件设计 11\o"CurrentDocument"LCD液晶 11\o"CurrentDocument"8段数码管 12\o"CurrentDocument"4系统的软件设计 12\o"CurrentDocument"4.1程序设计与调试步骤 12\o"CurrentDocument"4.2计数器初值计算 12\o"CurrentDocument"4.2.11秒方法 134.3时间显示 134.3.1写保护寄存器操作 13\o"CurrentDocument"4.3.2时钟停止位操作 13\o"CurrentDocument"多字节传送方式 13\o"CurrentDocument"5结论 14附录1、 总体电路图 15\o"CurrentDocument"2、 流程图 15\o"CurrentDocument"3、 程序代码 17参考文献1绪论1.1引言所谓单片机是指在一个集成芯片中,集成微处理器(CPU)、存储器、基本I/O接口以及定时/计数、通信部件,即在一个芯片上实现一台微型计算机的基本功能。1970年微型计算机研制成功之后,随着就出现了单片机。美国Intel公司1971年生产的4位单片机4004和1972年生产的雏形8位单片机8008,特别是1976年MCS-48单片机问世以来,在短短的二十几年间,经历了四次更新换代,其发展速度大约每二、三年要更新一代、集成度增加一倍、功能翻一番。其发展速度之快、应用范围之广,已达到了惊人的地步,它已渗透到生产和生活的各个领域。尽管目前单片机的品种很多,但其中最具典型性的当数Intel公司的MCS-51系列单片机。MCS-51是在MCS-48的基础上于80年代初发展起来的,虽然它仍然是8位的单片机,但其功能有很大的增强。由于PHILIPS>ATMEL、WELBORD、LG等近百家IC制造商都主产51系列兼容产品,具有品种全、兼容性强、软硬件资料丰富等特点。因此,MCS-51应用非常广泛,成为继MCS-48之后最重要的单片机品种。直到现在MCS-51仍不失为单片机中的主流机型。国内尤以Intel的MCS-51系列单片机应用最广。由于8位单片机的高性能价格比,估计近十年内,8位单片机仍将是单片机中的主流机型。随着计算机技术的发展和在控制系统中的广泛应用,以及设备向小型化、智能化发展,作为高新技术之一的单片机以其体积小、功能强、价格低廉、使用灵活等优势,显示出很强的生命力。它和一般的集成电路相比有较好的抗干扰能力,对环境的温度和湿度都有较好的适应性,可以在工业条件下稳定工作。且单片机广泛地应用于各种仪器仪表,使仪器仪表智能化,提高它们的测量速度和测量精度,加强控制功能。如MCS-51系列单片机控制的“船舶航行状态自动记录仪”、“烟叶水分测试仪”、“智能超声波测厚仪”等。单片机也广泛地应用于实时控制系统中,例如对工业上各种窑炉的温度、酸度、化学成分的测量和控制。将测量技术、自动控制技术和单片机技术相结合,充分发挥其数据处理功能和实时控制功能,使系统工作处于最佳状态,提高系统的生产效率和产品质量。从航空航天、地质石油、冶金采矿、机械电子、轻工纺织等行业的分布系统与智能控制以及机电一体化设备和产品,到邮电通信、日用设备和器械,单片机都发挥了巨大作用。其应用大致可分为以下几方面:①机电一体化设备的控制核心。机电一体化是机械设备发展的方向。单片机的出现促进了机电一体化技术的发展,它作为机电产品的控制器,充分发挥其自身优点,大大强化了机器的功能,提高了机器的自动化、智能化程度。最典型的机电产品机器人,每个关节或动作部位都是一个单片机控制系统。②数据采集系统的现场采集单元。大型数据采集系统,要求数据采集的同步性和实时性要好。使用单片机作为系统的前端采集单元,由主控计算机发出采集命令,再将采集到的数据逐一送到主计算机中进行处理。如有些气象部门、油田采油部门以及电厂等均可采用这样的系统。③分布控制系统的前端控制器。在直接控制级的计算机分布控制系统(DCS)中,单片机作为过程控制中每一分部操作或控制的控制器,进行数据采集、反馈计算、控制输出,并在上位机命令的指挥下进行相应协调工作。(④智能化仪表的机芯。自动化仪表的智能化程度越来越高。采用单片机的智能化仪表可具有自整定、自校正、自动补偿和自适应功能,还可进行数字PID调节,软件消除电流热噪声等等,解决传统仪表所不能解决的难题。单片机的应用使这种性能如虎添翼,如自动计费电度表、燃气表中已有这方面的应用。许多工业仪表中的智能流量计,气体分析仪、成分分析仪等也采用了这项技术。甚至有的保健治疗仪中也采用了单片机控制。⑤消费类电子产品控制。该应用主要反映在家电领域,如洗衣机、空调器、保安系统、VCD视盘机、电子秤、IC卡、手机、BP机等。这些设备中使用了单片机机芯后,大大提高了其控制功能和性能,并实现了智能化、最优化控制。⑥终端及外围设备控制。计算机网络终端设备,如银行终端、商业POS(自动收款机)以及计算机外围设备如打印机、通信终端和智能化UPS等。在这些设备中使用单片机,使其具有计算、存储、显示、输入等功能,具有和计算机连接的接口,使计算机的能力及应用范围大大提高。总之,随着信息时代的到来,传统单片机固有的结构缺陷,使其呈现出诸多弊端。其速度、规模、性能等指标越来越难以满足用户需求、因此单片机芯片的开发,升级面临着新的挑战。1.2系统方案设计利用LJD-SY-5200单片机主板和CH451、DS1302等芯片分别实现(1)通过8*8点阵简单实现直行、转弯的交通指挥设计(2)显示年、月、日、星期、时、分、秒(3)能够通过键盘输入日期和时间的初值(4)通过功能键能够实现数据储存、查询、上传(串行通讯)功能(5)通过功能键能够实现外中断和定时中断功能。在整合各部分代码实现整体的功能实现。通过CH451实现键盘的扫描,判断按键代码触发相应的程序。修改8*8点阵来显示各种交通指挥图标。拟用p0(0.0-0.7)口控制74hc573实现对于led8*8的控制,用单片机控制ch451从而控制数码管与键盘(p1.2控制load,p3.4控制dclk,p3.5控制din,p3.3控制dout)详细连接将在硬件部分叙述。该方案最终可实现交通灯以及简单的表的功能。在可实现性方面由于所使用的cpu管脚不冲突,按键输入是中断方式,加之采用时钟中断为记数脉冲所以是可以实现的。2芯片简介MSC-51芯片简介MCS-51单片机内部结构8051是MCS-51系列单片机的典型产品,包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明:•中央处理器:中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。•数据存储器(RAM)8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。并行珈口I串行通信口中断系毓定时计数器程序存储器11数据存储器8051时钟并行珈口I串行通信口中断系毓定时计数器程序存储器11数据存储器8051时钟据线址线制跋数总地总控总图18051内部结构框图•程序存储器(ROM):8051共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。•定时/计数器(ROM):8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。•并行输入输出(I/O)口:8051共有4组8位I/O口(P0、P1、P2或P3),用于对外部数据的传输。•全双工串行口:8051内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。•中断系统:8051具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。•时钟电路:8051内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但8051单片机需外置振荡电容。单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构°INTEL的MCS-51系列单片机采用的是哈佛结构的形式,而后续产品16位的MCS-96系列单片机则采用普林斯顿结构。下图是MCS-51系列单片机的内部结构示意图2。PO.c—P0.7 T2.0—P2.PO.c—P0.7 T2.0—P2.7 I通道口驱动黑II通道2驱动器I堆栈指针图2MCS-51的引脚说明:MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。现在我们对这些引脚的功能加以说明:MCS-51的引脚说明:MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。现在我们对这些引脚的功能加以说明:如图3Pl.0EPl.1EPl.2EPl.3EPl.4EPl.5EPl.6EPl.7ERSTEEXD/P3.0ETXD/P3.1EIBT0/P3.2EI1IT1/P3.3ET0/P3.4ET1/P3.5EWP3.6EED/P3.7EKTAL2EKTAL1EtllDEPDIPVccPl.0EPl.1EPl.2EPl.3EPl.4EPl.5EPl.6EPl.7ERSTEEXD/P3.0ETXD/P3.1EIBT0/P3.2EI1IT1/P3.3ET0/P3.4ET1/P3.5EWP3.6EED/P3.7EKTAL2EKTAL1EtllDEPDIPVccP0.0/ADOPO.1/AD1PO.2/AD2PO.3/AD3PO.4/AD4PO.5/AD5PO.6/AD6PO.7/AD7EA/VPP_ALE/PEOGPESNP2.7/A15P2.6/A14P2.5/A13P2.4/Al2P2.3/A11P2.2/A10P2.1/A3P2.0/A8图3Pin9:RESET/V园复位信号复用脚,当8051通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电苹:系统即初始复位。初始化后,程序计数器PC指向0000H,P0-P3输出口全部为高电平,堆栈指针写入07H,其它专用寄存器被清“0”。RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。然而,初始复位不改变RAM(包括工作寄存器R0-R7)的状态,8051的初始态。8051的复位方式可以是自动复位,也可以是手动复位,见下图4。此外,RESET/Vd还是一复用脚,V掉电其间,此脚可接上备用电源,以保证单片机内部RAM的数据不丢失。 '"

上电自动复位 手劫复位:电路 内部时钟方式图48051□nt上电自动复位 手劫复位:电路 内部时钟方式图48051□nt1)XTAL2时钟源18XTAL1外部时钟方式・Pin30:ALE/西国当访问外部程序器时,ALE(地址锁存)的输出用于锁存地址的低位字节。而访问内部程序存储器时,ALE端将有一个1/6时钟频率的正脉冲信号,这个信号可以用于识别单片机是否工作,也可以当作一个时钟向外输出。更有一个特点,当访问外部程序存储器,ALE会跳过一个脉冲。如果单片机是EPROM,在编程其间,顽;将用于输入编程脉冲。・Pin29:商当访问外部程序存储器时,此脚输出负脉冲选通信号,PC的16位地址数据将出现在P0和P2口上,外部程序存储器则把指令数据放到P0口上,由CPU读入并执行。・Pin31:EA/Vpp程序存储器的内外部选通线,8051和8751单片机,内置有4kB的程序存储器,当EA为高电平并且程岸地址小于4kB时,读取内部程序存储器指令数据,而超过4kB地址则读取外部指令数据。如EA为低电平,则不管地址大小,一律读取外部程序存储器指令。显然,对内部无程序存储器的8031,EA端必须接地。在编程时,EA/Vpp脚还需加上21V的编程电压。DS1302芯片简介DS1302是DALLAS公司推出的涓流充电时钟芯片内含有一个实时时钟/日历和31字节静态RAM通过简单的串行接口与单片机进行通信实时时钟/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作可通过AM/PM指示决定采用24或12小时格式DS1302与单片机之间能简单地采用同步串行的方式进行通信仅需用到三个口线1RES复位2I/O数据线3SCLK串行时钟时钟/RAM的读/写数据以一个字节或多达31个字节的字符组方式通信DS1302工作时功耗很低保持数据和时钟信息时功率小于1mW。DS1302是由DS1202改进而来增加了以下的特性双电源管脚用于主电源和备份电源供应Vcc1为可编程涓流充电电源附加七个字节存储器它广泛应用于电话传真便携式仪器以及电池供电的仪器仪表等产品领域下面将主要的性能指标作一综合:•实时时钟具有能计算2100年之前的秒分时日日期星期月年的能力还有闰年调整能力318位暂存数据存储RAM•串行I/O口方式使得管脚数量最少•宽范围工作电压2.05.5V工作电流2.0V时,小于300nA•读/写时钟或RAM数据时有两种传送方式单字节传送和多字节传送字符组方式8脚DIP封装或可选的8脚SOIC封装根据表面装配简单3线接口•与TTL兼容Vcc=5V

可选工业级温度范围-40+85与DS1202兼容在DS1202基础上增加的特性对Vcc1有可选的涓流充电能力双电源管用于主电源和备份电源供应备份电源管脚可由电池或大容量电容输入附加的7字节暂存存储器1DS1302的基本组成和工作原理DS1302的管脚排列及描述如下图及表所示管脚描述管脚描述管脚描述管脚描述X1X232.768KHz晶振管脚GND地RST复位脚I/O数据输入/输出引脚管脚配置8丁8丁65-1234登籍VGVDC1SCLKI/ORST匚1U8)v0C1X1匚2 7□SCLKX2匚3 6JI/OgndC4 53RST♦PINDI=(3WMIL)DS1302SB-PIN50IC(200MIL)DS1302ZB-PINSOIC150MILSCLK串行时钟Vcc1,Vcc2电源供电管脚订单信息订单信息订单信息订单信息部分#描述DS1302 串行时钟芯片8脚DIPDS1302S 串行时钟芯片8脚SOIC200milDS1302Z 串行时钟芯片8脚SOIC150milDS1302内部寄存器CH:时钟停止位寄存器2的第7位12/24小时标志CH=0振荡器工作允许bit7=1,12小时模式CH=1振荡器停止bit7=0,24小时模式WP:写保护位寄存器2的第5位:AM/PM定义WP=0WP=1寄存器数据能够写入AP=1 下午模式寄存器数据不能写入AP=0 上午模式TCS:涓流充电选择 DS:二极管选择位TCS=1010 使能涓流充电 DS=01 选择一个二极管TCS=其它 禁止涓流充电 DS=10 选择两个二极管DS=00或11,即使TCS=1010,充电功能也被禁止

74HC573芯片简介74HC573是一种带三态门的8D锁存器,其管脚示意图如下示:u:iIjc--DDDDDDDD-jc--DDDDDDDD-rc12343&丁吕1Q-8Q为8个输出端。TOC\o"1-5"\h\zLE为数据打入端:当C为“1”时,锁存器输出一状态同输入状态;当C由“1”变“0”时,数据 ’打入锁存器 —OC为输出允许端:当OC=0时,三态门打开; 一当砂1时,三态门关闭,输出高阻。_4HC573CH451芯片简介1概述CH451是一个整合了数码管显示驱动和键盘扫描控制以及UP监控的多功能外围芯片。CH451内置既振荡电路,可以动态驱动8位数码管或者64位LED,具有BCD译码、闪烁、移位等功能;同时还可以进行64键的键盘扫描;CH451通过可以级联的串行接口与单片机等交换数据;并且提供上电复位和看门狗等监控功能。2、特点显示驱动•内置大电流驱动级,段电流不小于25mA,字电流不小于150mA。•动态显示扫描控制,直接驱动8位数码管或者64位发光管LED。•可选数码管的段与数据位相对应的不译码方式或者BCD译码方式。•数码管的字数据左移、右移、左循环、右循环。•各数码管数字独立闪烁控制。•通过占空比设定提供16级亮度控制。•支持段电流上限调整,可以省去所有限流电阻。•扫描极限控制,支持1到8个数码管,只为有效数码管分配扫描时间。键盘控制•内置64键键盘控制器,基于8X8矩阵键盘扫描。•内置按键状态输入的下拉电阻,内置去抖动电路。•键盘中断,低电平有效输出。•提供按键释放标志位,可供查询按键按下与释放。外部接口•高速的4线串行接口,支持多片级联,时钟速度从0到10MHz。•串行接口中的DIN和DCLK信号线可以与其它接口电路共用,节约引脚。•完全内置时钟振荡电路,通常不需要外接晶体或者阻容振荡。•内置上电复位和看门狗Watch-Dog,提供高电平有效和低电平有效复位输出。3功能CH451是一个多功能外围芯片,通过可以级联的4线串行接口与单片机、DSP、微处理器等交换数据。CH451包含三个功能:数码管显示驱动、键盘扫描控制、^P监控,三个功能之间相互独立,单片机可以通过操作命令分别启用、关闭、设定CH451的任何一个功能。CH451的串行接口是由硬件实现的,单片机可以频繁地通过串行接口进行高速操作,而绝不会降低CH451的工作效率。4操作命令4.1空操作:OOOOxxxxxxxxb空操作命令不对CH451产生任何影响。该命令可以在多个CH451级联的应用中,透过前级CH451向后级CH451发送操作命令而不影响前级的状态。例如,要将操作命令001000000001B发送给两级级联电路中的后级CH451(后级CH451的DIN连接前级CH451的DOUT),只要在该命令后添加空操作命令000000000000B再发送,简化描述是1"0"0"0"0"0"0”0”0”「0”0”0"0"0"0"0"0"0"0"0"0"0”0”L那么,该操作命令将经过前级CH451到达后级CH451,而空操作命令留给了前级CH451。另外,为了在不影响CH451的前提下变化DCLK以清除看门狗计时,也可以发送空操作命令,在非级联的应用中,空操作命令可以只发送有效数据B8〜B11,简化描述是0”0”0”0”1。芯片内部复位:001000000001B内部复位命令将CH451的各个寄存器和各种参数复位到默认的状态。芯片上电时,CH451总是被复位,此时各个寄存器均复位为0,各种参数均恢复为默认值。字数据左移:001100000000B字数据左移命令将CH451的字数据左移一次,即从DIG0向DIG7移动一位,然后最右边的DIG0补进数据00H。例如,在数码管DIG7〜DIG0显示“87654321”时,执行字数据左移命令,显示变为“7654321” (不译码方式)或者“76543210”(BCD译码方式)。字数据右移:001100000010B字数据右移命令将CH451的字数据右移一次,即从DIG7向DIG0移动一位,然后最左边的DIG7补进数据00H。例如,在数码管DIG7〜DIG0显示“87654321”时,执行字数据右移命令,显示变为“8765432” (不译码方式)或者“08765432”(BCD译码方式)。字数据左循环:001100000001B字数据左循环命令将CH451的字数据左循环一次,即从DIG0向DIG7移动一位,然后最右边的DIG0补进原DIG7的数据。例如,在数码管DIG7〜DIG0显示“87654321”时,执行字数据左循环命令,显示变为“76543218”。字数据右循环:001100000011B字数据右循环命令将CH451的字数据右循环一次,即从DIG7向DIG0移动一位,然后最左边的DIG7补进原DIG0的数据。例如,在数码管DIG7〜DIG0显示“87654321”时,执行字数据右循环命令,显示变为“18765432”。设定系统参数:010000000[WDOG][KEYB][DISP]B设定系统参数命令用于设定CH451的系统级参数:看门狗使能WDOG,键盘扫描使能KEYB,显示驱动使能DISP。各个参数均通过1位数据控制,将相应的数据位置为1则启用该功能,否则关闭该功能(默认值)。例如,命令数据010000000011B表示关闭看门狗的功能、启用键盘扫描的功能、启用显示扫描驱动的功能。设定显示参数:0101[MODE][LIMIT][INTENSITY]B设定显示参数命令用于设定CH451的显示参数:译码方式MODE,扫描极限LIMIT,显示亮度INTENSITY。译码方式MODE通过1位数据控制,置1时选择BCD译码方式,置0时选择不译码方式(默认值)。扫描极限LIMIT通过3位数据控制,数据001B〜111B和000B分别设定扫描极限为1〜7和8(默认值)。显示亮度INTENSITY通过4位数据控制,数据0001B〜1111B和0000B分别设定显示驱动占空比为1/16〜15/16和16/16(默认值)。例如,命令数据010101110000B表示选择不译码方式、扫描极限为7、显示驱动占空比为16/16;命令数据010110001010B表示选择BCD译码方式、扫描极限为8、显示驱动占空比为10/16。设定闪烁控制:0110[D7S][D6S][D5S][D4S][D3S][D2S][D1S][D0S]B设定闪烁控制命令用于设定CH451的闪烁显示属性:D7S〜D0S分别对应于8个字驱动DIG7〜DIG0。闪烁属性D7S〜D0S分别通过1位数据控制,将相应的数据位置为1则使能闪烁显示,否则为正常显示,不闪烁(默认值)。例如,命令数据011000100001B表示设定数码管DIG5和DIG0闪烁显示,其余数码管正常显示,不闪烁。加载字数据:1[DIG_ADDR][DIG_DATA]B加载字数据命令用于将字数据DIG_DATA写入DIG_ADDR指定地址的数据寄存器中。DIG_ADDR通过3位数据指定数据寄存器的地址,数据000B〜111B分别指定地址0〜7,对应于DIG0〜DIG7引脚驱动的8个数码管。DIG_DATA是8位的字数据。例如,命令数据100001111001B表示将字数据79H写入第1个数据寄存器,如果是不译码方式,则DIG0引脚驱动的数码管将显示E;命令数据110010001000B表示将字数据88H写入第5个数据寄存器,如果是BCD译码方式,则DIG4引脚驱动的数码管将显示8.。读取按键代码:0111xxxxxxxxB读取按键代码命令用于获得CH451最近检测到的有效按键的按键代码。该命令是唯一的具有数据返回的命令,CH451从DOUT引脚输出按键代码,按键代码总是7位数据,最高位是状态码,位5〜位0是扫描码。读取按键代码命令的位数据B0〜B7可以是任意值,所以单片机可以将该操作命令缩短为4位数据B8〜B11。例如,CH451检测到有效按键并中断,按键代码是5EH,简化描述「「「0"1H"L"H"H"H"H"L"表示先向CH451发出读取按键代码命令0111xxxxxxxxB,然后从DOUT获得按键代码5EH。操作命令位11位10位9位8位7位6位5位4位3位2位1位。空操作0000XXXXXXXX芯片内部复位001000000001字数据左移001100000000字数据右移001100000010字数据左循环001100000001字数据右循环001100000011设定系统参数010000000WDOGKEYBDISP设定显K参数0101MODELIMITINTENSITY设定闪烁控制0110D7SD6SD5SD4SD3SD2SD1SDOS加载字数据01000DMLDATA,DIG。对应的字数据加载字数据11001DIG-DATA,DIG1对应的字数据加载字数据21010DIG_DATA,DIG2对应的字数据加载字数据31011DIG_DATA,DIG3对应的字数据加载字数据41100DIG.DATA,DIG4对应的字数据加载字数据51101DIG_DATA,DIG5对应的字数据加载字数据61110DIG_DATA,DIG6对应的字数据加载字数据71111DIG_DATA,DIG7对应的字数据读取按键代码0111XXXXXXXX5键盘扫描CH451的键盘扫描功能支持8X8矩阵的64键键盘。在键盘扫描期间,DIG7〜DIG0引脚用于列扫描输出,SEG7〜SEG0引脚都带有内部下拉电阻,用于行扫描输入;当启用键盘扫描功能后,DOUT引脚的功能由串行接口的数据输出变为键盘中断以及数据输出。CH451定期在显示驱动扫描过程中插入键盘扫描。在键盘扫描期间,DIG7〜DIG0引脚按照DIG0至DIG7的顺序依次输出高电平,其余7个引脚输出低电平;SEG7〜SEG0引脚的输出被禁止,当没有键被按下时,SEG7〜SEG0都被下拉为低电平;当有键被按下时,例如连接DIG3与SEG4的键被按下,则当DIG3输出高电平时SEG4检测到高电平;为了防止因为按键抖动或者外界干扰而产生误码,CH451实行两次扫描,只有当两次键盘扫描的结果相同时,按键才会被确认有效。如果CH451检测到有效的按键,则记录下该按键代码,并通过DOUT引脚产生低电平有效的键盘中断,此时单片机可以通过串行接口读取按键代码;在没有检测到新的有效按键之前,CH451不再产生任何键盘中断。CH451不支持组合键,也就是说,同一时刻,不能有两个或者更多的键被按下;如果多个键同时按下,那么按键代码较小的按键优先。CH451所提供的按键代码为7位,位2〜位0是列扫描码,位5〜位3是行扫描码,位6是状态码(键按下为1,键释放为0)。例如,连接DIG3与SEG4的键被按下,则按键代码是1100011B或者63H,键被释放后,按键代码通常是0100011B或者23H,其中,对应DIG3的列扫描码为011B,对应SEG4的行扫描码为100B。单片机可以在任何时候读取按键代码,但一般在CH451检测到有效按键而产生键盘中断时读取按键代码,此时按键代码的位6总是1,另外,如果需要了解按键何时释放,单片机可以通过查询方式定期读取按键代码,直到按键代码的位6为0。下表是连接在DIG7〜DIG0与SEG7〜SEG0之间的键被按下时,CH451所提供的按键代码。这些按键代码具有一定的规律,如果需要键被释放时的按键代码,则将表中的按键代码的位6置0,也就是将表中的按键代码减去40H。按键代码DIG7DIG6DIG5DIG4DIG3DIG2DIG1DIG0SEG047H46H45H44H43H42H41H40HSEG14FH4EH4DH4CH4BH4AH49H48HSEG257H56H55H54H53H52H51H50HSEG35FH5EH5DH5CH5BH5AH59H58HSEG467H66H65HS4H63H62H61H6QHSEG56FH6EH6DH0CH6BH6AH69H68HSEG677H76H75H74H73H72H71H70HSEG77FH7EH7DH7CH7BH7AH79H78IH2.574HC138芯片简介74HC138概述74HC138是一款高速CMOS器件,74HC138引脚兼容低功耗肖特基TTL(LSTTL)系列。74HC138译码器可接受3位二进制加权地址输入(A0,A1和A3),并当使能时,提供8个互斥的低有效输出(Y0至Y7)°74HC138特有3个使能输入端:两个低有效(E1和E2)和一个高有效(E3)。除非E1和E2置低且E3置高,否则74HC138将保持所有输出为高。利用这种复合使能特性,仅需4片74HC138芯片和1个反相器,即可轻松实现并行扩展,组合成为一个1-32(5线到32线)译码器。任选一个低有效使能输入端作为数据输入,而把其余的使能输入端作为选通端,则74HC138亦可充当一个8输出多路分配器,未使用的使能输入端必须保持绑定在各自合适的高有效或低有效状态。74HC138与74HC238逻辑功能一致,只不过74HC138为反相输出。

74HC138特性•多路分配功能•复合使能输入,轻松实现扩展兼容JEDEC标准no.7A•存储器芯片译码选择的理想选择•低有效互斥输出ESD保护oHBMEIA/JESD22-A114-C超过2000VoMMEIA/JESD22-A115-A超过200V•温度范围o-40〜+85°Co-40〜+125C74HC13SPlruconTIguFfll^nm[VEI叵改叵E3叵?7[T74HC13SPlruconTIguFfll^nm[VEI叵改叵E3叵?7[TGMD叵始一也71磴弟靠玷而IP1土SC16, gnd3.1.系统硬件设计选用LJD-SY-5200单片机实验系统,主要使用cpu的p0口控制74ch573以及led,74ls138接p1.5,1.6,1.7.ch451的load接p1.2,dinp3.5dclkp3.4doutp3.3.ds1302sclkp1.1I/Op1.0rstp1.4.存储器24c02sclp1.1,sdap1.0.3.2Lcd液晶下面介绍其工作原理,其中有四个寄存器AC,GGRAM,DDRAM,GGROM.GGROM:提供8192个触发器选择屏幕的开和关。Dff=1的时候就将DDRAM的内容显示在lcd上。DDRAM:实际上是提供了64*2个位组的空间,而且可以控制字型。(也就是要输出的内容)GGROM:可提供四组图象自定义空间,可以将没有的字自定义到GGROM,在显示到lcd上。

10、写资料到驰CODE;RWRSDB7DB6DB3DMLB3DBSDB1UBO1.LD71)6D5[>4D3足LIDO功能:写入资料到内部的盅观JK■出RAM的信CODE: RW RS(DL1RA1{/CGR.AM/II?.^I/CDR.W)DB7DB6UB5 D网LB3DBSDB1UBOTHD71)605D3[)2D]DO3.38段数码管下面介绍其工作原理,由于是跟ch451相连,dig0-7实现的是数码管选择,而seg0-7实现的各段的点亮。所以控制的核心就是cpu与ch451的控制4系统的软件设计4.1程序设计与调试步骤(1) 选题构思,研究实现功能的方法。(2) 画出硬件图。(3) 编写程序,并保存。(4) 按硬件接线图接线。(5) 联机并编译。(6) 检查并修改语法错误,并保存。(7) 编译文件,并运行,观察调试结果。(8) 如不能正常运行,采用单步运行法进行调试,按部就班,直至能够达到设计要求。(9) 记录最终的程序,并保存设计图与电路图。4.2计数器初值计算延时方法可以有两种一中是利用MCS-51内部定时器才生溢出中断来确定1秒的时间,另一种是采用软延时的方法。定时器工作时必须给计数器送计数器初值,这个值是送到TH和TL中的。他是以加法记数的,并能从全1到全0时自动产生溢出中断请求。因此,我们可以把计数器记满为零所需的计数值设定为C和计数初值设定为TC可得到如下计算通式:TC=M-C式中,M数初值设定为TC可得到如下计算通式:TC=M-C式中,M为计数器摸值,该值和计数器工作方式有在方式0时M为213;在方式1时M的值为216;方式2和3为28「F口山届占岩BBBBIII~~II―II~~I

QQQQ2EGSX,■O关。4.2.11秒的方法我们采用在主程序中设定一个初值为20的软件计数器和使T0定时50毫秒.这样每当T0到50毫秒时CPU就响应它的溢出中断请求,进入他的中断服务子程序。在中断服务子程序中,CPU先使软件计数器减1,然后判断它是否为零。为零表示1秒已到可以返回到输出时间显示程序。4.3时间显示4.3.1写保护寄存器操作当写保护寄存器的最高位为0时允许数据写入寄存器写保护寄存器可以通过命令字节8E8F来规定禁止写入/读出写保护位不能在多字节传送模式下写入Write_Enable:MOVCommand,#8Eh;命令字节为8EMOVByteCnt,#1;单字节传送模式MOVR0,#XmtDat数据地址覆给R0MOVXmtDat,#00h数据内容为0写入允许ACALLSend_Byte调用写入数据子程序RET返回调用本子程序处4.3.2时钟停止位操作当把秒寄存器的第7位时钟停止位设置为0时起动时钟开始Osc_Enable:MOVCommand,#80h;命令字节为80MOVByteCnt,#1;单字节传送模式MOVR0,#XmtDat数据地址覆给R0MOVXmtDat,#00h数据内容为0振荡器工作允许ACALLSend_Byte调用写入数据子程序RET返回调用本子程序处4.3.3.多字节传送方式当命令字节为BE或BF时DS1302工作在多字节传送模式8个时钟/日历寄存器从寄存器0地址开始连续读写从0位开始的数据当命令字节为FE或FF时DS1302工作在多字节RAM传送模式31个RAM寄存器从0地址开始连续读写从0位开始的数据例如写入00年6月21日星期三13时59分59秒程序设置如下Write_Multiplebyte:MOVCommand,#0BEh;命令字节为BEhMOVByteCnt,#8;多字节写入模式此模块为8个MOVR0,#XmtDat数据地址覆给R0MOVXmtDat,#59h秒单元内容为59hMOVXmtDat+1,#59h分单元内容为59hMOVXmtDat+2,#13h时单元内容为13hMOVXmtDat+3,#21h日期单元内容为21hMOVXmtDat+4,#06h月单元内容为06hMOVXmtDat+5,#03h星期单元内容为03hMOVXmtDat+6,#0年单元内容为00hMOVXmtDat+7,#0写保护单元内容为00hACALLSend_Byte调用写入数据子程序RET返回调用本子程序处读出寄存器0-7的内容程序设置如下Read_Multiplebyte:MOVCommand,#0BFh;命令字节为BFhMOVByteCnt,#8;多字节读出模式此模块为8个MOVR1,#RcvDat数据地址覆给R1ACALLReceive_Byte调用读出数据子程序RET返回调用本子程序处5结论本系统就是充分利用了8051芯片的I/O引脚。系统统采用MSC-51系列单片机来设计交通灯控制器,实现了数码管上显示hello,大约2秒之后数码管清屏,然后8*8led开始显示交通指示灯,此时数码管上同步显示到记时3,2,1。然后转向下一个指示灯(转向)。完成之后,用键盘键入初值,依次在数码管上显示。由于使用的是单片机作为核心的控制元件,使得电路的可靠性比较高,功能也比较强大,而且可以随时的更新系统,进行不同状态的组合。但是在我们设计和调试的过程中,也发现了一些问题,譬如红灯和绿灯的切换还不够迅速,红绿灯规则不效率还不是很高,在数码管1秒定时显示时结果初值获取不正确,导致显示的值与意向中得值不同。这需要在实践中进一步完善。通过这次单片机实验设计,使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。使我在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧(特别是汇编语言)的掌握方面都能向前迈了一大步,为日后成为合格的应用型人才打下良好的基础。附录:系统总原理图和程序1、系统总体原理图TAI斗 ILL11BBBE占3占31“E占SI7,项冬3BBB333 ] 匚二—I-s.”111匚.■--.■1 QJT一■卜~J4―<———,■-.匚—~~■.—i—5~"T— QL~P""——1—^2^iit' L>Hi-42、流程图按键流图总流程图1开始)************/*******************************************************************************/************/*******************************************************************************/描述:3、程序代码*通过8位数码管显示当前的时间包括时分秒通过时间设置键可对当前的时间进*行设置。共有3个设置按键按键1和按键2及按键3;按键1为选定键。按键1首次被*按下时钟停止走时并且秒时间开始闪烁,此时可通过按键2对秒时间进行设置,*按键2按下一次秒时间数值加一。当按键1第二次被按下时分时间被选中并不停*地闪烁,此时通过按键2可对分时间进行设置,按键2按下一次分时间加一。按键*第三次被按下时小时时间被选中并且不停的闪烁,此时通过按键2可对小时时间进*行设置,按键2每按下一次小时时间加一按键1第四次被按下后时间设置结束,时*钟从设定的时间开始走时。按键3为日期和时间的切换键,按键3按下一次显示日*期,再按下一次显示时间。使用按键3可在日期和时间之间来回进行切换。 ************************************************************************************【版权】Copyright(C)微芯科技http://www.bluemcu.comAllRightsReserved**【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! ********************************************************************************/#include<reg52.h>//#include<stdio.h>#include<absacc.h>#include<intrins.h>/*须主程序定义的参数*//*如果使用键盘中断请定义#defineUSE_KEY*//*须主程序定义的参数*/#defineCH451_RESET 0x0201#defineCH451_LEFTMOV 0x0300#defineCH451_LEFTCYC 0x0301#defineCH451_RIGHTMOV 0x0302#defineCH451_RIGHTCYC 0x0303#defineCH451_SYSOFF 0x0400#defineCH451_SYSON1 0x0401#defineCH451_SYSON2 0x0403#defineCH451_SYSON3 0x0407#defineCH451_DSP 0x0500#defineCH451_BCD 0x0580#defineCH451_TWINKLE 0x0600#defineCH451_DIG0 0x0800#defineCH451_DIG1 0x0900#defineCH451_DIG2 0x0a00/*复位*//*设置移动方式-作移*//*设置移动方式-左循*//*设置移动方式-右移*//*设置移动方式-右循*//*关显示、键盘、看门狗*//*开显示*//*开显示、键盘*//*开显示、键盘、看门狗功能*//*设置默认显示方式*//*设置BCD译码方式*//*设置闪烁控制*//*数码管位0显示*//*数码管位1显示*//*数码管位2显示*/#defineCH451_DIG30x0b00/*数码管位3显示*/#defineCH451_DIG40x0c00/*数码管位4显示*/#defineCH451_DIG50x0d00/*数码管位5显示*/#defineCH451_DIG60x0e00/*数码管位6显示*/#defineCH451_DIG70x0f00/*数码管位7显示*/#defineuchar■unsignedchar#defineuintunsignedintsbitaa=P2”0;sbitbb=P2”3;sbitSDA=P1”0;sbitSCL=P1”1;sbitP1_4=P1”4;sbitP1_3=P1”3;sbitP1_5=P1”5;/*函数声明*/voidiic_wait(void);voidiic_start(void);voidiic_stop(void);voidiic_ack(void);voidiic_no_ack(void);bitiic_wait_ack(void);voidiic_send_byte(uchardemand);uchariic_receive_byte(void);#defineLED8X8R XBYTE[0xFD00]#defineLED8X8G XBYTE[0xFB00]/*iic数据传送位*//*iic时钟控制位*//*iic延时*//*开启iic总线*//*关闭iic总线 *//*发送ACK信号*//*发送NOACK信号*//*等待ACK信号*//*MCU向iic设备发送一个字节*//*MCU从iic设备接收一个字节*//*红色LED电亮地址定义*//*绿色LED点亮地址定义*/#defineucharunsignedchar#defineuintunsignedint/*实时时钟时钟线引脚*//*实时时钟数据线引脚/*实时时钟时钟线引脚*//*实时时钟数据线引脚*//*实时时钟复位线引脚*/sbit T_IO = P1”0;sbit T_RST = P1”4;sbit ch451_din = P3”5;sbit ch451_clk = P3”4;sbit ch451_load = P1”2;sbit ch451_dout = P3”3;sbitACC0=ACC"0;sbitACC7=ACC"7;sbitflag_time=PSW5;ucharucharucharucharucharucharucharucharucharucharucharucharucharcount;M;N;ch451_key;key_flag;g;p;ds_hour;ds_min;ds_sec;ds_date;ds_month;ds_year;unsignedunsigned/*void/*uchar/*void/*uchar/*void/*voiducharucharucharucharucharucharucharucharcharz,x;chary;RTInputByte(uchar);RTOutputByte(void);W1302(uchar,uchar);R1302(uchar);Set1302(uchar*);Get1302(ucharcurtime[]);/*/*输入IByte*/输出?1Byte*/设置时间*/读取1302当前时间*/WClock[7]={0x00,0x01,0x02,0x22,0x07,0x06,0x06};SClock[7];code[8]={0x1f,0x3f,0x5f,0x7f,0x9f,0xbf,0xdf,0xff};Code4[8]={0xEF,0xCF,0x80,0x00,0x00,0x80,0xCF,0xEF};Code5[8]={0xFF,0x03,0x01,0x01,0xF1,0xE0,0xF1,0xFB};Code6[8]={0xFB,0xF1,0xE0,0xF1,0x01,0x01,0x03,0xFF};Code7[8]={0xDF,0x8F,0x07,0x8F,0x80,0x80,0xC0,0xFF};DATA;/*/*idatatest_write[104];idatatest_read[104];ucharucharunsignedchark;voiddelayd(void)(uinti;uintj;for(i=0;i<300;i++)for(j=0;j<100;j++);}voiddelayq(void)(uchari;ucharj;for(i=0;i<100;i++)for(j=0;j<100;j++);}/*iic延时*/voidiic_wait(void)(;;;;;;;;;;;;;;}/*开启iic总线*/voidiic_start(void)(SDA=1;SCL=1;iic_wait();SDA=0;iic_wait();SCL=0;}/*关闭iic总线*/voidiic_stop(void)(SDA=0;SCL=0;iic_wait();SCL=1;iic_wait();SDA=1;}/*发送ACK信号*/voidiic_ack(void)SDA=0;iic_wait();SCL=1;iic_wait();SCL=0;}/*发送NOACK信号*/voidiic_no_ack(void)(SDA=1;iic_wait();SCL=1;iic_wait();SCL=0;}/********************************************************************函数名:iic_wait_ack功 能:等待ACK信号说 明:入口参数:返回值:1-ACK 0-ERROR设 计:蓝海微芯***********************************************************************/bitiic_wait_ack(void)(ucharerrtime=255;//uinterrtime=1000;SDA=1;iic_wait();SCL=1;iic_wait();while(SDA)(errtime--;if(!errtime)return0;}SCL=0;return1;}/********************************************************************函数名:iic_send_byte功 能:MCU向iic设备发送一个字节说 明:入口参数:sbyte 待发送的字节数据返回值:设 计:蓝海微芯***********************************************************************/voidiic_send_byte(ucharsbyte)(uchari=8;while(i--)(SCL=0;;SDA=(bit)(sbyte&0x80);sbyte<<=1;iic_wait();SCL=1;iic_wait();}SCL=0;}/********************************************************************函数名:iic_receive_byte功 能:MCU从iic设备接收一个字节说 明:入口参数:返回值:ddata接收数据设计:蓝海微芯***********************************************************************/uchariic_receive_byte(void)(uchari=8;ucharddata=0;SDA=1;while(i--)(ddata<<=1;SCL=0;iic_wait();SCL=1;iic_wait();ddata|=SDA;}SCL=0;returnddata;}/********************************************************************函数名:write_iic_data功 能:向iic设备写AN个字节说 明:入口参数:write_data 存放写入字节的数组address 指定从address处开始写入num 写入的字节数返回值:无设 计:蓝海微芯***********************************************************************/voidwrite_iic_data(ucharwrite_data[],ucharaddress,ucharnum)(ucharn;iic_start();iic_send_byte(0xa0);iic_wait_ack();iic_send_byte(address);iic_wait_ack();for(n=0;n<num;n++)(iic_send_byte(write_data[n]);iic_wait_ack();}iic_stop();}/********************************************************************函数名:read_iic_data功 能:从iic设备读取N个字节说 明:入口参数:read_data 存放读取字节的数组address 指定从address处开始读取num 读取的字节数返回值:无设计:蓝海微芯***********************************************************************/voidread_iic_data(ucharread_data[],ucharaddress,ucharnum)(ucharn;uchar*pread_data;pread_data=read_data;iic_start();iic_send_byte(0xa0);iic_wait_ack();iic_send_byte(address);iic_wait_ack();iic_start();iic_send_byte(0xa1);iic_wait_ack();for(n=0;n<num;n++)(*pread_data=iic_receive_byte();pread_data++;if(n!=(num-1)) //最后一个数据不应答(iic_ack();}}iic_no_ack();iic_stop();}voiddelay(void)(uinti;uintj;for(i=0;i<200;i++);for(j=0;j<500;j++);}voiddelay_10us(void)(uchari;for(i=0;i<20;i++);}/********************************************************************函数名:RTInputByte()功 能:实时时钟写入一字节说 明:往DS1302写入1Byte数据(内部函数)入口参数:d写入的数据返回值:无设计:蓝海微芯***********************************************************************/voidRTInputByte(uchard)(uchari;ACC=d;for(i=8;i>0;i--)(T_IO=ACC0; /*相当于汇编中的RRC*/T_CLK=1;T_CLK=0;ACC=ACC>>1;}}/********************************************************************函数名:RTOutputByte()功 能:实时时钟读取一字节说 明:从DS1302读取1Byte数据(内部函数)入口参数:无返回值:ACC设计:蓝海微芯***********************************************************************/ucharRTOutputByte(void)(uchari;for(i=8;i>0;i--)(ACC=ACC>>1; /*相当于汇编中的RRC*/ACC7=T_IO;T_CLK=1;T_CLK=0;}return(ACC);}/********************************************************************函数名:W1302()功 能:往DS1302写入数据说 明:先写地址,后写命令/数据(内部函数)调 用:RTInputByte(),RTOutputByte()入口参数:ucAddr:DS1302地址,ucData:要写的数据返回值:无设计:蓝海微芯***********************************************************************/voidW1302(ucharucAddr,ucharucDa)(T_RST=0;T_CLK=0;T_RST=1;RTInputByte(ucAddr); /*地址,命令*/RTInputByte(ucDa); /*写1Byte数据*/T_CLK=1;T_RST=0;}/********************************************************************函数名:R1302()功 能:读取DS1302某地址的数据说 明:先写地址,后读命令/数据(内部函数)

调用:RTInputByte(),RTOutputByte()入口参数:ucAddr:DS1302地址返回值:ucData:读取的数据设计:蓝海微芯***********************************************************************/ucharR1302(ucharucAddr)(ucharucData;T_RST=0;T_CLK=0;T_RST=1;RTInputByte(ucAddr); /*地址,命令*/ucData=RTOutputByte(); /*读1Byte数据*/T_CLK=1;T_RST=0;return(ucData);}/********************************************************************函数名:Set1302()功说调能:设置初始时间功说调明:先写地址,后读命令/数据(寄存器多字节方式)用:W1302()入口参数:pClock:设置时钟数据地址格式为:秒分时日月星期年7Byte(BCD码)1B1B1B1B1B1B1B返回值:无设计:蓝海微芯***********************************************************************/voidSet1302(uchar*pClock)(uchari;ucharucAddr=0x80;W1302(0x8e,0x00); /*控制命令,WP=0,写操作?*/for(i=7;i>0;i--)(W1302(ucAddr,*pClock);/*秒分时日月星期年*/pClock++;ucAddr+=2;}W1302(0x8e,0x80); /*控制命令,WP=1,写保护?*/}/********************************************************************函数名:Get1302()功 能:读取DS1302当前时间说 明:调用:R1302()入口参数:ucCurtime:保存当前时间地址。当前时间格式为:秒分时日月星期年7Byte(BCD码)1B1B1B1B1B1B1B返回值:无设计:蓝海微芯***********************************************************************/voidGet1302(ucharucCurtime[])(uchari;ucharucAddr=0x81;for(i=0;i<7;i++)(ucCurtime[i]=R1302(ucAddr);/*格式为:秒分时日月星期年*/ucAddr+=2;}}/********************************************************************函数名:ch451_bcd()功能:对从DS1302读取的时间值进行转化说 明:把一字节的BCD码格式的时间值分成两字节调 用:入口参数:ds_bcd返回值:设计:蓝海微芯***********************************************************************/voidch451_bcd(uchards_bcd)(M=ds_bcd&0xf0;M>>=4;N=ds_bcd&0x0f;}/********************************************************************函数名:ch451_init()功 能:对ch451芯片进行初始化说 明:调 用:入口参数:返回值:设计:蓝海微芯***********************************************************************/voidch451_init(void)(ch451_din=0; /*先低后高,选择4线输入*/ch451_din=1;

ch451_load=1;ch451_clk=1;_nop_();}/********************************************************************函功说数名:ch451_write()能:把12位的指令或数据写入ch451明:12位数据或指令的写入顺序是低位用:入口参数:command数名:ch451_write()能:把12位的指令或数据写入ch451明:12位数据或指令的写入顺序是低位用:入口参数:command返回值:设计:蓝海微芯***********************************************************************/voidch451_write(unsignedintcommand)(unsignedchari;#ifdefUSE_KEYEX1=0;#endifch451_load=0;for(i=0;i<12;i++)(ch451_din=command&1;ch451_

温馨提示

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

评论

0/150

提交评论