89C51单片机最小系统设计(电子时钟-秒表-按键计数的单片机设计)_第1页
89C51单片机最小系统设计(电子时钟-秒表-按键计数的单片机设计)_第2页
89C51单片机最小系统设计(电子时钟-秒表-按键计数的单片机设计)_第3页
89C51单片机最小系统设计(电子时钟-秒表-按键计数的单片机设计)_第4页
89C51单片机最小系统设计(电子时钟-秒表-按键计数的单片机设计)_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

一 一 电子时钟 秒表和计数器的设计电子时钟 秒表和计数器的设计 1 实现的功能 实现的功能 1 有 key0 key1 两个功能按键 复位后 数码管会默认显示时钟模式 HH MM HH 表示小时 MM 表示分钟 key0 短按一次就进入到了秒表模式 数码管显示格式 S SS S 分别表示百秒 秒 毫 秒 key0 再短按一次就进入到了计数器模式 数码管显示格式 CCCC 分别为千位百位十 位个位 key0 再短按一次 又进入到了时钟显示模式 就这样由 key0 控制模式的转换 2 有 RST 复位键 本身电路设计有上电自动复位功能 按下 RST 后 电路复位 3 有 ckey0 ckey1 两个计数按键 按下 ckey0 计数加一 按下 ckey1 计数减一 4 电子时钟和秒表时间计时方法是采用 89S52 内部计时器 0 的一种工作方式 详见后面 的代码分析 通过计时器 0 中断来控制时间的运行 5 计数器是采用外部中断 0 和外部中断 1 这两个外部中断实现加 1 和减 1 的操作 1 电子时钟模式电子时钟模式 以下 长按长按 表示按下按键的时间大于大于 1 秒秒 短按短按 表示按下的时间小于小于 0 7 秒秒 1 长按 key1 一次 会进入到调整分钟的模式 短按 key1 一次 分钟会加一 第二次长按 key1 会进入到调整小时的模式 短按 key1 一次 小时加一 第三次长按 key1 重新回到时钟显示模式 这时再短按 key1 时间不会变化 2 长按 key0 一次 会进入到显示秒的模式 2 秒表模式 秒表模式 1 由 key0 控制进入秒表模式后 短按 key1 一次 秒表计时开始 再短按 key1 一 次计时结束 2 长按 key1 一次 秒表清零 3 计数器模式计数器模式 1 按 ckey0 一下 计数加一 数码管相应的显示的数值加一 按 ckey1 一下 计数减一 数码管相应的显示的数值减一 由于数码管的位数限制 最大只能显示到 9999 此时按下 ckey0 无反应 考虑到 实际计数功能 没有设置负数 所以最小显示 0000 这时按下 ckey1 无反应 2 长按 key1 一次计数器清零 2 电路原理图电路原理图 1 使用片内振荡器使用片内振荡器 2 具有上电复位和手动复位两个功能具有上电复位和手动复位两个功能 3 key0 key1 分别接分别接 P1 0 和和 P1 1 引脚引脚 4 由由 P0 0 P0 7 输出到七段数码显示管输出到七段数码显示管 5 由由 P2 0 P2 3 接三极管 驱动共阳七段数码显示管接三极管 驱动共阳七段数码显示管 6 6 ckey0ckey0 ckey1ckey1 接接 P3 2P3 2 和和 P3 3P3 3 两个引脚 为两个外部中断两个引脚 为两个外部中断 4 电路焊接实物图电路焊接实物图 1 1 正面 正面 2 反面 反面 由于显影 腐蚀过程做得不好 导致电路板过度腐蚀 但是经过修改之后 电由于显影 腐蚀过程做得不好 导致电路板过度腐蚀 但是经过修改之后 电 路可以正常运行 并无大碍 只是不美观 路可以正常运行 并无大碍 只是不美观 4 电路板工作时 此时为显示时钟的秒电路板工作时 此时为显示时钟的秒 显示时钟显示时钟 显示秒表显示秒表 显示计数器显示计数器 5 程序设计分析 程序设计分析 1 程序代码 程序代码 include sbit key0 P1 0 sbit key1 P1 1 定义定义 key0 key1 接口接口 unsigned char flag con mcount flag 为计数到一秒时给时钟发的信号为计数到一秒时给时钟发的信号 unsigned char count 0 unsigned char seccount 0 作为时钟的秒的计量单位作为时钟的秒的计量单位 unsigned char hour 0 时钟的时时钟的时 unsigned char min 0 时钟的分时钟的分 unsigned char sec 0 时钟的秒时钟的秒 unsigned char keypress0 keypress1 mode ms s ss start unsigned char Displaynum 0 x14 0 xd7 0 x4c 0 x45 0 x87 0 x25 0 x24 0 x57 0 x04 0 x05 0 x10 0 xd3 0 x48 0 x41 0 x83 0 x21 0 x20 0 x53 0 x00 0 x01 0 xff 0 xfb 数码管十六进制译码表数码管十六进制译码表 unsigned char controlnum 0 x08 0 x04 0 x02 0 x01 控制四个数码管显示控制四个数码管显示 unsigned char DisplayBuff 0 x00 0 x00 0 x00 0 x00 每个数码管的值每个数码管的值 void display state 数码管显示子程序数码管显示子程序 void keyscan 键盘扫描子程序键盘扫描子程序 void timer 秒表子程序秒表子程序 unsigned char count1 flag1 t adjust 0 tm adjust 0 unsigned charbKey0Pressed 0 bKey1Pressed 0 unsigned char ucStatus 0 void main TMOD 0 x01 定时器定时器 0 工作在模式工作在模式 1 GATE 0 C t 0 16 位模位模 TH0 2 16 5000 256 定时器定时器 0 预存值 预存值 TL0 2 16 5000 256 TR0 1 定时器定时器 0 启动启动 ET0 1 定时器中断定时器中断 0 允许允许 EA 1 开中断开中断 IT0 1 外部中断外部中断 0 下降沿触发下降沿触发 IT1 1 外部中断外部中断 1 下降沿触发下降沿触发 EX0 1 外部中断外部中断 0 允许允许 EX1 1 外部中断外部中断 1 允许允许 PX1 1 外部中断外部中断 1 为高优先级中断为高优先级中断 while 1 死循环 死循环 if flag 1 时钟显示时钟显示 flag 0 sec if sec 60 sec 0 min if min 60 min 0 hour if hour 24 hour 0 display state keyscan timer ISR 中断服务程序 每中断服务程序 每 5ms 产生一个定时器产生一个定时器 0 中断中断 void Display interrupt 1 TH0 2 16 5000 256 TL0 2 16 5000 256 seccount mcount keypress0 keypress1 P2 0 x00 P2 口先清零口先清零 P0 Displaynum DisplayBuff count P0 口输出口输出 P2 controlnum count P2 口输出口输出 count if count 4 count 0 if seccount 200 200 5ms 1s seccount 0 flag 1 每过每过 1 秒给时钟信号加一秒秒给时钟信号加一秒 void display state if mode 0 时钟模式 显示时间时钟模式 显示时间 DisplayBuff 0 hour 10 DisplayBuff 1 hour 10 10 10 是为了显示加点的数字是为了显示加点的数字 DisplayBuff 2 min 10 DisplayBuff 3 min 10 if mode 1 秒表模式 显示秒表秒表模式 显示秒表 DisplayBuff 0 ss 10 10 是为了显示加点的数字是为了显示加点的数字 DisplayBuff 1 s 10 DisplayBuff 2 s 10 10 DisplayBuff 3 ms if mode 2 计数器模式 显示计数计数器模式 显示计数 DisplayBuff 0 count1 1000 千位千位 DisplayBuff 1 count1 count1 1000 1000 100 百位百位 DisplayBuff 2 count1 count1 100 100 10 十位十位 DisplayBuff 3 count1 10 个位个位 if mode 3 显示时钟的秒 显示时钟的秒 DisplayBuff 0 20 第一位不显示第一位不显示 DisplayBuff 1 21 第二位显示一个点第二位显示一个点 DisplayBuff 2 sec 10 显示秒的十位显示秒的十位 DisplayBuff 3 sec 10 显示秒的个位显示秒的个位 键盘扫描子程序键盘扫描子程序 void keyscan if key0 bKey0Pressed 1 防止重入此判断防止重入此判断 while key0 如果没放开 就等下去如果没放开 就等下去 if key0 防止重入此判断防止重入此判断 if keypress0200 如果是长按如果是长按 mode 3 显示时钟的秒的模式显示时钟的秒的模式 if mode 0 进入时钟模式后进入时钟模式后 if key1 bKey1Pressed 1 while key1 if key1 if keypress1 200 如果是长按如果是长按 t adjust if t adjust 3 t adjust 0 else if keypress1 120 如果是短按如果是短按 switch t adjust case 1 调整分调整分 min sec 0 if min 60 min 0 break case 2 调整时调整时 hour sec 0 if hour 24 hour 0 break default break else if mode 1 进入秒表模式进入秒表模式 if key1 bKey1Pressed 1 while key1 if key1 if keypress1 200 长按长按 start 1 秒表清零秒表清零 void timer 秒表子程序秒表子程序 if mode 1 进入秒表模式才执行进入秒表模式才执行 if start 1 清零清零 ms 0 s 0 ss 0 mcount 0 if start 2 秒表开始计时秒表开始计时 if mcount 20 20 5ms 0 1s mcount 0 ms if ms 10 10 0 1s 1s s ms 0 s if s 100 100s s 0 ss if ss 10 ss 0 s 0 ms 0 if start 0 秒表停止秒表停止 void it0 void interrupt 0 using 1 外部中断外部中断 0 服务程序服务程序 if mode 2 只有在计数

温馨提示

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

评论

0/150

提交评论