篮球计时计分器设计毕业论文_第1页
篮球计时计分器设计毕业论文_第2页
篮球计时计分器设计毕业论文_第3页
篮球计时计分器设计毕业论文_第4页
篮球计时计分器设计毕业论文_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

1、目目 录录 摘要摘要: :.3 3 abstactabstact.3 3 第一章第一章 绪论绪论.5 5 1.1 设计意义 .5 1.2 系统的基本要求及本人所做工作 .5 第二章第二章 方案选择及设计思想方案选择及设计思想.6 6 2.1 系统显示模块 .6 2.1.1 1602 接口说明.6 2.1.2 1602a 的部分使用说明.7 2.2 单片机设计模块 .8 2.3 键盘模块 .10 第三章第三章 硬件设计硬件设计.1010 3.1 原理框图 .10 3.2 工作原理 .11 3.2.1 lcd 显示器 lcd1602 .11 3.2.2 时钟电路.11 3.2.3 复位电路.12

2、3.2.4 按键电路.12 3.3 元件清单 .13 3.4 电路图 .13 第四章第四章 软件设计流程及描述软件设计流程及描述.1414 4.1 系统模块层次结构图 .14 4.2 程序流程图 .14 4.3 初始化程序 .16 4.3.1 t0,t1 的初始化.16 4.3.2 lcd 初始化.16 4.4 lcd 内部程序.16 4.4.1 读忙判断程序.16 4.4.2 写函数 .17 4.5 按键扫描 .18 第五章第五章 测试测试.1919 5.1 测试工具 .19 5.2 测试结果 .19 5.3 仿真图 .19 第六章第六章 总结总结.2020 参考文献参考文献.2020 附录

3、附录.2020 致谢致谢.3333 篮球计时计分器设计篮球计时计分器设计 摘要摘要: :此次设计隶属于计算机控制技术弱电课程设计,主要通过基于单片机 at89s51 芯片作为本次核心控制元件,利用 1602alcd 作为显示器件,键盘输入 电路等相关的软件的有机结合以及喇叭等辅助器件,构成了一个满足基本设计 要求的篮球计时计分器。本系统可满足倒计时方式显示单节比赛剩余时间,可 暂停,显示双方得分,按键输入可修改分值,如有错误可进行分值的相应修改。 整场比赛结束时有声音提示。系统符合一般篮球计时器的工作要求。采用液晶 显示器 1602alcd,因为其微功耗、小体积、使用灵活等诸多优点在袖珍式仪表

4、 和低功耗应用系统中得到越来越广泛的应用,而且有利于硬件实物的成功。设 计的主要方法主要是先通过仿真确定方案的可行性,然后在进行局部测试看实 物是否满足仿真的设计要求,最后把整体电路搭建完成做最后的测试和调试。 关键词关键词:at89s51 按键输入 点阵字符型液晶模块 1602a, 计数器 计时 器 the basketballs timing and score indicator design abstact:this design belongs to the computer control technology elv curriculum design, mainly throu

5、gh based on at89s51 single-chip microcomputer chip as the core control device, using 1602alcd as a display device, keyboard input circuit and other relevant software organic combination of the auxiliary devices and speakers, constructed a satisfying basic design requirements of basketball timing jif

6、enqi. this system can satisfy the countdown display single day game remaining time, can pause, show both parties scoring, keystroke can be modified to score, if there are any errors can be conducted a value of corresponding modification. the game ended when sound reminders. system complies with the

7、general basketball timer requirements. adopt lcd 1602alcd, because its micro-consumption electronic, small volume, flexible, and many other advantages on pocket type instrument and low power consumption in application system are increasingly applied, and be helpful for hardware forms of success.desi

8、gn of the main method is mainly determined by simulation first, then the project is feasible in local test to see whether satisfy the physical simulation design requirements, finally the whole circuit structures finish doing the final testing and debugging. keywords: at89s51 dot matrix characters 16

9、02a type lcd module counter timer 第一章第一章 绪论绪论 1.11.1 设计意义设计意义 进入 21 世纪,伴随着电子、信息技术的应用与迅速普及,人们对电子技术 的要求越来越高。当今社会,科学技术日新月异,时代前进的步伐越迈越宽, 应用自动化设备,计算机处理,现代化通讯,数字化信息,现代化显示设备等高新 技术而建立的现代化智能。目前单片机渗透到我们生活的各个领域,几乎很 难找到哪个领域没有单片机的踪迹。 导弹的导航装置,飞机上各种仪表的 控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处 理,广泛使用的各种智能 ic 卡,民用豪华轿车的安全保障

10、系统, 录像机、 摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不 开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。因此, 单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、 工程师。通过此次基于单片机设计的篮球计时计分系统,我们可以更清楚详细 的了解单片机程序设计的基本指令功能、编程步骤和技巧来讲述单片机编程, 并对 at89s51 单片机的结构和原理进行讲述,以及基于单片机开发应用的相关 芯片的工作原理,和相关外围电路的设计和调试过程进一步了解,有助于今后 的工作和学习生活。 本次设计用由 at89s51 编程控制 lcd 作显示的球赛计时计

11、分系统。该系统 具有赛程时间暂停,及时刷新甲、乙双方的成绩等功能。它具有价格低廉,性 能稳定,操作方便并且易于携带等特点。广泛适合各类学校或者小型团体作为 赛程计时计分。 篮球比赛计时计分器是为了解决篮球比赛时计分与计时准确的问题。 此装置利用单片机 at89c51 完成了计时和计分的功能。本文详细地介绍了系统 硬件与软件的设计过程,采用该装置可根据实际情况进行比分修改和时间的准 确显示,具有低功耗,可靠性,安全性以及低成本等特点 1.21.2 系统的基本要求系统的基本要求及本人所做工作及本人所做工作 本系统有三项主要功能: 一.倒计时方式显示单节比赛剩余时间,可暂停。 二.显示双方得分,按键

12、输入可修改分值,设置三个按键分别加分 1,2,3;如有错误可进行分值的相应修改设置一个按键每次减 1 分。 三.24 秒倒计时显示,时间结束喇叭响;且显示每一个节次,每一小节比 赛结束时有喇叭声音提示。 本人在这次课程设计过程中所做工作如下:查询资料及硬件操作和后期的 外围电路设计调试测试,以及最后的论文撰写。 第二章第二章 方案选择及设计思想方案选择及设计思想 通过分析题目的要求,此次系统设计主要可分为三大模块,一是系统显示 模块,二是单片机设计模块,三是键盘输入模块。 2.12.1 系统显示模块系统显示模块 在显示模块的设计中,开始想到了常用的 led 显示,但是考虑的后续硬件实现 的复杂

13、性(超过 10 以上的 led 实物连接将十分复杂) ,于是在同学的建议下选 取了方便但是没有接触过的 lcd 显示,因此也导致了一定程度的难度。下面将 对 lcd 1602a 作个简单的介绍。 2.1.12.1.1 16021602 接口说明接口说明 1602 采用标准的 16 脚接口,如下: 第 1 脚:vss 为地电源 第 2 脚:vdd 接 5v 正电源 第 3 脚:v0 为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时 对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个 10k 的电位 调整对比度。 第 4 脚:rs 为寄存器选择,高电平时选择数据寄存器、低电平时选

14、择指令寄存 器。 第 5 脚:r/w 为读写信号线,高电平时进行读操作,低电平时进行写操作。当 rs 和 rw 共同为低电平时可以写入指令或者显示地址,当 rs 为低电平 rw 为高 电平时可以读忙信号,当 rs 为高电平 rw 为低电平时可以写入数据。 第 6 脚:e 端为使能端,当 e 端由高电平跳变成低电平时,液晶模块执行命令。 第 714 脚:d0d7 为 8 位双向数据线。 第 15 脚:背光电源正极。 第 16 脚:背光电源负极。 1602 液晶模块内部的字符发生存储器(cgrom)已经存储了 160 个不同的点 阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和

15、 日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“a”的代 码是 01000001b(41h),显示时模块把地址 41h 中的点阵字符图形显示出来, 我们就能看到字母“a”。 lcd 1602a 引脚如表 2.1 所示。 表 2.1 1602a 引脚分配表 引脚名引脚号电平输入/输出功能 vss1 电源地 vcc2 电源(+5v) vee3 对比调整电压 rs40/1 输入0=输入指令 1=输入数据 r/w50/1 输入0=向 lcd 写入指令或数据 1=从 lcd 读取信息 e61,10 输入使能信号,1=读取信号 10(下降沿)执行指令 db070/1 输入/输出数据总线 l

16、ine0(最低位) db180/1 输入/输出数据总线 line1 db290/1 输入/输出数据总线 line2 db3100/1 输入/输出数据总线 line3 db4110/1 输入/输出数据总线 line4 db5120/1 输入/输出数据总线 line5 db6130/1 输入/输出数据总线 line6 db7140/1 输入/输出数据总线 line7(最高位) a15+vcc lcd 背光电源正极 k16 接地lcd 背光电源负极 2.1.22.1.2 1602a1602a 的部分使用说明的部分使用说明 写数据写数据 cpu 向数据寄存器通道写入数据,splc780 根据当前地址指

17、针计数器 ac 值 的属性及数值将该数据送入相应的存储器的 ac 所指的单元里。如果 ac 值为 ddran 地址指针,则认为写入的数据是字符代码并送入 ddram 的 ac 所指单元里。 如果 ac 值为 cgram 的地址指针,则认为写入的数据时自定义字符的字模数据并 送入 cgram 内 ac 所指的单元里。所以 cpu 在写数据之前需要设置地址指针或认 为的确定地址指针的属性及数值。在写入数据后地址指针计数器 ac 将根据最近 设置的输入方式最大修改。由此可知,cpu 在写数据操作之前要做两项工作, 其一是设置或确认地址指针计数器 ac 值的属性及数值,以确保所写数据能够正 确到位,其

18、二是设置或确认输入方式,以确保连续写入数据时 ac 值的修改方式 符合要求。 读数据读数据 在 splc780 的内部运行时序操作下,地址指针计数器 ac 值的每一次修改, 包括新的 ac 值的写入,光标滚动位移所引起的 ac 值的修改或由 cpu 读写数据 操作后所产生的 ac 值的修改,splc780 都会把当前 ac 所指单元的内容送到数 据输出寄存器内,供 cpu 读取。如果 ac 值为 ddram 地址指针,则认为读的是 ddram 内 ac 所指的单元的字符代码,如果 ac 值为 cgram 的地址指针,则认为 读取的是 cgram 内 ac 所指单元的自定义字符的字模数据。 2.

19、22.2 单片机设计模块单片机设计模块 在单片机设计模块中,采用 atmel 公司的 at89s51 单片机作为控制器。该 单片机扩展功能强,软件编程灵活,自由度大,可通过软件编程实现各种算法 和逻辑控制,并具有功耗低、体积小、技术成熟等优点,使其广泛应用于各个 电子控制系统,完全能满足本系统的功能需求。 单片微型计算机(single chip microcomputer)简称单片机,是指在一块 芯片上集成了中央处理器 cpu、随机存储器 ram、程序存储器 rom 或 eprom、定 时器计数器、中断控制器以及串行和并行 io 接口等部件,构成一个完整的微 型计算机。对于简单的输入和输出控制

20、,51 机显然最合适,51 单片机是 8 位的, 采用总线结构,但是具有控制简便,接口简单,工作可靠,价格经济,能耗少, 容易实现系统小型化等特点。 本次设计采用常用的 at89c51,其基本结构框图如图 2.1。 cpu 4kb rom 128 字节 的 ram定时器计数器 并行 io 接口串行接口中断系统 时钟源 图 2.1 单片机结构框图 图 2.2 at89c51 引脚图 at89s51 简介 p0:双向 i/o 口,寻址外部程序存储器时分时作为双向 8 位数据口和输出 低 8 位地址复用口;不接外部存储器时可作为 8 位准双向 i/o 口使用。引脚为 39-32。 p1:8 位双向

21、i/o 口,p1 口写入1后可作为输入,引脚为 1-8。 xtal1:反向振荡放大器的输入及内部时钟工作电路的输入,引脚为 19。 xtal2:来自反向振荡放大器的输出,引脚为 18。 at89s51 的引脚图如图 2.2 所示。 p3 口介绍如表 2.2 所示: 表 2.2 at89s51 的 p3 口功能表 位线引脚功能 p3.0/rxd10 串行口输入 p3.1/txd11 串行口输出 p3.2/int012 外部中断 0 输入 p3.3/int113 外部中断 1 输入 p3.4/t014 定时器 t0 外部计数脉冲输入 p3.5/t115 定时器 t1 外部计数脉冲输入 p3.6/w

22、r16 片外 ram 写选通 p3.7/rd17 片外 ram 读选通 2.32.3 键盘模块键盘模块 此部分由按键开关组成,记分器有九个按键.其中 k0 按下得分减一. k9 键按一下第一个队得分加一. 其余的键分别实现加二,加三,节次,暂停的控 制。 调节时间的时候,先同时按下 k0 和 k9.这时时间的小时部分会跳闪,表示 小时被选中了,这样就可以 对小时进行设置:按一下 k0 时间加一,按一下 k9 时间减一 ,设置完后再同时 按一下 k9 和 k0,时间的分钟部分会跳闪。 对分钟数进行设置:同样按一下 k0 分钟数加一,按一下 k9 分钟数减一,设 置完后再同时按一下两个键就可以退出

23、设置。 因为篮球计分系统电路结构比较简单,只有按键控制和数码显示两个部分, p0 口接 6 个开关,分别作为比分的加一,加二,加三,减一,设置节次,暂停 的按键控制。p2 口和 p3 口控制 lcd 的比分及时间显示。 第三章第三章 硬件设计硬件设计 3.13.1 原理框图原理框图 该系统包括单片机 at89s51,时钟电路,复位电路,按键控制电路,及 lcd 显示器五部分。该电路控制简单,清晰明了,用 lcd 液晶显示,避免了用 led 的复杂接线,便于实体硬件电路的焊接。其系统框图如图 3.1 所示。各部分的 工作原理见第 3.2 节。 l c d 显 示 器 时 钟 电 路 at89s5

24、1 复位电路 按键电路 图 3.1 系统框图 3.23.2 工作原理工作原理 3.2.13.2.1 lcdlcd 显示器显示器 lcd1602lcd1602 该显示器的 rs,rw,e 端与 p2 相连,引脚的作用分别是: rs=0 输入指令,rs=1 输入数据,rw=0 向 lcd 写入指令或数据,rw=1 从 lcd 读 取信息,e 是使能信号。d0d7 与 p3 相连是数据总线。 3.2.23.2.2 时钟电路时钟电路 时钟电路在单片机系统中起着非常重要的作用,是为保证系统正常工作的 基础,在一个单片机系统中,时钟是保障系统正常工作的基准震荡定时信号。 图 3.2 是晶振电路,主要有晶振

25、和外围电路组成,晶振频率大小决定单片机的 快慢,我们这里采用的是 12mhz,另外有 2 个 30p 的电容。其中接地用来削减 谐波对电路的稳定性的影响。 c2 33p c3 33p x1 11.0592mhz 图 3.2 时钟电路图 3.2.33.2.3 复位电路复位电路 单片机系统的复位电路我们采用的是上电加按钮的复位电路形式,电阻采 用 220 欧的阻值,采用 22 的电容。其电路连接方式如图 3.3。当单片机的复 位引脚 reset 出现 2 个机器周期以上的高电平时,单片机就执行复位操作。 图 3.3 复位电路图 3.2.43.2.4 按键电路按键电路 本设计共有 9 个设置按键,分

26、别为+1,+2,+3,-1,暂停,设置节次按键。 按键与 p0 口相接。其电路图如图 3.4。 r6 10k r7 10k r8 10k vcc 图 3.4 按键电路图 3.33.3 元件清单元件清单 三极管 90122 单片机 at89s511 按钮10 电阻 10k6 电阻 1k2 液晶显示屏 lcd 1602a1 电容 221 电容 30p2 3.43.4 电路图电路图 该设计的总的原理电路图如图3.5 所示。当按下不同的按键时,显示器上显示 相应的数据,第一列按键从上到下实现的功能分别是得分减一,a 对加一分,b 对加一分。第二列按键从上到下实现的功能分别是倒计时暂停,a 对加二分,b

27、 对加二分。第三列按键从上到下实现的功能分别是节次显示,a 对加三分,b 对 加三分。每一节 12 分钟结束喇叭响。 xtal2 18 xtal1 19 ale 30 ea 31 psen 29 rst 9 p0.0/ad0 39 p0.1/ad1 38 p0.2/ad2 37 p0.3/ad3 36 p0.4/ad4 35 p0.5/ad5 34 p0.6/ad6 33 p0.7/ad7 32 p2.7/a15 28 p2.0/a8 21 p2.1/a9 22 p2.2/a10 23 p2.3/a11 24 p2.4/a12 25 p2.5/a13 26 p2.6/a14 27 p1.0/t

28、2 1 p1.1/t2ex 2 p1.2 3 p1.3 4 p1.4 5 p1.5 6 p1.6 7 p1.7 8 p3.0/rxd 10 p3.1/txd 11 p3.2/int0 12 p3.3/int1 13 p3.4/t0 14 p3.7/rd 17 p3.6/wr 16 p3.5/t1 15 u1 80c52 r3 10k r4 10k r5 10k r6 10k r7 10k r8 10k vcc c2 33p c3 33p x1 11.0592mhz gnd +5v 2 3 4 5 6 7 8 9 1 rp1 10k +5v d7 14 d6 13 d5 12 d4 11 d3

29、10 d2 9 d1 8 d0 7 e 6 rw 5 rs 4 vss 1 vdd 2 vee 3 lcd1 lm016l c4 33p ls1 speaker q1 2n2905 vcc 图 3.5 原理电路图 第四章第四章 软件设计流程及描述软件设计流程及描述 4.14.1 系统模块层次结构图系统模块层次结构图 液晶显示模块是一个慢显示器件,所以在执行每一条指令前要确认模块的 忙标志,低电平便是不忙,否则此指令失效。在对液晶模块的出事化中要先设 置其显示模式,在液晶模块显示字符是光标是自动右移的,无需人工干预。每 次输入指令前都要判断液晶模块是否处于忙状态。系统层次结构图如图 4.1 所

30、示。系统开始时需要对定时器和 lcd 进行初始化。单片机需要对按键进行判断, 判断是否有按键按下,并判断是那个按键按下,所以需要写入按键扫描函数。 比赛中需要暂停或休息,所以又需要写入延时函数。另外显示器要显示数据也 需要写入程序让其读取信号。 写数据函数 主函数 定时器初始 化函数 化函数 写指令函数写字符函数 lcd 初始化 函数 按键扫描函 数延时函数 显示时间函 数 读忙信号判断 函数 图 4.1 系统模块层次结构图 4.24.2 程序流程图程序流程图 定时器 t0,t1 及 lcd 的初始化,t0 计每一小节的倒计时时间,t1 计当前 时间。按键与 p0 口相接,读取 p0 口的数据

31、判断是否有按键按下,若没有按键 按下则继续返回读取 p0 口的数据。若有按键按下就判断是哪个键按下,各个键 的作用是:a 对加一分,加二分,加三分;b 对加一分,加二分,加三分;得分 减一,暂停/暂停复位,节次加一。等待按键释放并将时间,分数,节次经 p2,p3 口输出在 lcd 上显示。其总的流程图如图 4.2。 图 4.2 总的程序流程图 n y 定时器 0,1,lcd 初始化 显示当前时间 读取 p0 口的值 开始 是否有按键按 下 哪个按键按下 加一加二加三减一暂停节次 待按键释放 将时间,分数,节次 经 p2,p3 口输出显 示 4.34.3 初始化程序初始化程序 4.3.14.3.

32、1 t0,t1t0,t1 的初始化的初始化 void timer0init(void) tmod=0 x11; th0 = 0 x3c; tl0 = 0 xb0; /50ms 定时初值 th1=0 x3c; tl1=0 xb0; /10ms 定时初值(t1 计时用) et0=1; et1=1; tr0=1; tr1=1; ea=1; 4.3.24.3.2 lcdlcd 初始化初始化 void init_lcd(void) delay(400); /稍微延时,等待 lcm 进入工作状态 write_comm(0 x38); /8 位 2 行 5*8 write_comm(0 x0c); /显示开

33、/关,光标开闪烁开 write_comm(0 x01); /清显示 write_comm(0 x06); /文字不动,光标右移 write_comm(0 x02); /光标归位 4.44.4 lcdlcd 内部程序内部程序 4.4.14.4.1 读忙判断程序读忙判断程序 void read_busy(void) uchar i=50; lcd_port=0 xff; rs = 0; rw = 1; e = 1; while(i-) e=0; 4.4.24.4.2 写函数写函数 写指令函数 void write_comm(uchar lcdcomm) read_busy(); rs = 0; r

34、w = 0; e = 1; lcd_port=lcdcomm; e = 0; 写字符函数 void write_char(uint num)/写字符函数 read_busy(); rs = 1; rw = 0; e = 1; lcd_port = lcddatanum; e = 0; 写数据函数 void write_data(uchar lcddata) read_busy(); rs = 1; rw = 0; e = 1; lcd_port = lcddata; e = 0; 4.54.5 按键扫描按键扫描 void keyscan() uchar i,t=0 xef; /1110 111

35、1 key_io=0 x0f; keytemp=(key_io) if(keytemp!=0) /0000 0000 ;0000 1000; 0000 0100; 0000 0010; 0000 0001; delay(20); for(i=0;i3;i+) key_io=t; keytemp=(key_io) if(keytemp!=0 switch(keytemp) case 0 x08:key=0*3+i;break; case 0 x04:key=1*3+i;break; case 0 x02:key=2*3+i;break; default:break; 第五章第五章 测试测试 5.

36、15.1 测试工具测试工具 4 位半数字万用表,5v 直流电源。 5.25.2 测试结果测试结果 倒计时方式显示单节比赛剩余时间,可暂停。显示双方得分,按键输入可 修改分值,设置三个按键分别加分 1,2,3,如有错误可进行分值的相应修改 设置一个按键每次减 1 分。24 秒倒计时显示时间结束喇叭响,且显示每一个节 次,比赛结束时有喇叭声音提示。 5.35.3 仿真图仿真图 最后的仿真效果图如图 5.3 所示。 图 5.3 仿真图 第六章第六章 总结总结 通过本次本次课程设计的实践,发现了自己的很多不足,首先是自己知识 掌握很多都一知半解,实践经验及动手能力比较薄弱,不管是程序设计阶段还 是实际

37、调试阶段都出现了很多错误。 在设计过程中,我经历了很多,也学到了很多,对于程序的改写一筹莫展 的时候也有,此次设计是我们专业课程知识综合应用的实践训练,这是我们迈 向社会,从事职业工作前一个必不少的过程。 “实践出真知” ,通过这次课程设 计,我认识到只有理论联系实践才可以把所学的东西真正掌握。 此次课程设计让我进一步了解了单片机的实际设计过程,了解了基本的设 计方法和调试过程的基本步骤,以及学会了制板。在这过程中出现了很多问题, 在此特别感谢同学们的细心指导和帮助,以及指导老师赖春红对我的系统设计 和硬件调试过程帮助和指导,有了他们我的设计才有了实物制作成功的保证。 参考文献参考文献 1万文

38、略编著.单片机原理及应用. 重庆:重庆大学出版社,2004. 2孙德文编著.微型计算机技术. 北京:高等教育出版社,2005. 3张建勋编著.c 语言程序设计教程. 北京:清华大学出版社,2008. 4于海生编著.计算机控制技术. 北京:机械工业出版社,2007. 5胡建明编著. mcs-51 单片机篮球计分器的设计n. 期刊论文.广西轻工业.2008-9 6金素华,张尉.单片机调试方法的讨论.电子世界,2004-4-25 7 at89c51 data sheep philips semiconductors 1999.dec 附录附录 源程序代码 #include #include intr

39、ins.h /_nop_();延时函数用 #define uchar unsigned char #define uint unsigned int #define lcd_port p3 /定义数据端口 #define key_io p0 /键盘接口 sbit rs = p21; /定义和 lcm 的连接端口 sbit rw = p22; sbit e = p25; sbit busy = p37; sbit speaker=p10; uchar data keytemp,key; uchar l=0; uchar k=0; uchar c = 0; uchar b=0; uchar j=0

40、; uchar e=1; uchar d = 0; uchar hour =0; uchar hour1=0; uchar min = 11; uchar sec = 59; /赋初值 uchar data flag=0 x00; bit flag_key=0; uchar code lcddata = 0123456789:; /uchar code lcddata12=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 xff,0 xbf; /* * * 函数名称 :timer0init * 功能描述 :定时器 0 初

41、始化 * */ void timer0init(void) tmod=0 x11; th0 = 0 x3c; tl0 = 0 xb0; /50ms 定时初值 th1=0 x3c; tl1=0 xb0; /10ms 定时初值(t1 计时用) et0=1; et1=1; tr0=1; tr1=1; ea=1; /* * * 函数名称 :isrtimer0 * 功能描述 :t0 50ms 中断程序 * */ void isrtimer0(void) interrupt 1 using 1 /t0 50ms 中断程序 static uchar count = 0; uchar i=0,b=0; th0

42、 = 0 x3c; tl0 = 0 xb0; count+; if(count =20) /定时 1s 时间到 count = 0; sec-; if(sec = 0) /1 分钟时间到 if(min = 0) /12 分钟时间到 min = 11; sec = 59; tr0=0; speaker=1; for(i=1000;i=0;i-) /延时 5 秒 for(b=1000;b=0;b-) _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); speaker=speaker; else sec = 59; min-; void isrtimer1(vo

43、id) interrupt 3 using 3/t1 50ms 中断程序 uchar i=0,m=0,a=0; static uchar ta20ms= 0; th1=0 x3c; tl1=0 xb0; ta20ms+; if(ta20ms=20*60) /定时 1 分时间到 ta20ms=0; hour1+; if(hour1 =59) /1 小时时间到 hour+;hour1 =0; if(hour=23) hour=0;hour1=0; k=1; l=1; /* * * 函数名称 :delay * 功能描述 :延时子程序,延时 (1ms*t) s * */ void delay(ucha

44、r t) uchar a; while(t- != 0) for(a = 0; a 125; a+); /* * * 函数名称 :read_busy * 功能描述 :读忙信号判断 * */ void read_busy(void) uchar i=50; lcd_port=0 xff; rs = 0; rw = 1; e = 1; while(i-) e=0; /* * * 函数名称 :write_comm * 功能描述 :写指令函数 ok * */ void write_comm(uchar lcdcomm) read_busy(); rs = 0; rw = 0; e = 1; lcd_p

45、ort=lcdcomm; e = 0; /* * * 函数名称 :write_char * 功能描述 :写字符函数 ok * */ void write_char(uint num)/写字符函数 read_busy(); rs = 1; rw = 0; e = 1; lcd_port = lcddatanum; e = 0; /* * * 函数名称 :write_data * 功能描述 :写数据函数 ok * */ void write_data(uchar lcddata) read_busy(); rs = 1; rw = 0; e = 1; lcd_port = lcddata; e =

46、 0; /* * * 函数名称 :init_lcd * 功能描述 :初始化 lcd * */ void init_lcd(void) delay(400); /稍微延时,等待 lcm 进入工作状态 write_comm(0 x38); /8 位 2 行 5*8 write_comm(0 x0c); /显示开/关,光标开闪烁开 write_comm(0 x01); /清显示 write_comm(0 x06); /文字不动,光标右移 write_comm(0 x02); /光标归位 /* * * 函数名称 :show_time * 功能描述 :lcd 上显示当前时间 * */ void show

47、_time(void) write_comm(0 x80+0 x08); /显示首地址 write_char( hour / 10 );/显示小时 write_char( hour % 10 ); write_char( 10 ); /显示: write_char( hour1 / 10 );/显示分 write_char( hour1 % 10 ); write_comm(0 x80+0 x4b); write_char( min / 10 ); /显示倒计时分钟 write_char( min % 10 ); write_char( 10 ); /显示“:” write_char( sec

48、 / 10 ); /显示倒计时秒 write_char( sec % 10 ); write_comm(0 x80+0 x45); write_char( c / 10 ); write_char( c % 10 ); write_comm(0 x85); write_char(d / 10 ); write_char(d % 10 ); /*按键扫描函数/* void keyscan() uchar i,t=0 xef; /1110 1111 key_io=0 x0f; keytemp=(key_io) if(keytemp!=0) /0000 0000 ;0000 1000; 0000 0

49、100; 0000 0010; 0000 0001; delay(20); for(i=0;i=99) write_comm(0 x84);write_data(1);d=0;b=0;break; case 1:d+;d+;j=1;if(d=99) write_comm(0 x84);write_data(1);d=0;b=0;break; case 2:d+;d+;d+;if(d=99) write_comm(0 x84);write_data(1);d=0; j=1;b=0;break; case 3:c+;if(c=99) write_comm(0 x80+0 x44);write_data(1);c=0;b=1;j=0;break; case 4:c+;c+;if(c=99) write_comm(0 x80+0 x44);write_data(1);c=0;b=1;j=0;break; case 5:c+;c+;c+;if(c=99) write_comm(0 x80+0 x44);write_data(1);c=0;b=1;j=0;break; case 6:if(j=1)d-;if (d=0) d=0;if(b=1) c-;break; case 7:if (k=1)hour=24;tr0=tr0;speaker=1;l=0;k=0;b

温馨提示

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

评论

0/150

提交评论