带cet考试的电子时钟硬件设计毕业论文(编辑修改稿)内容摘要:

南昌工程学院本 (专 )科毕业设计 (论文 ) 7 MC9S12XS128 的 112 引脚封装图 输入输出端口功能和配置 通用 I/O 通过配置相应寄存器位,可以设置为输入 /输出端口、驱动能力、内置上拉 /下拉电阻使用、中断输入方式等多种功能。 下面我们以 80 引脚的 MC9S12XS128 单片机讨论其各个 I/O 的配置和功能 : PORTA 口 PORTA 为通用 I/O 口 , 共 8 个 ,作为通用数字 I/O 口使用 ,未集成特殊功能 .主要配置寄存器有:数据寄存器 PORTA、数据方向寄存 DDRA、上拉电阻控制寄存器 PUCR 和驱动控制寄存器 RDR。 南昌工程学院本 (专 )科毕业设计 (论文 ) 8 PORTA 通过写 1/0 使单片机对应引脚输出高低电平,或通过读取数据寄存器获得对应引脚的高低电平值。 例: PORTA_PB0=1 DDRA DDRA 寄存器配置引脚为输出口还是输入口,“ 0”,输入口;“ 1”,输出口。 MCU 复位后, DDRA 值为 0x00, 引脚默认为输入口。 例: DDRA=0xFF //配置 PORTA 口为输出 c. 上拉电阻控制寄存器 PUCR PORTA 、 PORTB、 PORTE、 PORTK 端口都有内置上拉电阻,它们共用上拉电阻控制寄存器 PUCR。 PUCR 的 0 位分别设置这 4 个端口。 “ 1”对应端口上拉电阻使能 ;“ 0”上拉电阻禁止。 PUCR 第 6 位设置 BKGD 引脚上拉电阻 , 复位为 1,默认使用上拉。 例: PUCR_PUPAE=1 //使能 PORTA 上拉电阻 d. 驱动控制寄存器 RDR 南昌工程学院本 (专 )科毕业设计 (论文 ) 9 当 PORTA 、 PORTB、 PORTE、 PORTK 端口设置为输出口时,驱动控制寄存器 RDR的 0 位分别设置这 4 个端口的输出驱动能力。 “ 1”输出驱动能力降低;“ 0”正常输出驱动方式。 . 2. PORTB 口 PORTB 为通用数字 I/O 口 , 共 8 个。 其使用与 PORTA 基本一样。 主要配置寄存器有:数据寄存器 PORTB、数据方向寄存 DDRB。 上拉电阻控制寄存器 PUCR 和驱动 控制寄存器RDR 与 PORTA 、 PORTB、 PORTE、 PORTK 共用。 PORTB DDRB . 3. PORTE 口 PORTE 可作为通用数字 I/O 口使用 , 80 封装也有共 8 个引脚。 其使用与 PORTA 基本一样。 但是 PORTE 中集成了外部中断输入功能,其 PE0/XIRQ 和 PE1/IRO 引脚可作为外部中断南昌工程学院本 (专 )科毕业设计 (论文 ) 10 输入。 并且这两位只能作为输入口使用。 主要配置寄存器有:数据寄存器 PORTE、数据方向寄存 DDRE。 PORTE DDRE PORTK 口 PORTK 为通用数字 I/O 口。 但从前表可以看出 112 封装单片机 PORTK 口有 7 个, 80封装和 64 封装没有 PORTK 口。 其使用与 PORTA 基本一样。 主要配置寄存器有:数据寄存器 PORTK、数据方向寄存 DDRK。 PORTH 口 PORTH 可作为通用数字 I/O 口使用 , 也集成了外部中断输入功能。 但 80 封装没有PORTH 口,在此不作详细描述。 PORTT 、 PORTS 、 PORTM 、 PORTP 、 PORTH 、 PORTJ 此 6 个端口的寄存器名称和功能基本上是一样的。 主要配置寄存器有:数据寄存器PTx、输入寄存器 PTIx、数据方向寄存 DDRx、驱动控制寄存器 RDRx、上拉 /下拉使能寄存器 PERx 和上拉 /下拉选择寄存器 PPSx 共 6 个寄存器。 因 PORTP 、 PORTH 、 PORTJ三个端口具有外部中断功能,增加了中断使能寄存器 PIEx 和中断标志寄存器 PIFx 两个寄存器。 南昌工程学院本 (专 )科毕业设计 (论文 ) 11 PTx: 与通用通用 I/O 口的数据寄存器操作和功能基本一样。 只是 PORTJ只能对最低两位和最高两位进行有效操作。 PTIx 输入寄存器是只读寄存器,对应引脚为输入时,读取 PTIx 返回引脚电平值。 DDRx:与通用 I/O 口的数据方向寄存器操作和功能基本一样。 RDRx 与通用 I/O口的驱动控制寄存器 RDR操作和功能基本一样。 “ 1”输出驱动能力为正常时的 1/5;“ 0”正常输出驱动方式。 /下拉使能寄存器 PERx “ 1”选择使用内部上拉 /下拉电阻,“ 0”禁用,复位值为 0。 /下拉选择寄存器 PPSx “ 1”选择使用内部下拉电阻,“ 0”选择使用内部上拉电阻,复位值为 0。 PORTP 、 PORTH 、 PORTJ 具有外部中断功能 ,当对应引脚使能中断时,则 PPSx 对应位为“ 1”时,中断为下降沿出发,“ 0”中断为上升沿出发。 PIEx PORTP、 PORTH 、 PORTJ 中断使能位 ,“ 1”允许中断,“ 0”禁止中断,复位为 0。 PIFx 使用中断时,对应引脚的中断标志位。 向对应位写“ 1”清除中断标志位。 本章小结 本章主要介绍了一下 MC9S12XS128 的相关特性, 认真了解一下对本次设计以及今后的发展还是很有帮助的。 南昌工程学院本 (专 )科毕业设计 (论文 ) 12 南昌工程学院本 (专 )科毕业设计 (论文 ) 13 第四章硬件设计 实验模块 图 整体原理图 实时时钟模块 PCF8563T 是低功耗的 CMOS 实时时钟 /日历芯片,它提供一个可编程时钟输出,一个中断输出和掉电检测器,所有数据和地址通过 I2C 总线接口串行传递,最大总线速度为400kbits/s,每次读写数据后,内嵌的地址寄存器会自动产生增量。 图 管脚配置图 南昌工程学院本 (专 )科毕业设计 (论文 ) 14 图 管脚描述表 图 实时时钟原理图 电源模块 南昌工程学院本 (专 )科毕业设计 (论文 ) 15 图 电源模块 核心板晶振模块 核心板上有两种频率的晶振,一种是 8MHz 的晶振,此晶振是为了避免高频信号的干扰和提高系统的稳定性,两个电容都采用 27pF;另外一种是 的无源晶振,此晶振是让系统在空闲时能够处于超低功耗并且同时提供准确的唤醒时钟,两个电容同样均采用 27pF。 南昌工程学院本 (专 )科毕业设计 (论文 ) 16 图 晶振模块原理图 BDM 模块 图 原理图 南昌工程学院本 (专 )科毕业设计 (论文 ) 17 背景调试模式 BDM 模式即背景调试模式 (Background Debug Mode),是当前 MCU 普遍采用的调试方式之一,它可用来进行系统开发,在线调试和编程,应用程序的下载和在线更新。 因为 BDM控制模块不寄居在 CPU 中,所以 BDM 硬件命令可以在 CPU 正常运行时被并行执行,其他的 BDM 命令是基于固件的,且必须在 CPU 处于背景调试模式下才能被执行。 BDM 模块利用 CPU的空闲周期和 CPU进行通信,必要时可以从 CPU的工作周期中偷取一个周期。 串行接口 BDM 串行接口通过 BKGD 引脚和外部主机进行通信单线通信,该引脚需要一个外部控制器在 BKGD 引脚上产生一个下降沿来指示位通信的开始,每一位的传递需要至少 16 个 E时钟周期。 BKGD 是一个漏极开路驱动的引脚,平时靠内部上拉电阻维持高电平。 可以被外部控制器或者 MCU 驱动。 如果在两个下降沿之间的时间超过 512 个 E 时钟周期则会产生超时,此时硬件将清除命令寄存器。 目前常用的 BDM 调试头如图所示。 图 调试插头引脚定义 串口模块 南昌工程学院本 (专 )科毕业设计 (论文 ) 18 图 串口模块原理图 红外模块 一般的红外遥控系统是由红外遥控信号发射器、红外遥控信号接收器和微控制器及其外 围电路等三部分构成的。 遥控信号发 射器用来产生遥控编码脉冲,驱动红外发射管输出红外 遥控信号,遥控接收头完成对遥控信号的放大、检波、整形、解调出遥控编码脉冲。 遥控编 码脉冲是一组组串行二进制码,对于一般的红外遥控系统,此串行码输入到微控制器,由其 内部 CPU 完成对遥控指令解码,并执行相应的遥控功能。 南昌工程学院本 (专 )科毕业设计 (论文 ) 19 图 红外按键模块原理图 屏蔽仪模块 主要就是考试时屏蔽学生的手机信号防止其舞弊行为。 图 屏蔽仪模块原理图 南昌工程学院本 (专 )科毕业设计 (论文 ) 20 本章小结 本章主要介绍了本次实验的硬件设计,其中包括开发板各个模块的说明,最后联合软件来实现本次设计的相关功能。 南昌工程学院本 (专 )科毕业设计 (论文 ) 21 第五章软件设计 include include include include include include include include include include include include include include include include include include void Delay1s(void)。 void SetSts(byte sts)。 void InitIO(void)。 void InitVar(void)。 // 初始化所有全局变量 void CloseLcd(void)。 南昌工程学院本 (专 )科毕业设计 (论文 ) 22 void DisplayTime(void)。 byte TimeAlarm(void)。 void UNTestCtl(void)。 void TestingCtl(byte work)。 byte GetKey(void)。 byte SetParam(byte key)。 byte DetectStS(byte key)。 byte SetParam1(byte key,byte *dat)。 void SetDate(void)。 void SetCur(byte CursorID)。 void set1(byte mode)。 byte KeyDetect(byte key,byte work)。 void ClassModeSet(void)。 void InitVar_class(void)。 void InitVar_3(void)。 void InitVar_4(void)。 void InitVar_6(void)。 void InitVar_set(void)。 word ticks。 enum WORK_STS { STS_CLASS=0, STS_KAOSHI3=1, STS_KAOSHI4=2, STS_KAOSHI6=3, STS_SET=4, } void main(void) { byte n,key。 static byte num=0。 南昌工程学院本 (专 )科毕业设计 (论文 ) 23 static byte PreSts。 byte holdtime=0。 byte holdtime1=0。 byte holdtime2=0。 byte holdtime3=0。 byte ChangeTime=0。 PE_low_level_init()。 InitIO()。 InitVar()。 for(n=0。 n50。 n++) DbgDelay()。 worksts=0。 for(。 ) { while(!_50msFlag) {。 }。 _50msFlag = FALSE。 if((GetTick()ticks) 20) //1 秒读取一次时间 { ReadDate(date,4)。 //时间为 BCD 编码 seconds = BCD2Hex(date[0])。 minutes = BCD2Hex(date[1])。 hours = BCD2Hex(date[2])。 } key=GetKey()。 if(key==(SWITCH_KEY+KEY_HOLD)) holdtime++。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。