江苏大学单片机课程设计讲述.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
江苏大学单片机课程设计讲述

单片机课程实验报告 班 级 J计算机1302 学 号 4131110037 姓 名 杨岚 指导老师 余景华 2016.07.09 多功能数字钟的设计要求: 1.能在LED显示器上实现正常的时分秒计时 2.能通过键盘输入当前时间,并从该时间开始计时 3.有校时、校分功能 4.有报时功能,通过指示灯表示 5.有闹时功能,闹时时间可以设定,通过指示灯表示 二、课程设计电路图: 图1 设计电路图 ?HD7279A的片选引脚CS连在P5.7; ·通过C8051F020的P1.6、P1.7连接7279A的CLK和DATA实现串行数据编程; ?KEY连在比较器1的同相输入端CP1P 三、设计思路: 根据课程设计要求,我们要设计一个多功能数字电子时钟,随着人类科技文明的发展,高精度、多功能、小体积、低功耗,是现代时钟发展的趋势。在这种趋势下,时钟的数字化、多功能化已经成为现代时钟生产研究的主导设计方向。本实验正是基于这种设计方向,以单片机(C8051F020)为控制核心,设计制作一个多功能的数字时钟。在这些当中,必须要求要有时钟功能、校时校分功能、整点报时和闹钟功能等。 1.1首先要实现数码管的正常时分秒计时必须初始化系统时钟,初始化I/O端口以及定时器和使能比较器等,为系统的运行做必要的准备。 1.2其次通过键盘输入当前时间并从当前时间开始计时,这个过程中搞清楚,通过键盘输入的数据送到了哪里,是通过什么样的方式送进去的,同时对时间的计时有一个严密的算法来控制。 1.3在时间通过键盘输入并正常显示后,可以通过按键来进行校时、校分的功能。并显示出校正后的时间 1.4通过按键实现闹钟功能,在设置闹钟的同时,原时间能确保正确行走。 7279指令说明:88H,闪烁控制指令,d1-d8对应8个数码管,0表示闪烁,1表示不闪烁。 开始 在键盘上输入时分秒 进入校分校时功能 进入校分校时功能 进入闹钟功能 输入按键(ABCD) 输入按键(F) 当达到整点时, A (校时的高位) F(输入闹钟) 数码管闪烁3秒 B(校时的低位) 当当前时间与闹钟时间相等时, C(校分的高位) 数码管闪烁2秒。 D(校分的低位) 图2 功能模块图 ?输入按键A使得时钟的时高位加1,若时高位值超过2则返回0值。 ?输入按键B使得时钟的时低位加1,若时低位值超过9则返回0值同时时高位加1,最后判断时高位1且时低位3则时高位=0,时低位0。 ?输入按键C使得时钟的分高位加1,若分高位值超过5,则时低位加1,分高位至0。 ?输入按键D使得时钟的分低位加1,若分低位值超过9,则分高位加1,分低位至0。 ?输入按键E使得时钟的秒高位加1,若秒高位值超过5,则分低位加1,秒高位至0。 ?按键F进入闹钟模块。 四、程序的结构图 开始 关看门狗 端口初始化 定时器T0初始化 使能比较器1 开定时器0中断 开总体中断 复位7279 在最右端数码管闪烁显示“—” 从键盘上输入时间InputNum 否有效按键 是 数码管更新显示DispValue 校时校分模块 整点报时模块 闹钟功能 返回显示时间 图3 主程序流程图 五、具体功能模块的设计及实现: 1、端口初始化: 将允许SMBus、SPI0和UART0,使能交叉开关和弱上拉。 实现代码: void PORT_Init (void) { XBR0 = 0x07; //允许SMBus、SPI0和UART0 XBR1 = 0x00; XBR2 = 0x44; //使能交叉开关和弱上拉 } 定时器初始化 将T0以方式一,系统时钟频率计数,1000个脉冲为一秒。 实现代码: void Timer0_Init (void) { CKCON|=0x8; //T0按系统时钟频率计数 TMOD|=0x1; //T0方式1 Count1ms=10; TR0 = 0; //停止T0 TH0 = (-SYSCLK/1000) 8; //定时1ms的时间常数 TL0 = -SYSCLK/1000; TR0 = 1; //启动T0 IE|= 0x2; //开T0中断 } 读取按键值 首先需要判断是否按键,若未按键则返回-1,若按键则记录保存按键的值,将其放在keyvalue中保存。 实现代码: unsigned char GetKeyValue(void) { unsigned char Ke

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档