基于51单片机的简易电子表设计与仿真

合集下载

基于51单片机的电子表设计

基于51单片机的电子表设计

1 绪论电子表是20世纪50年代才开始出现的新型计时器。

最早的一款电子表被称做“摆轮游丝电子表”,它诞生于1955年。

这种手表用电磁摆轮代替发条驱动,以摆轮游丝作为振荡器,微型电池为能源,通过电子线路驱动摆轮工作。

它的走时部分与机械手表完全相同,被称为第一代电子手表。

1960年,美国布洛瓦公司最早开始出售“音叉电子手表”。

这种手表以金属音叉作为振荡器,用电子线路输出脉冲电流,使机械音叉振动。

它比摆轮式电子手表结构简单,走时更精确,被称为第二代电子手表。

1969年,日本精工舍公司推出了世界上最早的石英电子表。

石英电子表的出现,立刻成为了钟表界主流产品,它走时精确,结构简单,轻松地将一、二代电子表,甚至机械表淘汰出局。

石英表又称“水晶振动式电子表”,因为它是利用水晶片的“发振现象”来计时的。

当水晶受到外部的加力电压,就会产生变形和伸缩反应;如果压缩水晶,便会使水晶两端产生电力。

这样的性质在很多结晶体上也可见到,称为“压电效果”。

石英表就是利用周期性持续“发振”的水晶,为我们带来准确的时间。

单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域的广泛应用。

从上世纪80年代,由当时的4位、8为单片机,发展到现在的32位300M的高速单片机。

1.1 单片机的介绍单片微型计算机简称单片机,是典型的嵌入式微控制器(Microcontroller Unit),常用英文字母的缩写MCU表示单片机,单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。

相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。

概括的讲:一块芯片就成了一台计算机。

基于51单片机的多功能电子时钟设计报告及其protel仿真电路及效果

基于51单片机的多功能电子时钟设计报告及其protel仿真电路及效果

单片机课程设计报告多功能电子数字钟姓名:学号:班级:指导教师:目录一课程设计题目-------------------------------- 3 二电路设计--------------------------------------- 4 三程序总体设计思路概述------------------- 5 四各模块程序设计及流程图---------------- 6 五课程设计心得及体会---------------------- 12 六程序、仿真电路效果见附录------------ 41一题目及要求本次单片机课程设计在Proteus软件仿真平台下实现,完成电路设计连接,编程、调试,仿真出实验结果。

具体要如下:用8051单片机设计扩展6位数码管的静态或动态显示电路,再连接几个按键和一个蜂鸣器报警电路,设计出一个多功能电子钟,实现以下功能:(1)走时(能实现时分秒,年月日的计时)(2)显示(分屏切换显示时分秒和年月日,修改时能定位闪烁显示)(3)校时(能用按键修改和校准时钟)(4)定时报警(能定点报时)本次课程设计要求每个学生使用Proteus仿真软件独立设计制作出电路图、完成程序设计和系统仿真调试,验收时能操作演示。

最后验收检查结果,评定成绩分为:(1)完成“走时+显示+秒闪”功能----及格(2)完成“校时修改”功能----中等(3)完成“校时修改位闪”----良好(4)完成“定点报警”功能,且使用资源少----优秀二电路设计(电路设计图见附件电路图)(1)采用89C51型号单片机(2)采用8位共阴数码管(3)因为单片机输出高电平时输出的电流不足以驱动数码管,所以在P0口与8位数码管之间加74LS373来驱动数码管(4)P2口与数码管选择位直接加74LS138译码器(5)蜂鸣器接P3.7口。

因为单片机输出高电平时输出的电流不足以驱动蜂鸣器所以蜂鸣器,所以P3.7口与蜂鸣器直接接反相器再接蜂鸣器的一端,蜂鸣器的另一端接5V电源。

基于51单片机的电子表设计

基于51单片机的电子表设计

1 绪论电子表是20世纪50年代才开始出现的新型计时器。

最早的一款电子表被称做“摆轮游丝电子表”,它诞生于1955年。

这种手表用电磁摆轮代替发条驱动,以摆轮游丝作为振荡器,微型电池为能源,通过电子线路驱动摆轮工作。

它的走时部分与机械手表完全相同,被称为第一代电子手表。

1960年,美国布洛瓦公司最早开始出售“音叉电子手表”。

这种手表以金属音叉作为振荡器,用电子线路输出脉冲电流,使机械音叉振动。

它比摆轮式电子手表结构简单,走时更精确,被称为第二代电子手表。

1969年,日本精工舍公司推出了世界上最早的石英电子表。

石英电子表的出现,立刻成为了钟表界主流产品,它走时精确,结构简单,轻松地将一、二代电子表,甚至机械表淘汰出局。

石英表又称“水晶振动式电子表”,因为它是利用水晶片的“发振现象”来计时的。

当水晶受到外部的加力电压,就会产生变形和伸缩反应;如果压缩水晶,便会使水晶两端产生电力。

这样的性质在很多结晶体上也可见到,称为“压电效果”。

石英表就是利用周期性持续“发振”的水晶,为我们带来准确的时间。

单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域的广泛应用。

从上世纪80年代,由当时的4位、8为单片机,发展到现在的32位300M的高速单片机。

1.1 单片机的介绍单片微型计算机简称单片机,是典型的嵌入式微控制器(Microcontroller Unit),常用英文字母的缩写MCU表示单片机,单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。

相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。

概括的讲:一块芯片就成了一台计算机。

基于51单片机的简易数字电压表的设计单片机

基于51单片机的简易数字电压表的设计单片机

基于51单片机的简易数字电压表的设计单片机————————————————————————————————作者:————————————————————————————————日期:2个人收集整理勿做商业用途甘肃畜牧工程职业技术学院毕业设计题目:基于51单片机的简易数字电压表的设计系部:电子信息工程系专业:信息工程技术班级:学生姓名:学号:指导老师:日期:目录毕业设计任务书 (1)开题报告 (3)摘要 (6)关键词 (7)引言 (7)第一章A/D转换器 (9)1.1A/D转换原理 (9)1.2 ADC性能参数 (11)1.2.1 转换精度 (11)1.2.2。

转换时间......................................... 错误!未定义书签。

1.3 常用ADC芯片概述 (13)第二章8OC51单片机引脚 (14)第三章ADC0809 (16)3。

1 ADC0809引脚功能 (16)3。

2 ADC0809内部结构 (18)3.3ADC0809与80C51的接口 (19)3.4 ADC0809的应用指导 (20)3.4。

1 ADC0809应用说明 (20)3.4.2 ADC0809转换结束的判断方法 (20)3。

4.3 ADC0809编程方法 (21)第四章硬件设计分析 (22)4。

1电源设计 (22)4.2 关于74LS02,74LS04 (22)4。

3 74LS373概述 (23)4。

3。

1 引脚图 (23)4。

3。

2工作原理 (23)4.4简易数字电压表的硬件设计 (24)结论 (25)参考文献 (25)附录.......................................................................................... 错误!未定义书签。

致谢 (29)毕业设计任务书学生姓名专业班级信息工程技术08。

2指导教师论文题目基于51单片机的简易数字电压表的设计研究的目标、内容及方法目标:基于MCS—51单片机,对设计硬件电路和软件程序应用的设计,使用发光二极管来显示所要测试模拟电压的数字电压值。

#基于51单片机的简易电子表设计与仿真

#基于51单片机的简易电子表设计与仿真

智能仪器及使用实验报告项目名称:基于51单片机的简易电子表设计和仿真专业名称:测控技术和仪器班级:测控0901班学生姓名:指导教师:一、任务要求使用Keil uVision编程软件以及ISIS 7 Professional仿真软件制作一个简易电子表,要求具备电子表基本功能(时间显示、时间调整等)。

二、总体设计方案利用AT89C51作为控制以及1602LCD作为显示,通过6个按键实现出入时间设置状态、出入闹铃设置状态、小时位调整、分钟位调整、开关闹铃等功能。

系统的流程图如下:图1-1 系统仿真流程图三、系统硬件1、AT89C51引脚功能说明:AT89C51芯片如图1-2所示图1-2 AT89C51VCC:供电电压。

GND:接地。

P0口:P0口为一个8位漏极开路双向I/O口,每脚可吸收8TTL门电流。

当P1口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

在FLASH编程和校验时,P1口作为第八位地址接收。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。

并因此作为输入时,P2口的管脚被外部拉低,将输出电流。

这是由于内部上拉的缘故。

P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。

在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。

P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

基于51单片机的数字电压表仿真设计(有参考文献)

基于51单片机的数字电压表仿真设计(有参考文献)

基于51单片机的数字电压表仿真设计一、引言随着电子科学技术的发展,电子测量成为广大电子工作者必须掌握的手段,对测量的精度和功能的要求也越来越高,而电压的测量甚为突出,因为电压的测量最为普遍。

数字电压表是采用数字化测量技术设计的电压表。

数字电压表与模拟电压表相比,具有读数直观、准确、显示范围宽、分辨力高、输入阻抗大、集成度高、功耗小、抗干扰能力强,可扩展能力强等特点,因此在电压测量、电压校准中有着广泛的应用。

而单片机也越来越广泛的应用与家用电器领域、办公自动化领域、商业营销领域、工业自动化领域、智能仪表与集成智能传感器传统的控制电路、汽车电子与航空航天电子系统。

单片机是现代计算机技术、电子技术的新兴领域。

本文采用ADC0808对输入模拟信号进行转换,控制核心C51单片机对转换的结果进行运算和处理,最后驱动输出装置显示数字电压信号,通过Proteus仿真软件实现接口电路设计,并进行实时仿真。

Proteus软件是一种电路分析和实物模拟仿真软件。

它运行于Windows 操作系统上,可以进行仿真、分析(SPICE)各种模拟器件和集成电路,是集单片机和SPICE分析于一身的仿真软件,功能强大,具有系统资源丰富、硬件投入少、形象直观等优点,近年来受到广大用户的青睐。

二、数字电压表概述1、数字电压表的发展与应用电压表指固定安装在电力、电信、电子设备面板上使用的仪表,用来测量交、直流电路中的电压。

传统的指针式电压表功能单一、精度低,不能满足数字化时代的需求,并且传统的电压表在测量电压时需要手动切换量程,不仅不方便,而且要求不能超过该量程。

目前,由各种单片A/D转换器构成的数字电压表,已被广泛用于电子及电工测量领域,并且由DVM扩展而成的各种通用及专用数字仪器仪表,也把电量及非电量测量技术提高到崭新水平。

2、本次设计数字电压表的组成部分本设计是由单片机AT89C51作为整个系统控制的核心,整个系统由衰减输入电路、量程自动转换电路、交直流转换电路、模数转换及控制电路以及接口电路五大部分构成。

基于51单片机的电子表设计

基于51单片机的电子表设计

目录目录 (1)第1章概述 (1) (1)第2章设计思路及框图 (1) (1) (2)第3章系统的硬件设计 (2) (2) (3) (3) (4) (4)第4章电路设计原理图 (4) (4)第5章程序设计 (5) (5) (7)第6章系统的验证及调试 (43) (43) (43) (44)第7章总结 (45)第8章参考文献 (45)第1章概述单片机集成度高、功能强、可靠性高、体积小、功耗地、使用方便、价格低廉等一系列优点,目前已经渗入到人们工作和生活的方方面面,几乎“无处不在,无所不为”。

单片机的应用领域已从面向工业控制、通讯、交通、智能仪表等迅速发展到家用消费产品、办公自动化、汽车电子、PC机外围以及网络通讯等广阔领域。

单片机有两种基本结构形式:一种是在通用微型电脑中广泛采用的,将程序存储器和数据存储器合用一个存储器空间的结构,称为普林斯顿结构。

另一种是将程序存储器和数据存储器截然分开,分别寻址的结构,一般需要较大的程序存储器,目前的单片机以采用程序存储器和数据存储器截然分开的结构为多。

本课题讨论的方波发生器的核心是目前应用极为广泛的 51系列单片机。

利用AT89C51单片机定时器完成计时功能,定时器0计时中断程序每隔0.01s中断一次并当作一个计数,设定定时1秒的中断计数初值为0,每中断一次中断计数初值加1,当加到100时,则表示1s到了,秒变量加1,同理再判断是否1min钟到了,再判断是否1h到了。

为了将时间在6位LED数码管上显示,可采用静态显示法和动态显示法,由于静态显示法需要译码器,数据锁存器等较多硬件,可采用动态显示法实现LED显示,通过对每位数码管的依次扫描,使对应数码管亮,同时向该数码管送对应的字码,使其显示数字。

由于数码管扫描周期很短,由于人眼的视觉暂留效应,使数码管看起来总是亮的,从而实现了各种显示。

第2章设计思路及框图设计思路针对要实现的功能,采用AT89S51单片机进行设计,AT89S51 单片机是一款低功耗,高性能CMOS8位单片机,第一,熟悉AT89S51单片机,在编程之前必须了解硬件结构尤其是各引脚的用法,以及内部寄存器、存储单元的用法,否则,编程无从下手,电路也无法设计。

基于51单片机的数字电压表的设计与仿真

基于51单片机的数字电压表的设计与仿真
脚 连接 到一 点 ,通 过 非 门与 单 片 机 的 P . / 3 6 WR 脚
电压 信号 .系统 结 构框 图如 图 1所示 .
收 稿 日期 : 0 1— 8—1 21 0 0
相 连 ,当执行 写 片外 数据存 储 器 的指令 时 就可 以启
基 金 项 目 :安 徽 省 高 等 学 校 教 学 质 量 与 教 学 改 革 工 程 重 点 项 目 (0 0 3 6 2 1 15 )
对 P . 时取 反 输 出 5 0k z的 C K信号 ,作 为 2 7定 0 H L A C 89所 需 的 时 钟 信 号 .程 序 流 程 图 如 图 3所 D 00
刁 .
3 2 接 口程 序 .
主程序流程 图
图 3 电压 表 程 序 流 程 图
部分 程 序代码 如 下 MA N: V T D, 0 H; 时 器 工作 在方 式 2 I MO MO # 2 定
LCAL DELAY L S ETB P2. 2
图 2 数 字 电压 表 电路 原 理 图
3 系统 程序 设计
3 1 程序 设计 思路 .
定时 中断程 序流程 图
本 系 统 的程 序 设 计 主 要 包 括 初 始 化 、A D 转 / 换、 E L D显示 和定 时器 中断部 分 .定 时 中断部 分 是
片 机设计 的数 字 电压 表 可 以测 量 0—5 的直 流 电 V
A C 89具有 8路 模 拟量输 入 通道 ,通道 的选 D 00
择 由地址 线 C、 A的值 决定 , 口 A E为 地址 锁 B、 端 L 存 允许 控制 端 口 , 当输 人为 高 电平 时 ,对地 址线 C、 B、A输 人 的 地 址 信 号 进 行 锁 存 ,从 而 决 定 对 哪 路 待 测输 人 电压 值 进 行 A D转 换 .SA T为 转 换 启 / TR 动 信号 , 当输 入 1个 2 宽 的高 电平 脉 冲时 ,开 始 s 进 行 A D转 换.E C为 A D 转 换 结 束 信 号 端 口, / O / 当 A D转 换 结束 时 , 端 口输 出一个 正 脉 冲 , 信 / 该 此
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

智能仪器及应用实验报告项目名称:基于51单片机的简易电子表设计与仿真专业名称:测控技术与仪器班级:测控0901班学生姓名:指导教师:一、任务要求使用Keil uVision编程软件以及ISIS 7 Professional仿真软件制作一个简易电子表,要求具备电子表基本功能(时间显示、时间调整等)。

二、总体设计方案利用AT89C51作为控制以及1602LCD作为显示,通过6个按键实现出入时间设置状态、出入闹铃设置状态、小时位调整、分钟位调整、开关闹铃等功能。

系统的流程图如下:图1-1 系统仿真流程图三、系统硬件1、AT89C51引脚功能说明:AT89C51芯片如图1-2所示图1-2 AT89C51VCC:供电电压。

GND:接地。

P0口:P0口为一个8位漏极开路双向I/O口,每脚可吸收8TTL门电流。

当P1口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

在FLASH编程和校验时,P1口作为第八位地址接收。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。

并因此作为输入时,P2口的管脚被外部拉低,将输出电流。

这是由于内部上拉的缘故。

P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。

在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。

P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:P3口管脚是8个内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。

作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为AT89C51的一些特殊功能口,如下所示:口管脚备选功能P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 INT0(外部中断0)P3.3 INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 WR(外部数据存储器写选通)P3.7 RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:复位输入。

当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。

在FLASH编程期间,此引脚用于输入编程脉冲。

在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。

因此它可用作对外部输出的脉冲或用于定时目的。

然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。

如想禁止ALE的输出可在SFR8EH地址上置0。

此时,ALE 只有在执行MOVX,MOVC指令是ALE才起作用。

另外,该引脚被略微拉高。

如果微处理器在外部执行状态ALE禁止,置位无效。

PSEN:外部程序存储器的选通信号。

在由外部程序存储器取指期间,每个机器周期两次PSEN有效。

但在访问外部数据存储器时,这两次有效的PSEN信号将不出现。

EA:当EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。

注意加密方式1时,EA将内部锁定为RESET;当EA 端保持高电平时,此间内部程序存储器。

在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:来自反向振荡器的输出。

振荡器特性:XTAL1和XTAL2分别为反向放大器的输入和输出。

该反向放大器可以配置为片内振荡器。

石晶振荡和陶瓷振荡均可采用。

如采用外部时钟源驱动器件,XTAL2应不接。

有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。

2、1602LCD液晶显示引脚功能说明:1602LCD显示用来显示当前时钟与闹钟时间。

当运行仿真软件时,可以清楚的看到时间。

1602LCD芯片如图1-3所示图1-3 1602LCD四、系统软件设计设计仿真图:图1-4 电子表仿真图设计程序:#include<reg52.h>#define DataPort P0sbit LATCH1=P2^6; //定义锁存使能端口段锁存sbit LATCH2=P2^7; // 位锁存sbit KeyPort1=P3^4; //小时+1 按钮sbit KeyPort2=P3^5; //分钟+1 按钮sbit KeyPort3=P3^2; //定时开关sbit KeyPort4=P3^3; //定时设定sbit SPK=P1^2; //定义喇叭端口unsigned char code DuanMa[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92, 0x82,0xf8, 0x80,0x90}; //显示段码值0~9Unsigned char code WeiMa[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; //分别对应相应的数码管点亮,即位码unsigned char TempData[8]; //存储显示值的全局变量void DelayUs2x(unsigned char t);//us级延时函数声明void DelayMs(unsigned char t); //ms级延时void Display(unsigned char FirstBit,unsigned char Num);//数码管显示函数unsigned char shi; //小时unsigned char fen ; //分钟unsigned char miao ; //秒unsigned char dingshi; //设定小时unsigned char dingfen; //设定分钟unsigned char quxiao; //取消定时void Init_Timer0(void); //定时器初始化void delay1s(); //消抖延时void DelayUs2x(unsigned char t);//函数声明void DelayMs(unsigned char t);void main (void){unsigned char displaynum=0,i,j;Init_Timer0(); //初始化for(j=0;j<8;j++) //清屏TempData[j]=0xff;while (1) //主循环{if(!KeyPort3) //判断是时间界面还是设定闹钟时间{delay1s();if(!KeyPort3){displaynum++;if(displaynum==2){displaynum=0;}}}if(!KeyPort4) //判断是否开启闹钟{delay1s();if(!KeyPort4){quxiao++;}if(quxiao>=2){quxiao=0;P1=0xff;}}if(quxiao==1){P1=0xfe;} //P1.1灯亮起为开启闹钟否则为关闭闹钟else{P1=0xff;}if(displaynum==0) //时间显示界面{if(!KeyPort1) //按键扫描设定小时{delay1s();if(!KeyPort1){while(!KeyPort1);shi++;}}if(!KeyPort2) //按键扫描设定分钟{delay1s();if(!KeyPort2){while(!KeyPort2);fen++;}}TempData[7]=DuanMa[shi/10]; //时TempData[6]=DuanMa[shi%10];TempData[5]=0xbf; //加入"-" TempData[4]=DuanMa[fen/10]; //分TempData[3]=DuanMa[fen%10];TempData[2]=0xbf;TempData[1]=DuanMa[miao/10]; //秒TempData[0]=DuanMa[miao%10];Display(0,8); // 调用数码管扫描}else if(displaynum==1) //闹钟显示界面{if(!KeyPort1) //按键扫描设置闹钟小时{delay1s();if(!KeyPort1){while(!KeyPort1);dingshi++;if(dingshi>=24){dingshi=0;}}}if(!KeyPort2) //按键扫描设定闹钟分钟{delay1s();if(!KeyPort2){while(!KeyPort2);dingfen++;if(dingfen>=60){dingfen=0;}}}TempData[7]=0xff;TempData[6]=DuanMa[dingshi/10];TempData[5]=DuanMa[dingshi%10];TempData[4]=0xbf;TempData[3]=0xbf;TempData[2]=DuanMa[dingfen/10];TempData[1]=DuanMa[dingfen%10];TempData[0]=0xff;Display(0,8); // 调用数码管扫描}if((shi==dingshi)&&(fen==dingfen)&&quxiao) //闹钟滴答函数{if(!KeyPort4){quxiao=0;}for(i=0;i<200;i++){DelayUs2x(200);SPK=!SPK;Display(0,8); // 调用数码管扫描}SPK=0;//防止一直给喇叭通电造成损坏for(i=0;i<200;i++){DelayMs(1);Display(0,8); // 调用数码管扫描}}}}void Display(unsigned char FirstBit,unsigned char Num){static unsigned char i=0;DataPort=0xff; //清空数据,防止有交替重影LATCH1=1; //段锁存LATCH1=0;DataPort=WeiMa[i+FirstBit]; //取位码LATCH2=1; //位锁存LATCH2=0;DataPort=TempData[i]; //取显示数据,段码LATCH1=1; //段锁存LATCH1=0;i++;if(i==Num)i=0;}void Init_Timer0(void){TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响//TH0=0x00; //给定初值//TL0=0x00;EA=1; //总中断打开ET0=1; //定时器中断打开TR0=1; //定时器开关打开}void Timer0_isr(void) interrupt 1{static unsigned int num;TF0=0;TH0=(65536-50000)/256; //重新赋值2msTL0=(65536-50000)%256;//Display(0,8); // 调用数码管扫描num++;if(num==20) //大致100ms{miao++;num=0;if(miao>=60){miao=0;fen++;}//ReadTimeFlag=1; //读标志位置1if(fen>=60){fen=0;shi++;}if(shi>=24){shi=0;}}}void delay1s(){unsigned int i;for(i=0;i<1000;i++);}void DelayUs2x(unsigned char t) {while(--t);}void DelayMs(unsigned char t) {while(t--){//大致延时1mSDelayUs2x(245);DelayUs2x(245);}}。

相关文档
最新文档