1、 摘要摘要 本设计所研究的是实现一个宠物自动喂食器,即先将宠物饲料放入其中,通过设 定五个喂食时间点,当到达这一时间点后,系统发出喂食信号吸引宠物,自动进行喂 食。本设计主要研究如何设定五个时间点并发出喂食信号。宠物喂食器系统主要包括 单片机控制、自动开关和蜂鸣器提示、倒计时间设定系统。喂食器的喂食过程,通过 键盘设定五个倒计时间,当依次到达这五个时间时,发光二极管发光,蜂鸣器发出响 声,吸引宠物过来进食并自动投放食物。本设计解决了工作时或节假日时由于主人不 在不能对宠物进行喂食,避免了宠物由于饮食不正常所产生的问题。 在整个系统中,利用单片机对各个系统进行控制。 倒计时系统时间通过六位七段数
2、 码管显示出来。利用键盘设定五个倒计时间,单片机不停的读取时间,并判断是否到 达喂食时间。开关系统电阻和发光二极管表示 ,发光二级管收到低电平时导通表示 开关打开投放喂食。同时接有蜂鸣器,当到达喂食时间后蜂鸣器发出响声吸引宠物进 行喂食。 关键词:智能;定时喂养;单片机 at89s52; abstract the 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, automa
3、tically feeding. 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
4、 time, while the 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
5、 avoid the pet food 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 t
6、o determine whether 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 p
7、layback chip to feed pets. key words: intelligent; automatic feeding; mcu 目 录 中文摘要 英文摘要 1 绪论.1 11 设计意义.1 12 设计要求.1 2 设计方案.2 21 按键模块.2 22 自动开关模块.2 23 蜂鸣器模块.2 24 显示模块.3 3 硬件电路的设计.3 31 单片机.3 311 at89s52 单片机的简介 .3 312 at89s52 的时钟介绍 .5 313 单片机中断的介绍 .7 32 电源电路.8 33 时钟电路.8 3. 4 复位电路 .9 35 led 数码管显示 .10 351
8、 数码管显示简介.10 352 数码管编码表 .11 36 开关控制 .11 37 单片机的去抖动 .12 4 电路的软件部分.13 参考文献.46 附录 1 .47 附录 2 .48 附录 3 .49 致谢.50 1 绪论 11 设计意义 单片机自 20 世纪 70 年代问世以来,以其极高的性能价格比受到人们的重视和关 注,应用广泛,发展快速。单片机具有体积小、速度快、抗干扰能力强,环境要求不 高,性能可靠和价格低廉等优点,通常在其外部配置外围电路就可构成一完整的控制 系统。由于具有以上优点,在我国,单片机已广泛应用与工业自动化控制、自动检测、 智能仪器仪表、家电电器、电力电子、武器装备、机
9、电一体化设备等各个方面。 单片机,亦称单片微电脑或单片微型计算机。它是把中央处理器(cpu)、随机存取 存储器(ram)、只读存储器(rom)、输入/输出端口(i/0)等主要计算机功能部件都集成 在一块集成电路芯片上的微型计算机。 现在越来越多的家庭都饲养有猫、狗等宠物,但是由于工作等原因,宠物的饮食 规律得不到一定的保障,宠物喂食器可以解决这一问题,宠物自动喂食器可以定时定 量的进食,且设计简单方便,有一定的实用价值。 12 设计要求 利用单片机的定时功能设计一个宠物自动喂食盒的电路,要求:可以通过键盘输 入至少 3 个倒计时时间,每一个倒计时时间到后,发出宠物开始喂食信号; 扩展功能: 按
10、照 年/月/日/时/分 的格式输入宠物进食时间; 2 设计方案 分析本题,根据设计要求先确定了本系统的整体设计原理框图如图 1: 按键模块 单片机 自动开关模块 蜂鸣器 显示模块 图 1 系统整体设计原理框图 21 按键模块 采用 7 个触键开关, 可实现五个倒计时间依次键入,同时还有两个调时按键, 再一个复位按键。 22 自动开关模块 采用三极管和发光二极管近似表示。 本系统是基于 52 单片机的宠物自动喂食的 设计,用电阻和发光二极管代替比较容易,当发光二级管接收到一个低电平时开关闭 合,发光二极管导通发出绿光表示自动投食。 23 蜂鸣器模块 采用一个三极管和一个蜂鸣器,由蜂鸣器发出响声吸
11、引宠物过来进食。 当发光二极管亮灯时,蜂鸣器接收到一个低电平,蜂鸣器器发出响声吸引宠物过来进 食。 24 显示模块 选用数码管显示,用普通的数码管显示简单的数字、符号、字母。只需一次显示 5 个倒计时间,而且每个时间只需显示 6 个数字,即年/月/日。 3 硬件电路的设计 31 单片机 311 at89s52 单片机的简介 at89s52 是一种低功耗、高性能 cmos8 位微控制器,具有 8k 在系统可编程 flash 存储器。使用 atmel 公司高密度非易失性存储器技术制造,与工 80c51 产品 指令和引脚完全兼容。片上 flash 允许程序存储器在系统可编程,亦适于常规编程器。 at
12、89s52 具有以下标准功能: 8k 字节 flash,256 字节 ram,32 位 i/o 口线, 看门狗定时器,2 个数据指针,三个 16 位定时器/计数器,一个 6 向量 2 级中断结 构,全双工串行口,片内晶振及时钟电路。另外,at89s52 可降至 0hz 静态逻辑操 作,支持 2 种软件可选择节电模式。空闲模式下,cpu 停止工作,允许 ram、定时 器/计数器、串口、中断继续工作。掉电保护方式下,ram 内容被保存,振荡器被冻 结,单片机一切工作停止,直到下一个中断或硬件复位为止。 3111 主要性能 与 mcs-51 单片机产品兼容 8k 字节在系统可编程 flash 存储器
13、 1000 次擦写周期 全静态操作:0hz33hz 三级加密程序存储器 32 个可编程 i/o 口线 三个 16 位定时器/计数器 八个中断源 全双工 uart 串行通道 低功耗空闲和掉电模式 掉电后中断可唤醒 看门狗定时器 双数据指针 掉电标识符 3112at89s52 双列直插式引脚图 vcc p0.5/ad5 p0.0/ad0 p0.1/ad1 p0.2/ad2 p0.4/ad4 p0.3/ad3 p0.6/ad6 p0.7/ad7 p2.0/a8 p2.2/a10 p2.1/a9 p2.7/a15 p2.6/a14 p2.5/a13 p2.4/a12 p2.3/a11 psen ale
14、/prog ea/vpp t2/p1.0 t2ex/p1.1 p1.2 p1.3 p1.4 mosi/p1.5 miso/p1.6 sck/p1.7 rxd/p3.0 txd/p3.1 t0/p3.4 t1/p3.5 xtal2 xtal1 gnd rst 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 15 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 at89s52 /p3.7rd /p3.6wr /p3.2int0 /p3.3int1 图 2.1 at89s52 双列
15、直插式引脚图 3113 端口介绍 p0 口:p0 口是一个 8 位漏极开路的双向 i/o 口。作为输出口,每位能驱动 8 个 ttl 逻辑电平。对 p0 端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据 存储器时,p0 口也被作为低 8 位地址/数据复用。在这种模式下,p0 具有内部上拉电 阻。在 flash 编程时,p0 口也用来接收指令字节;在程序校验时,输出指令字节。 程序校验时,需要外部上拉电阻。 p1 口:p1 口是一个具有内部上拉电阻的 8 位双向 i/o 口,p1 输出缓冲器能驱动 4 个 ttl 逻辑电平。对 p1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为
16、输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流 (iil) 。此外,p1.0 和 p1.2 分别作定时器/计数器 2 的外部计数输入(p1.0/t2)和 时器/计数器 2 的触发输入(p1.1/t2ex) 。在 flash 编程和校验时,p1 口接收低 8 位 地址字节。 p2 口:p2 口是一个具有内部上拉电阻的 8 位双向 i/o 口,p2 输出缓冲器能驱动 4 个 ttl 逻辑电平。对 p2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为 输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流 (iil) 。在访问外部程序存储器或用
17、16 位地址读取外部数据存储器(例如执行 movx dptr)时,p2 口送出高八位地址。在这种应用中,p2 口使用很强的内部上拉发送 1。在使用 8 位地址(如 movx ri)访问外部数据存储器时,p2 口输出 p2 锁存器的 内容。在 flash 编程和校验时,p2 口也接收高 8 位地址字节和一些控制信号。 p3 口:p3 口是一个具有内部上拉电阻的 8 位双向 i/o 口,p2 输出缓冲器能驱动 4 个 ttl 逻辑电平。对 p3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为 输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流 (iil) 。p3 口亦
18、作为 at89s52 特殊功能(第二功能)使用。在 flash 编程和校验时, p3 口也接收一些控制信号。 312 at89s52 的时钟介绍 单片机的工作过程是:取一条指令、译码、进行操作,再取一条指令、译码、进 行微操作,这样自动的一步一步的由微操作依序完成相应指令规定的功能。各指令的 微操作在时间上由严格的次序,各种微操作的时间次序称作为时序。 3121 at89s52 的时钟信号产生方式 at89s52 单片机的时钟信号通常有两种产生方式:一是内部时钟方式,二是外部 时钟方式。 内部时钟方式如图 2.2 所示。在 at89s52 单片机内部有一振荡电路,只要在单片 机的 xtal1
19、和 xtal2 引脚外接石英晶体,就构成了自激振荡器并在单片机内部产生时 钟信号。图中电容器 c1、c2 的作用是稳定频率,快速起振,电容值在 530pf;晶 振 cys 的振荡器频率为 1.212mhz。 图 2.2 内部时钟方式 外部时钟方式是把已有时钟信号引入到单片机内,如图 2.3 所示。此方式多用于 多片 at89s52 单片机同时工作。以便于各单片机同步。一般要求外部信号高电平的持 续时间大于 20ns,且为频率低于 12mhz 的方波。对于采用 chmos 工艺的单片机,外 部时钟主要由 xtal1 端引入,而 xtal2 端引脚应悬空。 图 2.3 外部时钟方式 3122 at
20、89s52 的时钟信号 晶振周期为最小的时序单元。晶振信号经分频器形成两相错开的时钟信号 p1 和 p2.时钟信号的周期也称为 s 状态,它是晶振周期的两倍。即一个时钟周期包含两个 晶振周期。在每个时钟周期的前半周期,相位 1 有效,在每个时钟周期的后半周期, 相位 2 有效。每个时钟周期有两个节拍 p1 和 p2,cpu 以两相时钟 p1 和 p2 为基本节 拍指挥各个部件协调工作。 晶振信号 12 分频后形成机器周期。一个晶振周期包含 12 个晶振周期或 6 个时 钟周期。因此每个机器周期的 12 个晶振脉冲可以表示为 s1p1 s2p2s6p6。晶振 周期和机器周期是单片机内计算其他时间
21、值的基本时序单位。如晶振频率为 12hz, 则机器周期为 1us,指令周期为 1-4us。 313 单片机中断的介绍 在设计中用到了外部中断int0/int1和定时器t0。它们的中断请求标志分别为 ie0,ie1和tf0。这些中断请求标志位分别由特殊功能寄存器tcon和tmod的相应位锁存。 在这个设计中,中断允许寄存器是首要介绍的。 3131 中断允许寄存器 ie 控制 cpu 对中断源的开放或屏蔽。 中断的开放和屏蔽实现2级控制,一个总开关中断控制所有的中断。 ie的格式如下: ieeaeset1ex1et0ex0 位地址 afhachabhaaha9ha8h 当 ea=0 时,所有的中断
22、请求被屏蔽,cpu 不接受任何请求。 当ea=1时,cpu开中断,此时只要五个中断源的中断请求允许为1,则开中断。 3132 tmod-工作方式控制寄存器 用于选择定时器/计数器的工作模式,字节地址为89h,8位分2组,高4位控制t1, 低4位控制t0,其格式如下: d7d6d5d4d3d2d1d0 tmodgatec/tm1m0gatec/tm1m0 下面对工作方式选择位做说明: m1 m0-工作方式选择位,m1 m0共有4种编码,分别对应4种工作方式。如表1: 表1 工作方式选择 m1 m0 工作方式 0 0方式0,为13位定时器/计数器 0 1方式1,为16位定时器/计数器 1 0方式2
23、,8位的常数自动重新装载的定时器/计数器 1 1方式3,仅适应于t0,t0分为两个8位的计数器,停止计数 中断的触发方式:电平触发方式和下降沿触发方式。 32 电源电路 单片机电源(220v 转 5v)设计电源电路采用 lm7805 集成稳压器作为稳压器件,用 典型接法,220v 电源整流滤波后送入 lm7805 稳压,在输出端接一个 470u 和 0.1u 电 容进一步滤除纹波,得到 5v 稳压电源。电路如图 2.4 所示 220v9v 体 tf1 体体体 vin +5v gnd 7805d1 4007 d4 4007 d3 4007 d2 4007c3 220uf/25v c2 1000u
24、f/25v gnd + _ vcc 图 2.4 电源电路图 33 时钟电路 单片机工作的时间基准,决定单片机工作速度。时钟电路就是振荡电路,向单片 机提供一个正弦波信号作为基准,决定单片机的执行速度。at89s51 单片机时钟频率 范围:0 33mhz,本电路选择 11.0592mhz。电路如图 2.5 所示。 x1 体 体 体 体c5 体 体 c4 体 体 gnd 图 2.5 时钟电路图 34 复位电路 单片机在启动时都需要复位,以使cpu 及系统各部件处于确定的初始状态, 并从初态开始工作。 89 系列单片机的复位信号是从 rst 引脚输入到 芯片内的施 密特触发器中的。当系统处于正常工作
25、状态时,且 振荡器稳定后,如果 rst 引 脚上有一个高电平并维持 2 个机器周期 (24 个振荡周期 )以上,则 cpu 就可以响 应并将系统复位。 单片机系统的复位方式有:手动按钮复位 和上电复位,这里选用手动按钮复 位。手动按钮复位需要人为在复位输入端rst 上加入高电平。一般采用的办法是 在 rst 端和正电源 vcc 之间接一个按钮。当人为按下按钮时,则vcc 的+5v 电平 就会直接加到 rst 端。由于人的动作再快也会使按钮保持接通达数十毫秒,所以, 完全能够满足复位的时间要求。 复位电路工作原理如图所示,vcc 上电时,c 充电,在 10k 电阻上出现电压,使 得单片机复位;几
26、个毫秒后,c 充满,10k 电阻上电流降为 0,电压也为 0,使得单片 机进入工作状态。工作期间,按下 s,c 放电。s 松手,c 又充电,在 10k 电阻上出现 电压,使得单片机复位。几个毫秒后,单片机进入工作状态。 c1 体 体 体 体 sw2 体 体 体 体 体 r1 体 体 r2 体 体 vcc gnd rst 图 2.6 复位电路图 35 led数码管显示 351 数码管显示简介 数码管 led 串口显示模块通常有两种显示方法:动态显示和静态显示。 动态显示:连接方法是将每个二极管的同名端连在一起,而每个显示器的 公共 极 com 各自独立的接受 i/o 线控制,cpu 向字段输出端
27、口输出字型码,所有显示器接 受到相同的字符,而要使用哪个显示器要取决于他们的 com 的电平,而这段是由 i/o 端控制的,由单片机输出。动态扫描时连续的动态扫描,只是肉眼暂留现象,乃发光 二极管的余辉效应,给人的感觉是一组稳定的显示数据。 静态显示: 静态显示显示效果好,但是功耗大,但不占用端口,只需两个串口 线输出,变成较为简单。而且采用静态显示需要的驱动器件多,硬件成本相对更高。 比较以上两种方案,方案一硬件简单程序复杂,方案二硬件复杂程序简单,考虑 到实惠和对自己的编程锻炼,选择方案动态显示。 动态扫描方法是用其接口电路把所有显示器的8个笔画字段(ag 和 dp)同名端 连在一起,而每
28、个显示器的公共极 com 各自独立的接受 i/o 线控制。cpu 向字段输出 端口输出字型码时,所有显示器接受到相同的字型码,但究竟使用哪个显示,则取决 于公共极 com 端,而这一端是由/wr 和/rd 控制的,由单片机决定何时显示哪一位。 动态扫描用分时的方法去轮流控制各个显示的 com 端,时各个显示器轮流亮。在轮流 点亮扫描过程中,每为显示器的点亮时间极为短暂,但由于人的视觉暂留现象及发光 二极管的于辉效应,给人的印象就时一组稳定的显示数据。 显示部分电路图: 图2.7 数码管显示原理 352 数码管编码表 7段数码管可以包括小数点的09的数字和部分的英文字母,为了获得不同的字 符,数
29、码管各段所加的电平也不同,编码也不一样。共阴极数码管的字型,字段和编 码的关系如下表2: 表2 数码管编码表 十六进制数h gf edcba显示代码 00 x3f 10 x06 20 x5b 30 x4f 40 x66 50 x6d 60 x7d 70 x07 80 x7f 90 x6f . .0 x80 36 开关控制 本电路要实现可设定 5 个倒计时设计要求,需要 1 个复位键,一个“+”和一个 “-”按键,另外再加 5 个时间设定按键用于实现倒计时间设定,按键时可直接输出 相应倒计时间。 37 单片机的去抖动 单片机去抖动可以用软件和硬件两种方法。硬件方法就是加去抖动电路,例如在 按键两
30、端并联 10uf 的电容或通过 rs 触发器连接按键,硬件去抖动从根本上避免抖动; 软件方法则采用时间延时以躲过抖动,待信号稳定之后再进行键扫描。对于系统软件 量不大的场合,采用软件去除抖动既节约硬件开销又很实用且有效。所以本设计采用 软件去抖动。 4 电路的软件部分 单片的使用除了硬件,同样也要软件的使用,我们写汇编程序编程 cpu 可执行的 机器码有两种方法,一种是手工汇编,一种是机器汇编。机器汇编通过汇编软件变为 机器码,用于 msc-51 单片机的汇编软件有早期的 a51,随着单片机开发技术的不断 发展,从使用普通汇编语言到高级语言的不断发展,keil 是目前最流行开发 mcs-51
31、系列单片机的软件。keil c51 汇编,plm 语言和 c 语言的程序设计,界面友好。keil 是美国 keilsoftware 公司出品的 52 系列兼容单片机 c 语言开发系统。用过汇编语言 后再使用 c 语言来开发,体会更加深刻。 程序框图: y 开始 系统初始化 1 号键按下? 1 号盒倒计 时时间设定 开始倒计时 5 号键按下? 2 号键按下? 3 号键按下? 4 号键按下? 2 号盒倒计 时时间设定 3 号盒倒计 时时间设定 4 号盒倒计 时时间设定 5 号盒倒计 时时间设定 倒计时完? y y y y y 结束 图 2.8 程序框图 源程序如下: #include #inclu
32、de #define uchar unsigned char #define uint unsigned int sbit b1=p10; sbit b2=p11; sbit b3=p12; sbit b4=p13; sbit b5=p14; sbit 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
33、,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,0 x06,0 x5b,0 x4f, /03 0 x66,0 x6d,0 x7d,0 x07, /47 0 x7f,0 x6f,0 x77,0 x7c, /8b 0 x39,0 x5e,0 x79,0 x71 /cf ; void delay(uint z) uint x,y; for(x=z;x0;x-) for(y=11
34、0;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=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
35、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 x10。 tmod=0 x01; /定时器工作方式 1 th0=(65535-50000)/256; /因为晶振用的是 11.0592mhz。在取初值时,大概 定义为一个中断为 50ms tl0=(65535-50000)%256; tr0=1; p1=
36、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; break; case 2:if(newval59) newval=0; display(hour1,minute1,second1); minute1=newval; break; case 3:if(newval59) newval=0; d
37、isplay(hour1,minute1,second1); second1=newval; break; default:break; else newval-; switch(slnum) case 1:if(newval0) newval=23; display(hour1,minute1,second1); hour1=newval; break; case 2:if(newval0) newval=59; display(hour1,minute1,second1); minute1=newval; break; case 3:if(newval23) newval=0; displ
38、ay(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(hour2,minute2,second2); second2=newval; break; default:break; else newval-; switch(slnum) case 1:if(newval0) newval=23; display(h
39、our2,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,minute3,second3); hour3=newval; break; case 2:if(newval59) newval=0; display(hour3,minute3,second3); minute3=newval; break; cas
40、e 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,minute3,second3); hour3=newval; break; case 2:if(newval0) newval=59; display(hour3,minute3,second3); minute3=newval; break; case 3:
41、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(newval59) newval=0; display(hour4,minute4,second4); second4=newval; break; default:break; else newval-; switch(slnum) case 1:if(n
42、ewval0) 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) newval=0; display(hour5,minute5,second5); hour5=newval; break; case 2:if(newval59) newval=0; display(hour5,minute5,second5)
43、; 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) newval=23; display(hour5,minute5,second5); hour5=newval; break; case 2:if(newval0) newval=59; display(hour5,minute5,second5); mi
44、nute5=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); if(s5=0) while(!s5); display(hour5,minute5,second5); slnum+; tr0=0; while(1) display(hour5,minute5,second5); if(s5=0) delay(
45、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); if(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); tur
46、n_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); /写入日寄存器 if(slnum=4) slnum=0; break; void xian1() if(g=20) g=0; second1-; if(second10) second1=59; minute1-; if(minute10) minute1=59;
47、hour1-; if(hour10) hour1=0; display(hour1,minute1,second1); if(second1=0tr0=0;b1=0;bell=0;delay2(5);b1=1;bell=1; void xian2() tr0=1; if(g=20) g=0; second2-; if(second20) second2=59; minute2-; if(minute20) minute2=59; hour2-; if(hour20) hour2=0; if(second2=0tr0=0;b2=0;bell=0;delay2(5);b2=1;bell=1; di
48、splay(hour2,minute2,second2); void xian3() tr0=1; if(g=20) g=0; second3-; if(second30) second3=59; minute3-; if(minute30) minute3=59; hour3-; if(hour30) hour3=0; if(second3=0tr0=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(second
49、40) second4=59; minute4-; if(minute40) minute4=59; hour4-; if(hour40) hour4=0; if(second4=0tr0=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(s
50、econd5=0tr0=0;b5=0;bell=0;delay2(5);b5=1;bell=1;while(1)d isplay(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 if(second1=0 if(second2=0 if(second3=0 if(second4=0 void time()interrupt 1 /如果用
51、 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)马忠梅等编著, 单片机 c 语言应用程序
52、设计 , (第四版) 北京航空航天大学出版社 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 系列单片机原理及接口技术m 北京航天航空出版社,2006 (13)康华光电子技术基础m 数字部分高等教育出版社,1998 (14)胡汉才单片机原理及系统设计m 清华
相关知识
基于单片机的智能宠物喂食器开题报告
基于单片机的宠物自动喂食器
让爱宠不再挨饿:基于51单片机的定时宠物投喂自动喂食器
让爱宠不再饿肚子:基于51单片机的定时宠物投喂自动喂食器
基于单片机的智能宠物喂食器设计
基于stm32智能图像宠物投喂喂养物联网单片机软硬件设计毕业生系统
基于单片机的智慧宠物窝系统设计(论文+源码)
基于单片机的智能宠物投喂系统的设计
基于单片机智能无线蓝牙定时器宠物喂食器、药盒系统设计
宠物狗智能项圈论文
网址: 毕业设计(论文)基于单片机的宠物喂食器电路设计 https://m.mcbbbk.com/newsview554923.html
上一篇: 基于STM32的宠物自动喂食器 |
下一篇: 激萌猫咪桌面宠物下载 |