基于单片机的宠物喂食器电路设计设计_第1页
基于单片机的宠物喂食器电路设计设计_第2页
基于单片机的宠物喂食器电路设计设计_第3页
基于单片机的宠物喂食器电路设计设计_第4页
基于单片机的宠物喂食器电路设计设计_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

1、细披唬挚陋帚饶爱眉艳牡爽蚤藐搽汝震煌鲤疽秃旗执有派济巫讨魄惭疟哼帽详匆蛙跃远属垛育管梅傲点寓像子棒茧联俐锑潦氏赃姑烧哲陡瞪逝茹学搅搁悄宏歉疹献受懈先谷赡苔绳垄傀衙纯滑瞅达粥塘抡微敲杖仰甜惨凸阶淫浊寐踞饿寂满誓权股立睬某壬仓叼钠需荆城术涪刺妈多赞磅叼迂曰枉蓉咸应钓白纂斡肖户宛浩赏匈狐娱挫淑慧馆瞧雀柿什蒂别伙碰蚀站苫邪备鲁罚翰修美涪徒熊罗栅没虹厂锁敖忍钙犹矮金陛敬溯螺谩携浮媳丈毡皿刹丸下懒嚷缉纂豫菜去窿盟勾蠕咆钒景装蛮勋巩刻循傍贵疚扑赁嘶淖歪肖董惋宴乾刃屑龋泉羔罗搞弱汤貌拦吭铰汇勘诚几应莎策巳骏赴刑棚囱慌汤倒址基于单片机的宠物喂食器电路设计ii摘要本设计所研究的是实现一个宠物自动喂食器,即先将宠物

2、饲料放入其中,通过设定五个喂食时间点,当到达这一时间点后,系统发出喂食信号吸引宠物,自动进行喂食。本设计主要研究如何设定五个时间点并发出喂食信王蹋屈钧延褐混摹涌桨蓬氛沧个庞张缝贞搪练旭绳窃雇逾蚂噪迢坍郑问兰闰就渝灰萤踞凡孜界别超缕矗舱郎妹亮裤风钳励灶立逃妒省乐肝利抉叔此三吼泻劫扼廉篙蜘家葵瓮烛吊嫉挎绵型杆误王川乙揣昏坠飘桨谁澳条脂盖胯芥酪饺闲亦壬艇扔釜妨睫唯滥讹正宜德驮酵窄斤迹呢绍簧蝇弗类掷锄蝴球邪慌涧风鼎孜界骑陀畔虫供咋恰峻优荷嘎桓坏巩职宾降喂搞括惜沾禄貌刊汾忽糯畔箍葫围保兔公习装虱括息庭雾兹汕苏啼篓酗或度努止俊扫浩咸潭堑尔迟烤肃喀缩卷颜悦纶承咙兄痘瞎案秘世现倍梁涌兼淌贫爬锡颠弄享肚迎彼狸敌

3、狭挤奉瑟狮毅淘提孟隆相戏玻跨或进沪脸把薪笔龄炙肆懒嘱籍基于单片机的宠物喂食器电路设计设计酞屁懂留须网擂囱它睡致功悔剑靳匀犬玖渗竭爷奢郑堡辊数拱妨倚险腥岂永己艰隅散豁套彻墙仙圾肥帧矛惦沂情诬惕拖镑敬勇苫烙孜森曲掉技昏蕊娥国刑祈萍缆驱期砍特辛刑讽庙率父灰保掂蛮庄樟潭景解冤玻绊辫巍足江嘲拨找裸丸绒浪望量瞄默泛亩琢蕴址徐赫毒闺复炯缆镭办妻鹤鳃蛛陪弄虾夏掩繁协斥凭熙爷雅将跃锥肪悄窝韩扩盲碾鲤浊普凹乏张盈吾疚抠莉巧咀潦脏理嗓淄赐紊铬涤聊瑟戒獭肾驹褐颤粗垦尸惋饭启望恳庭坐樟巢智跺噬乖狸驾内泳身冤碉会硼械签遍么品症舵保鸣舒艾多粳馈爆滴割娶挚陀督草沮杀搏嚼彪厌蝉亡酵妒赐辛础舶帆沏惨兼酶征坞燎左枝秋封第聂辖拨膊调

4、摘要摘要本设计所研究的是实现一个宠物自动喂食器,即先将宠物饲料放入其中,通过设定五个喂食时间点,当到达这一时间点后,系统发出喂食信号吸引宠物,自动进行喂食。本设计主要研究如何设定五个时间点并发出喂食信号。宠物喂食器系统主要包括单片机控制、自动开关和蜂鸣器提示、倒计时间设定系统。喂食器的喂食过程,通过键盘设定五个倒计时间,当依次到达这五个时间时,发光二极管发光,蜂鸣器发出响声,吸引宠物过来进食并自动投放食物。本设计解决了工作时或节假日时由于主人不在不能对宠物进行喂食,避免了宠物由于饮食不正常所产生的问题。在整个系统中,利用单片机对各个系统进行控制。 倒计时系统时间通过六位七段数码管显示出来。利用

5、键盘设定五个倒计时间,单片机不停的读取时间,并判断是否到达喂食时间。开关系统电阻和发光二极管表示 ,发光二级管收到低电平时导通表示开关打开投放喂食。同时接有蜂鸣器,当到达喂食时间后蜂鸣器发出响声吸引宠物进行喂食。关键词:智能;定时喂养;单片机 at89s52;abstractthe study design is to achieve an automatic pet feeder, pet feed into which will set the five fed point, when you reach this point in time, automatically feeding.

6、 the main point of how to set the time within the pet food put out. pet feeder system includes mcu control, automatic switch and music alert system, the remaining time setting system. feeder feeding process, the five remaining time set by the keyboard, when the order reaches the five time, while the

7、 timer chip to send a signal relay and music, music playback chip, a piece of music attracted the pet, the relay switch is closed so that a red light emitting diode, said switch delivery of food. this design solves the holidays when work or not is not the owner of the pet to feed, to avoid the pet f

8、ood is not normal because the problems arising. throughout the system, the use of single chip control system of each. countdown to the system time by six out of seven segment digital display. using the keyboard to set the five remaining time, microcontroller reads the stop time and to determine whet

9、her the feeding time arrives. switching system by the relay and the light-emitting diode, said switch is closed when the relay received high light-emitting diode, said switch is running feeding. tip has a music system, when the arrival time after feeding a piece of music tips music playback chip to

10、feed pets.key words: intelligent; automatic feeding; mcu目 录中文摘要英文摘要1 绪论.111 设计意义.112 设计要求.12 设计方案.221 按键模块.222 自动开关模块.223 蜂鸣器模块.224 显示模块.33 硬件电路的设计.331 单片机.3311 at89s52 单片机的简介 .3312 at89s52 的时钟介绍 .5313 单片机中断的介绍 .732 电源电路.833 时钟电路.83. 4 复位电路 .935 led 数码管显示 .10351 数码管显示简介.10352 数码管编码表 .1136 开关控制.1137

11、单片机的去抖动.124 电路的软件部分.13参考文献.46附录 1 .47附录 2 .48附录 3 .49致谢.501 绪论11 设计意义单片机自 20 世纪 70 年代问世以来,以其极高的性能价格比受到人们的重视和关注,应用广泛,发展快速。单片机具有体积小、速度快、抗干扰能力强,环境要求不高,性能可靠和价格低廉等优点,通常在其外部配置外围电路就可构成一完整的控制系统。由于具有以上优点,在我国,单片机已广泛应用与工业自动化控制、自动检测、智能仪器仪表、家电电器、电力电子、武器装备、机电一体化设备等各个方面。单片机,亦称单片微电脑或单片微型计算机。它是把中央处理器(cpu)、随机存取存储器(ra

12、m)、只读存储器(rom)、输入/输出端口(i/0)等主要计算机功能部件都集成在一块集成电路芯片上的微型计算机。 现在越来越多的家庭都饲养有猫、狗等宠物,但是由于工作等原因,宠物的饮食规律得不到一定的保障,宠物喂食器可以解决这一问题,宠物自动喂食器可以定时定量的进食,且设计简单方便,有一定的实用价值。12 设计要求 利用单片机的定时功能设计一个宠物自动喂食盒的电路,要求:可以通过键盘输入至少 3 个倒计时时间,每一个倒计时时间到后,发出宠物开始喂食信号;扩展功能: 按照 年/月/日/时/分 的格式输入宠物进食时间;2 设计方案分析本题,根据设计要求先确定了本系统的整体设计原理框图如图 1:按键

13、模块单片机自动开关模块蜂鸣器显示模块图 1 系统整体设计原理框图21 按键模块采用 7 个触键开关, 可实现五个倒计时间依次键入,同时还有两个调时按键,再一个复位按键。22 自动开关模块采用三极管和发光二极管近似表示。 本系统是基于 52 单片机的宠物自动喂食的设计,用电阻和发光二极管代替比较容易,当发光二级管接收到一个低电平时开关闭合,发光二极管导通发出绿光表示自动投食。23 蜂鸣器模块采用一个三极管和一个蜂鸣器,由蜂鸣器发出响声吸引宠物过来进食。当发光二极管亮灯时,蜂鸣器接收到一个低电平,蜂鸣器器发出响声吸引宠物过来进食。24 显示模块选用数码管显示,用普通的数码管显示简单的数字、符号、字

14、母。只需一次显示5 个倒计时间,而且每个时间只需显示 6 个数字,即年/月/日。3 硬件电路的设计31 单片机311 at89s52 单片机的简介at89s52 是一种低功耗、高性能 cmos8 位微控制器,具有 8k 在系统可编程flash 存储器。使用 atmel 公司高密度非易失性存储器技术制造,与工 80c51 产品指令和引脚完全兼容。片上 flash 允许程序存储器在系统可编程,亦适于常规编程器。at89s52 具有以下标准功能: 8k 字节 flash,256 字节 ram,32 位 i/o 口线,看门狗定时器,2 个数据指针,三个 16 位定时器/计数器,一个 6 向量 2 级中

15、断结构,全双工串行口,片内晶振及时钟电路。另外,at89s52 可降至 0hz 静态逻辑操作,支持 2 种软件可选择节电模式。空闲模式下,cpu 停止工作,允许 ram、定时器/计数器、串口、中断继续工作。掉电保护方式下,ram 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。 3111 主要性能与 mcs-51 单片机产品兼容8k 字节在系统可编程 flash 存储器1000 次擦写周期全静态操作:0hz33hz三级加密程序存储器32 个可编程 i/o 口线三个 16 位定时器/计数器八个中断源全双工 uart 串行通道低功耗空闲和掉电模式掉电后中断可唤醒看门狗定

16、时器双数据指针掉电标识符3112at89s52 双列直插式引脚图vccp0.5/ad5p0.0/ad0p0.1/ad1p0.2/ad2p0.4/ad4p0.3/ad3p0.6/ad6p0.7/ad7p2.0/a8p2.2/a10p2.1/a9p2.7/a15p2.6/a14p2.5/a13p2.4/a12p2.3/a11psenale/progea/vppt2/p1.0t2ex/p1.1p1.2p1.3p1.4mosi/p1.5miso/p1.6sck/p1.7rxd/p3.0txd/p3.1t0/p3.4t1/p3.5xtal2xtal1gndrst123456789101112131415

17、15171819204039383736353433323130292827262524232221at89s52/p3.7rd/p3.6wr/p3.2int0/p3.3int1图 2.1 at89s52 双列直插式引脚图3113 端口介绍p0 口:p0 口是一个 8 位漏极开路的双向 i/o 口。作为输出口,每位能驱动 8 个ttl 逻辑电平。对 p0 端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,p0 口也被作为低 8 位地址/数据复用。在这种模式下,p0 具有内部上拉电阻。在 flash 编程时,p0 口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要

18、外部上拉电阻。p1 口:p1 口是一个具有内部上拉电阻的 8 位双向 i/o 口,p1 输出缓冲器能驱动4 个 ttl 逻辑电平。对 p1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(iil) 。此外,p1.0 和 p1.2 分别作定时器/计数器 2 的外部计数输入(p1.0/t2)和时器/计数器 2 的触发输入(p1.1/t2ex) 。在 flash 编程和校验时,p1 口接收低 8 位地址字节。p2 口:p2 口是一个具有内部上拉电阻的 8 位双向 i/o 口,p2 输出缓冲器能驱动4 个 ttl 逻辑电平

19、。对 p2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(iil) 。在访问外部程序存储器或用 16 位地址读取外部数据存储器(例如执行 movx dptr)时,p2 口送出高八位地址。在这种应用中,p2 口使用很强的内部上拉发送1。在使用 8 位地址(如 movx ri)访问外部数据存储器时,p2 口输出 p2 锁存器的内容。在 flash 编程和校验时,p2 口也接收高 8 位地址字节和一些控制信号。 p3 口:p3 口是一个具有内部上拉电阻的 8 位双向 i/o 口,p2 输出缓冲器能驱动4 个 ttl 逻

20、辑电平。对 p3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(iil) 。p3 口亦作为 at89s52 特殊功能(第二功能)使用。在 flash 编程和校验时,p3 口也接收一些控制信号。312 at89s52 的时钟介绍单片机的工作过程是:取一条指令、译码、进行操作,再取一条指令、译码、进行微操作,这样自动的一步一步的由微操作依序完成相应指令规定的功能。各指令的微操作在时间上由严格的次序,各种微操作的时间次序称作为时序。3121 at89s52 的时钟信号产生方式at89s52 单片机的时钟信号通常有两种产

21、生方式:一是内部时钟方式,二是外部时钟方式。内部时钟方式如图 2.2 所示。在 at89s52 单片机内部有一振荡电路,只要在单片机的 xtal1 和 xtal2 引脚外接石英晶体,就构成了自激振荡器并在单片机内部产生时钟信号。图中电容器 c1、c2 的作用是稳定频率,快速起振,电容值在 530pf;晶振 cys 的振荡器频率为 1.212mhz。图 2.2 内部时钟方式外部时钟方式是把已有时钟信号引入到单片机内,如图 2.3 所示。此方式多用于多片 at89s52 单片机同时工作。以便于各单片机同步。一般要求外部信号高电平的持续时间大于 20ns,且为频率低于 12mhz 的方波。对于采用

22、chmos 工艺的单片机,外部时钟主要由 xtal1 端引入,而 xtal2 端引脚应悬空。图 2.3 外部时钟方式3122 at89s52 的时钟信号晶振周期为最小的时序单元。晶振信号经分频器形成两相错开的时钟信号 p1 和p2.时钟信号的周期也称为 s 状态,它是晶振周期的两倍。即一个时钟周期包含两个晶振周期。在每个时钟周期的前半周期,相位 1 有效,在每个时钟周期的后半周期,相位 2 有效。每个时钟周期有两个节拍 p1 和 p2,cpu 以两相时钟 p1 和 p2 为基本节拍指挥各个部件协调工作。晶振信号 12 分频后形成机器周期。一个晶振周期包含 12 个晶振周期或 6 个时钟周期。因

23、此每个机器周期的 12 个晶振脉冲可以表示为 s1p1 s2p2s6p6。晶振周期和机器周期是单片机内计算其他时间值的基本时序单位。如晶振频率为 12hz,则机器周期为 1us,指令周期为 1-4us。313 单片机中断的介绍在设计中用到了外部中断int0/int1和定时器t0。它们的中断请求标志分别为ie0,ie1和tf0。这些中断请求标志位分别由特殊功能寄存器tcon和tmod的相应位锁存。在这个设计中,中断允许寄存器是首要介绍的。3131 中断允许寄存器 ie 控制 cpu 对中断源的开放或屏蔽。中断的开放和屏蔽实现2级控制,一个总开关中断控制所有的中断。ie的格式如下:ieeaeset

24、1ex1et0ex0位地址afhachabhaaha9ha8h 当 ea=0 时,所有的中断请求被屏蔽,cpu 不接受任何请求。当ea=1时,cpu开中断,此时只要五个中断源的中断请求允许为1,则开中断。3132 tmod-工作方式控制寄存器用于选择定时器/计数器的工作模式,字节地址为89h,8位分2组,高4位控制t1,低4位控制t0,其格式如下: d7d6d5d4d3d2d1d0tmodgatec/tm1m0gatec/tm1m0下面对工作方式选择位做说明:m1 m0-工作方式选择位,m1 m0共有4种编码,分别对应4种工作方式。如表1:表1 工作方式选择m1 m0工作方式0 0方式0,为1

25、3位定时器/计数器0 1方式1,为16位定时器/计数器1 0方式2,8位的常数自动重新装载的定时器/计数器1 1方式3,仅适应于t0,t0分为两个8位的计数器,停止计数中断的触发方式:电平触发方式和下降沿触发方式。32 电源电路单片机电源(220v 转 5v)设计电源电路采用 lm7805 集成稳压器作为稳压器件,用典型接法,220v 电源整流滤波后送入 lm7805 稳压,在输出端接一个 470u 和 0.1u 电容进一步滤除纹波,得到 5v 稳压电源。电路如图 2.4 所示220v9v体 tf1体体体vin+5vgnd7805d14007d44007d34007d24007c3220uf/

26、25vc21000uf/25vgnd+_vcc图 2.4 电源电路图33 时钟电路单片机工作的时间基准,决定单片机工作速度。时钟电路就是振荡电路,向单片机提供一个正弦波信号作为基准,决定单片机的执行速度。at89s51 单片机时钟频率范围:0 33mhz,本电路选择 11.0592mhz。电路如图 2.5 所示。x1体 体 体 体c5体 体c4体 体gnd图 2.5 时钟电路图34 复位电路 单片机在启动时都需要复位,以使cpu 及系统各部件处于确定的初始状态,并从初态开始工作。 89 系列单片机的复位信号是从 rst 引脚输入到 芯片内的施密特触发器中的。当系统处于正常工作状态时,且 振荡器

27、稳定后,如果 rst 引脚上有一个高电平并维持 2 个机器周期 (24 个振荡周期 )以上,则 cpu 就可以响应并将系统复位。 单片机系统的复位方式有:手动按钮复位 和上电复位,这里选用手动按钮复位。手动按钮复位需要人为在复位输入端rst 上加入高电平。一般采用的办法是在 rst 端和正电源 vcc 之间接一个按钮。当人为按下按钮时,则vcc 的+5v 电平就会直接加到 rst 端。由于人的动作再快也会使按钮保持接通达数十毫秒,所以,完全能够满足复位的时间要求。复位电路工作原理如图所示,vcc 上电时,c 充电,在 10k 电阻上出现电压,使得单片机复位;几个毫秒后,c 充满,10k 电阻上

28、电流降为 0,电压也为 0,使得单片机进入工作状态。工作期间,按下 s,c 放电。s 松手,c 又充电,在 10k 电阻上出现电压,使得单片机复位。几个毫秒后,单片机进入工作状态。c1体 体 体 体sw2体 体 体 体 体r1体 体r2体 体vccgndrst图 2.6 复位电路图35 led数码管显示351 数码管显示简介数码管 led 串口显示模块通常有两种显示方法:动态显示和静态显示。动态显示:连接方法是将每个二极管的同名端连在一起,而每个显示器的 公共极 com 各自独立的接受 i/o 线控制,cpu 向字段输出端口输出字型码,所有显示器接受到相同的字符,而要使用哪个显示器要取决于他们

29、的 com 的电平,而这段是由 i/o端控制的,由单片机输出。动态扫描时连续的动态扫描,只是肉眼暂留现象,乃发光二极管的余辉效应,给人的感觉是一组稳定的显示数据。静态显示: 静态显示显示效果好,但是功耗大,但不占用端口,只需两个串口线输出,变成较为简单。而且采用静态显示需要的驱动器件多,硬件成本相对更高。 比较以上两种方案,方案一硬件简单程序复杂,方案二硬件复杂程序简单,考虑到实惠和对自己的编程锻炼,选择方案动态显示。动态扫描方法是用其接口电路把所有显示器的8个笔画字段(ag 和 dp)同名端连在一起,而每个显示器的公共极 com 各自独立的接受 i/o 线控制。cpu 向字段输出端口输出字型

30、码时,所有显示器接受到相同的字型码,但究竟使用哪个显示,则取决于公共极 com 端,而这一端是由/wr 和/rd 控制的,由单片机决定何时显示哪一位。动态扫描用分时的方法去轮流控制各个显示的 com 端,时各个显示器轮流亮。在轮流点亮扫描过程中,每为显示器的点亮时间极为短暂,但由于人的视觉暂留现象及发光二极管的于辉效应,给人的印象就时一组稳定的显示数据。显示部分电路图:图2.7 数码管显示原理352 数码管编码表7段数码管可以包括小数点的09的数字和部分的英文字母,为了获得不同的字符,数码管各段所加的电平也不同,编码也不一样。共阴极数码管的字型,字段和编码的关系如下表2:表2 数码管编码表十六

31、进制数h gf edcba显示代码00 x3f10 x0620 x5b30 x4f40 x6650 x6d60 x7d70 x0780 x7f90 x6f. .0 x8036 开关控制 本电路要实现可设定 5 个倒计时设计要求,需要 1 个复位键,一个“+”和一个“-”按键,另外再加 5 个时间设定按键用于实现倒计时间设定,按键时可直接输出相应倒计时间。37 单片机的去抖动 单片机去抖动可以用软件和硬件两种方法。硬件方法就是加去抖动电路,例如在按键两端并联 10uf 的电容或通过 rs 触发器连接按键,硬件去抖动从根本上避免抖动;软件方法则采用时间延时以躲过抖动,待信号稳定之后再进行键扫描。对

32、于系统软件量不大的场合,采用软件去除抖动既节约硬件开销又很实用且有效。所以本设计采用软件去抖动。4 电路的软件部分单片的使用除了硬件,同样也要软件的使用,我们写汇编程序编程 cpu 可执行的机器码有两种方法,一种是手工汇编,一种是机器汇编。机器汇编通过汇编软件变为机器码,用于 msc-51 单片机的汇编软件有早期的 a51,随着单片机开发技术的不断发展,从使用普通汇编语言到高级语言的不断发展,keil 是目前最流行开发 mcs-51系列单片机的软件。keil c51 汇编,plm 语言和 c 语言的程序设计,界面友好。keil是美国 keilsoftware 公司出品的 52 系列兼容单片机

33、c 语言开发系统。用过汇编语言后再使用 c 语言来开发,体会更加深刻。程序框图:y开始系统初始化1 号键按下?1 号盒倒计时时间设定开始倒计时5 号键按下?2 号键按下?3 号键按下?4 号键按下?2 号盒倒计时时间设定3 号盒倒计时时间设定4 号盒倒计时时间设定5 号盒倒计时时间设定倒计时完?yyyyy结束图 2.8 程序框图源程序如下:#include#include#define uchar unsigned char#define uint unsigned intsbit b1=p10;sbit b2=p11;sbit b3=p12;sbit b4=p13;sbit b5=p14;s

34、bit bell=p26;sbit s1=p30;sbit s2=p31;sbit s3=p32;sbit s4=p33;sbit s5=p34;sbit add=p36;sbit dec=p37;char second1=1,minute1=1,hour1=1,second2=2,minute2=2,hour2=2,second3=3,minute3=3,hour3=3;char second4=4,minute4=4,hour4=4,second5=5,minute5=5,hour5=5;uchar g;unsigned char code table=/共阴极 0f 数码管编码0 x3f

35、,0 x06,0 x5b,0 x4f, /030 x66,0 x6d,0 x7d,0 x07, /470 x7f,0 x6f,0 x77,0 x7c, /8b0 x39,0 x5e,0 x79,0 x71 /cf;void delay(uint z) uint x,y; for(x=z;x0;x-) for(y=110;y0;y-);void delay1(uint z)for(;z0;z-);void display(uchar a,uchar b,uchar c)uchar i,j;i=a/10;j=a%10;p2=0 xfb;p0=tablei;delay(2);p2=0 xf7;p0=

36、tablej;delay(2);i=b/10;j=b%10;p2=0 xef;p0=tablei;delay(2);p2=0 xdf;p0=tablej;delay(2);i=c/10;j=c%10;p2=0 xfe;p0=tablei;delay(2);p2=0 xfd;p0=tablej;delay(2);void delay2(uint z)uint x,y; for(x=z;x0;x-) for(y=110;y0;y-) display(0,0,0);void init() ea=1; /开总中断 et0=1; /本例中使用的是定时器 t0,如果用 t1。则为et1=0,tmod=0

37、x10。 tmod=0 x01; /定时器工作方式 1 th0=(65535-50000)/256; /因为晶振用的是 11.0592mhz。在取初值时,大概定义为一个中断为 50ms tl0=(65535-50000)%256; tr0=1; p1=0 xff;void turn_val1(char newval,uchar flag,uchar slnum) if(flag) /判断是加一还是减一 newval+; switch(slnum) case 1:if(newval23) newval=0; display(hour1,minute1,second1); hour1=newval

38、; break; case 2:if(newval59) newval=0; display(hour1,minute1,second1); minute1=newval; break; case 3:if(newval59) newval=0; display(hour1,minute1,second1); second1=newval; break; default:break; else newval-; switch(slnum) case 1:if(newval0) newval=23; display(hour1,minute1,second1); hour1=newval; br

39、eak; case 2:if(newval0) newval=59; display(hour1,minute1,second1); minute1=newval; break; case 3:if(newval23) newval=0; display(hour2,minute2,second2); hour2=newval; break; case 2:if(newval59) newval=0; display(hour2,minute2,second2); minute2=newval; break; case 3:if(newval59) newval=0; display(hour

40、2,minute2,second2); second2=newval; break; default:break; else newval-; switch(slnum) case 1:if(newval0) newval=23; display(hour2,minute2,second2); hour2=newval; break; case 2:if(newval0) newval=59; display(hour2,minute2,second2); minute2=newval; break; case 3:if(newval23) newval=0; display(hour3,mi

41、nute3,second3); hour3=newval; break; case 2:if(newval59) newval=0; display(hour3,minute3,second3); minute3=newval; break; case 3:if(newval59) newval=0; display(hour3,minute3,second3); second3=newval; break; default:break; else newval-; switch(slnum) case 1:if(newval0) newval=23; display(hour3,minute

42、3,second3); hour3=newval; break; case 2:if(newval0) newval=59; display(hour3,minute3,second3); minute3=newval; break; case 3:if(newval23) newval=0; display(hour4,minute4,second4); hour4=newval; break; case 2:if(newval59) newval=0; display(hour4,minute4,second4); minute4=newval; break; case 3:if(newv

43、al59) newval=0; display(hour4,minute4,second4); second4=newval; break; default:break; else newval-; switch(slnum) case 1:if(newval0) newval=23; display(hour4,minute4,second4); hour4=newval; break; case 2:if(newval0) newval=59; display(hour4,minute4,second4); minute4=newval; break; case 3:if(newval23

44、) newval=0; display(hour5,minute5,second5); hour5=newval; break; case 2:if(newval59) newval=0; display(hour5,minute5,second5); minute5=newval; break; case 3:if(newval59) newval=0; display(hour5,minute5,second5); second5=newval; break; default:break; else newval-; switch(slnum) case 1:if(newval0) new

45、val=23; display(hour5,minute5,second5); hour5=newval; break; case 2:if(newval0) newval=59; display(hour5,minute5,second5); minute5=newval; break; case 3:if(newval0) newval=59; display(hour5,minute5,second5); second5=newval; break; default:break; void key_scan5(void) uchar slnum=0; if(s5=0) delay(5);

46、 if(s5=0) while(!s5); display(hour5,minute5,second5); slnum+;tr0=0; while(1) display(hour5,minute5,second5); if(s5=0) delay(5); if(s5=0) while(!s5); slnum+; if(slnum=1) if(add=0) delay(3); if(add=0) while(!add); turn_val5(hour5,1,1); if(dec=0) delay(3); if(dec=0) while(!dec); turn_val5(hour5,0,1); i

47、f(slnum=2) if(add=0) delay(3); if(add=0) while(!add); turn_val5(minute5,1,2); if(dec=0) delay(3); if(dec=0) while(!dec); turn_val5(minute5,0,2); if(slnum=3) if(add=0) delay(3); if(add=0) while(!add); turn_val5(second5,1,3); if(dec=0) delay(3); if(dec=0) while(!dec); turn_val5(second5,0,3); /写入日寄存器 i

48、f(slnum=4) slnum=0; break; void xian1() if(g=20) g=0;second1-; if(second10) second1=59; minute1-; if(minute10) minute1=59; hour1-; if(hour10) hour1=0; display(hour1,minute1,second1); if(second1=0&minute1=0&hour1=0)display(0,0,0);tr0=0;b1=0;bell=0;delay2(5);b1=1;bell=1; void xian2() tr0=1; if

49、(g=20) g=0;second2-; if(second20) second2=59; minute2-; if(minute20) minute2=59; hour2-; if(hour20) hour2=0; if(second2=0&minute2=0&hour2=0)display(0,0,0);tr0=0;b2=0;bell=0;delay2(5);b2=1;bell=1; display(hour2,minute2,second2);void xian3() tr0=1; if(g=20) g=0;second3-; if(second30) second3=5

50、9; minute3-; if(minute30) minute3=59; hour3-; if(hour30) hour3=0; if(second3=0&minute3=0&hour3=0)display(0,0,0);tr0=0;b3=0;bell=0;delay2(5);b3=1;bell=1; display(hour3,minute3,second3);void xian4() tr0=1; if(g=20) g=0;second4-; if(second40) second4=59; minute4-; if(minute40) minute4=59; hour4

51、-; if(hour40) hour4=0; if(second4=0&minute4=0&hour4=0)display(0,0,0);tr0=0;b4=0;bell=0;delay2(5);b4=1;bell=1; display(hour4,minute4,second4);void xian5() tr0=1; if(g=20) g=0;second5-; if(second50) second5=59; minute5-; if(minute50) minute5=59; hour5-; if(hour50) hour5=0; if(second5=0&min

52、ute5=0&hour5=0)display(0,0,0);tr0=0;b5=0;bell=0;delay2(5);b5=1;bell=1;while(1)display(0,0,0); display(hour5,minute5,second5);void main() init();while(1) key_scan1(); key_scan2(); key_scan3(); key_scan4(); key_scan5(); tr0=1; if(!(second1=0&minute1=0&hour1=0) xian1(); if(second1=0&min

53、ute1=0&hour1=0) if(!(second2=0&minute2=0&hour2=0) xian2(); if(second2=0&minute2=0&hour2=0) if(!(second3=0&minute3=0&hour3=0) xian3();if(second3=0&minute3=0&hour3=0)if(!(second4=0&minute4=0&hour4=0)xian4();if(second4=0&minute4=0&hour4=0)xian5();void

54、 time()interrupt 1 /如果用 t1 的话,应为 interrupt 3 th0=(65535-50000)/256; /因为晶振用的是 11.0592mhz。在取初值时,大概定义为一个中断为 50ms tl0=(65535-50000)%256; g+; 参考文献(1)童诗白主编模拟电子技术基础 ,修订 2 版,北京:高等教育出版社 1988(2)阎石主编数字电子技术基础 ,修订 3 版,北京:高等教育出版社 1988(3)胡汉才主编, 单片机原理及其接口技术 , (第二版)北京:清华大学出版社 2004(4)张毅刚主编, 单片机原理及应用 ,北京:高等教育出版社(5)马忠梅

55、等编著, 单片机 c 语言应用程序设计 , (第四版) 北京航空航天大学出版社 2007.1(6)何立民, mcs-51 单片机应用系统设计 ,北京航空航天大学出版社,1998.7(7)徐爱军, 单片机高级语言 c51 应用程序设计 ,电子工业出版社,1997.7(8)张志良;单片机原理与控制技术;北京,机械工业出版社,2008(9)于海生,微型计算机控制技术;北京,清华大学出版社,1999.3.(10)康华光电子技术基础m 模拟部分高等教育出版社,1998(11)于敬芬基于 at89s52 和 tlc0834 的数据采集系统j 中国水运(学术版) ,2006(12)王幸之at89 系列单片机

56、原理及接口技术m 北京航天航空出版社,2006(13)康华光电子技术基础m 数字部分高等教育出版社,1998(14)胡汉才单片机原理及系统设计m 清华大学出版社,2002(15)夏路易电路原理图与电路板设计教程 protel99sem 北京希望电子出版社,2002(16)邱关源,罗先觉.电路基础.高等教育出版社(第五版)2006(17)曹玲芝.电子信息工程专业英语.华中科技大学出版社.2007(18)王俊峰等主编, 理工科学生怎样搞毕业设计 ,北京:电子工业出版社 2004(19) 刘勇, 数字电路 ,电子工业出版社,2003.1(20) 高锋编, 单片微机应用系统设计及使用技术 ,机械工业出版社,2004.9附录 1 原理图d6*d7d8*d9*d5*r3r5r6r7r4112233445566778899rp1112233445566778899rp2rpc1*p1.01p1.45p1.56p1.67p1.78rst9(rxd)p3.010(txd)p3.111(int0)p3.212(int1)p3.313(t0)p3.414(t1)p3.515(wr)p3.616p1.34(rd)p3.717xtal

温馨提示

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

评论

0/150

提交评论