[电子电路]基于单片机的数字电子时钟的设计与制作内容摘要:
1Vdd2Vo3A15K16LCD1LCD1602VCCVCC8R310KR1Q11122Speaker1KR6VCC+12BT1Battery1 2PowerHeader工作模式模式辅助1 2 36 5 4PowerSWVCC+5VCC10KR5VCCKEY1KEY2KEY1KEY2RSR/WENRSR/WENRestSWRestSWRestSW 图 461 13 系统 的软件设计 系统 软件设计 系统软件包含四个部分:主程序,定时器扫描程序, 按键扫描程序, 按键处理程序 ;通过这四个部分可以实现 数字电子钟 的功能设计。 主程序设计 程序 设计主要是通过 单片机内部 TIMER0 和 TIMER1 产生系统时钟信号 , 经过单片机的运算分别得到 时间的 年 月 日 时 分 秒 和秒表的 时 分 秒 毫秒, 单片机在主程序中循环扫描按键端口 ,根据返回的键值分别将这些数据 传给 LCD1602 对应 显示出来。 实现功能 程序实现的功能是: 正常显示 年 月 日 和 时 分 秒 以及闹钟的 时 分。 若单片机检测到 key1 第一次 按下并释放则 LCD 切换到显示秒表模式 00:00:00:00, 第二次按下 key2 并释放则返回到时钟显示模式。 在时钟正常显示模式下若前 5 按下 key2 按键并释放则一次选中闹钟的 时 分和时钟的 分 时 年 月 日 ,选中位会出现光标闪烁并且时钟不自动走动 , 第 6次按下 key2 并释放之后则正常显示时钟 , 6 次为一个循环。 在光标闪烁的时候若按下 key1并且释放则可以对相应位进行校正。 若在 秒表 显示模式下 第一次 按下 key2 并释放则启动秒表计时 ,第二次按下 key2 释放后则暂停秒表 ,第三次按下 key2 释放后则秒表清零 , 三 次为一个循环。 工作流程图 通过以上分析可得图 52 系统工作流程图: 是是 否 model_flag = 0 amp。 amp。 time_change_flag = 0 amp。 amp。 shift_flag =0否结 束Shift_flag清 零写 入 显 示 时 间 代 码到 液 晶是 否 model_flag = 1 amp。 amp。 time_change_flag = 0 amp。 amp。 shift_flag =1Shift_flag置 1写 入 显 秒 表 代 码 到液 晶否 图 521 14 实现功能 当系统检测到有按键按下时返回相应非零的键值,否则返回零。 按键扫描流程图 (如图 531) t 1 清 零 , 读 取 当 前按 键 端 口 值 并 保存 ,是是 否 有 键 按 下否t 1 是 否 d e n 与 k e y _ s h a k e _ t i m e并 且 是 否 有 键 按 下否是否按 键 是 否 释 放处 理 保 存 的 键 值是返 回 零返 回 处 理 后 的 键 值 图 531 15 按键扫描部分代码 unsigned char key_scan(void) { static unsigned char value。 //键值 static unsigned char do_key。 //执行相应命令标识 static unsigned char key_scan_step。 //键盘扫描步骤 if(key_scan_step==0) { key_value = 0。 if(do_key==0) { if(KEY amp。 0x03 != 0x03) { t1=0。 do_key=1。 } } if((t1=key_shake_time)amp。 amp。 ((KEY amp。 0x03) != 0x03)) { value = KEY amp。 0x03。 do_key = 0。 key_scan_step = 1。 } } if((key_scan_step==1)amp。 amp。 ((KEY amp。 0x03) == 0x03)) { key_scan_step = 0。 switch(value) { case 0x02 : value = 1。 break。 case 0x01 : value = 2。 break。 16 case 0x03 : value = 0。 break。 default : value = 0。 break。 } return(value)。 } else return(0)。 } 时间更新函数处理程序 实现功能 通过对 t0 值的判断来得到 秒 分 时 日 月 年 的计算 工作流程图 (如图 521) 是是t0是 否 等 于 20否否否分 是 否 大 于 59结 束时 间 的 秒 加 1将 秒 写 入 液 晶秒 是 否 大 于 59秒 清 零 , 分 加 1将 分 写 入 液 晶分 清 零 , 时 加 1将 时 写 入 液 晶是时 是 否 大 于 23否时 清 零 , 将 时 写 入液 晶是 图 521 17 时间更新函数部分代码 void update_time(void) { if(t0=20) { t0=0。 ++。 if(59) { =0。 ++。 if(59) { =0。 ++。 if(23) { =0。 ++。 switch() { case 1: case 3: case 5: case 7: case 8: case 10: case 12:if(31) { =1。 ++。 18 if(12) { =1。 ++。 if( 2060) { = 2020。 } } }break。 case 4: case 6: case 9: case 11:if(30) { =1。 ++。 if(12) { =1。 ++。 if( 2060) { = 2020。 } } }break。 case2:if((()amp。 amp。 (!=0)||(ear/400==0))amp。 amp。 (29)) { 19 =1。 ++。 if(12) { =1。 ++。 if( MAX_YEAR) { = MIN_YEAR。 } } } else if(28) { =1。 ++。 if(12) { =1。 ++。 if( 2060) { = 2020。 } } }break。 default:break。 } if(model_flag == 0) { write_lcd(0x8C,WCMD)。 20 write_lcd(%10+39。 039。 ,WDATA)。 write_lcd(0x8B,WCMD)。 write_lcd(+39。 039。 ,WDATA)。 write_lcd(0x89,WCMD)。 write_lcd(%10+39。 039。 ,WDATA)。 write_lcd(0x88,WCMD)。 write_lcd(+39。 039。 ,WDATA)。 write_lcd(0x83,WCMD)。 write_lcd(()+39。 039。 ,WDATA)。 write_lcd(0x84,WCMD)。 write_lcd((%1000/100)+39。 039。 ,WDATA)。 write_lcd(0x85,WCMD)。 write_lcd((%1000%100/10)+39。 039。 ,WDATA)。 write_lcd(0x86,WCMD)。 write_lcd(%10+39。 039。 ,WDATA)。 } } if(model_flag == 0) { write_lcd(0xC1,WCMD)。 write_lcd(%10+39。 039。 ,WDATA)。 write_lcd(0xC0,WCMD)。 write_lcd(+39。 039。 ,WDATA)。 } } if(model_flag == 0) { write_lcd(0xC4,WCMD)。 write_lcd(%10+39。 039。 ,WDATA)。 write_lcd(0xC3,WCMD)。 write_lcd(+39。 039。 ,WDATA)。 21 } } if(model_flag == 0) { write_lcd(0xC7,WCMD)。 write_lcd(%10+39。 039。 ,WDATA)。 write_lcd(0xC6,WCMD)。 write_lcd(+39。 039。 ,WDATA)。 } } } 秒表 更新函数处理程序 实现功能 通过对 t1 值的判断来得到 秒表的毫秒 秒 分 时 的计算 工作流程图 (如图 551) 是是sw_t1是 否 等 于 1否否否秒 是 否 大 于 59结 束秒 表 的 毫 秒 秒 加 1将 毫 秒 写 入 液 晶秒 是 否 大 于 99毫 秒 清 零 , 秒 加 1将 秒 写 入 液 晶秒 清 零 , 分 加 1将 分 写 入 液 晶是分 是 否 大 于 59否分 清 零 , 时 加 1将 时 写 入 液 晶是时 是 否 大 于 23时 清 零将 时 写 入 液 晶是否 图 551 22 函数部分代码 void update_stop_watch(void) { if(sw_t1=1) { sw_t1=0。 ++。 if(99) { =0。 ++。 if(59) { =0。 ++。 if(59) { =0。 ++。 if(23) { =0。 } if(model_fl。[电子电路]基于单片机的数字电子时钟的设计与制作
相关推荐
取数据存储器( RAM),器件采用 ATMEL公司的高密度、非易失性存储技术生产,兼容标准 MCS51 指令系统,片内置通用 8位中央处理器和Flash 存储单元,内置功能强大的微型计算机的 AT89C51 提供了高性价比的解决方案。 基于单片机的转速检测系统设计 第 13 页 共 36 页 图 AT89C51 引脚图 主要特性: 与 MCS51 兼容 4K字节可编程闪烁存储器 寿命:
300 指数主要成分股有哪些。 以 2020 年 12 月 5 日为例,沪深 300指数权重从大到小排名前 30位的成份股见下表: 表: 2020 年 12 月 5 日权重前 30 位的成份股 序号 股票代码 股票简称 权重 (%) 序号 股票代码 股票简称 权重 (%) 1 600036 招商银行 16 600009 上海机场 2 600016 民生银行 17 601988 中国银行 3
(83) :D 提示:最小宽度为 6m。 (84) :D 提示:道路布置形式、建筑朝向、距离地形、绿化以及建筑物屏障作用均能减少噪声干扰。 (85) :B 提示:前五项均是竖向 布置的任务,但设置必要的工程构筑物和绿化小品却不属于竖向布置的范围。 (86) :A 提示:住宅污水为生活污水,不必收集城市卫生部门对污水物理、化学和细菌分析的规定。 (87) :A 提示:《民用建筑设计通则》 GB
根 I/O 口线,键数目较多,可节省口线。 本设计采用的是独立式键盘。 键盘的工作方式可分为编程控制方式和中断控制方式。 CPU 在一个工作周期内,利用完成其他任务的空余时间,调用键盘扫描子程序,经程序查询,若无键操作,则返回;若有键操作,则进而判断是哪个键,并执行相应的键处理程序。 这种 方式为编程扫描方式。 由于单片机在正常应用过程中,可能会经常进行键操作,因而编程控制方式使 CPU
口、引水发电厂房等。 碾压混 凝土重力坝中部设三孔表孔泄水孔,两侧为挡水坝段,在右岸挡水坝段中设一泄洪中孔。 枢纽建筑物布置见附图1。 枢纽建筑物布置 本枢纽正常蓄水位 m,坝顶高程 m,最大坝高 m,最大坝底宽 124m。 大坝由左岸挡水坝段、溢流坝段、右岸挡水坝段组成。 其中,左岸非溢流坝段长 m,溢流坝段长 30 m, 右岸坝段长 m, 坝顶总长度 m。 共分 9 个坝段
回 课程组答 变面 积较为合适,回 课程组答 变介电常数式,也不算错误。 问: 2)被测液体应该是导电液体还是绝缘体。 课程组答 : 如果是绝缘体,无法与不锈钢圆环之间构成电容,所以必须是导电液体 问: 3)分别写出该液位计的分辨率( %)及分辨力(几分之一米)的计算公式,并说明如何提高此类液位计的分辨率。 课程组答 : 该液位计的分辨率为 1/N100%, 分辨力为 8m/N。