单片机课程设计(论文)-电子时钟.doc

上传人:来看看 文档编号:3262751 上传时间:2019-08-06 格式:DOC 页数:50 大小:714.52KB
返回 下载 相关 举报
单片机课程设计(论文)-电子时钟.doc_第1页
第1页 / 共50页
单片机课程设计(论文)-电子时钟.doc_第2页
第2页 / 共50页
单片机课程设计(论文)-电子时钟.doc_第3页
第3页 / 共50页
单片机课程设计(论文)-电子时钟.doc_第4页
第4页 / 共50页
单片机课程设计(论文)-电子时钟.doc_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《单片机课程设计(论文)-电子时钟.doc》由会员分享,可在线阅读,更多相关《单片机课程设计(论文)-电子时钟.doc(50页珍藏版)》请在三一文库上搜索。

1、1 广西民族大学广西民族大学 第二次课程设计第二次课程设计 论文题目:论文题目: 学院(系)学院(系): 物理与电子工程学院物理与电子工程学院 专专 业业 : 通信工程通信工程 年级班级年级班级 : 20072007 级级 学学 号号 : 学生姓名学生姓名 : 指导教师指导教师 : 电子时钟电子时钟 2 摘要摘要:基于 STC12C5A32S2 单片机设计编程实现走时基本功 能,并加于 ad 采样、测温、串口通信、24c02 掉电保护等功能。使 用单片机的 ad 口采样光敏电阻和滑动电阻器两端的电压,测温度传 感器 18b20 的数据采集。能够在 lcd1602 实现时钟、日期、闹钟、 亮度、

2、温度的显示。可以利用按键进行调时、调日期和调节闹钟。 关键词:关键词:STC12C5A32S2 lcd1602 ad 采样采样 18b20 24c02 Abstract: STC12C5A32S2 single chip design the basic functions of travel time programming, and increase in ad sampling, temperature measurement, serial communication, 24c02 power-down protection. I use the SCM sample ad photo

3、sensitive resistor and the voltage across the sliding resistor, temperature sensor 18b20 measured data into the microcontroller. Can be achieved in lcd1602 clock, date, alarm clock, light, temperature display. Can use the button to transfer, the transfer date and the regulation clock. Key words: STC

4、12C5A32S2 lcd1602 ad sample 18b20 24c02 3 目录目录 1 1 设计任务与要求设计任务与要求5 1.1 设计任务5 1.2 功能分析5 2硬件设计硬件设计 2.1 芯片资料6 2.1.1 芯片介绍6 2.1.2 芯片管脚图7 2.2 原理图8 2.3 PCB 图.9 2.4 按键.10 2.5 LCD显示模块.10 2.6 24C02 掉电保护11 2.7 外围模块12 2.7.1 AD采样12 2.7.2 温度传感器 18B20.12 3 3 软件设计软件设计13 3.1 主程序.13 3.1.1 流程图13 3.1.2 源程序14 3.2 显示模块.1

5、4 3.2.1 显示位置分布14 3.2.2 LCD1602 流程图15 3.2.3 显示子程序15 3.3 按键控制.16 3.3.1 各功能键设定16 3.3.2 按键扫描程序16 3.3.3 源程序17 3.4 外围模块软件设计17 3.4.1 AD采样模块 18 3.4.2 温度传感器 18B20.19 3.5 掉电保护19 3.6 串口通信.20 4 4系统测试系统测试 .22 4.1 系统硬件调试.22 4 4.2 系统软件调试23 5 5 参考文献参考文献24 6 附录附录.25 1 设计任务与要求设计任务与要求 1.1、设计任务 1、使用 1602 液晶模块作为显示器件; 2、

6、平时按 24 小时制显示当前时间,要求使用定时中断完成,每日误差不得大于 1 秒; 3、当前时间可调(只调时、分即可) ; 4、系统意外断电时,当前时钟的时和分数应能保存,以便使系统下次上电时能从上次 断电时间开始走时;(EEPROM 24C02 使用单片机内部资源) 5、能设置 3 个定时闹铃点,每个点分别可调,并分别可以设置应否起作用; 6、定时闹铃时间到且该闹铃点被设定为“起作用”时,应能发出持续约 1 分钟的闹铃声, 而在发出闹铃的过程中,要求可以被按键终止;闹铃过程不得影响正常的走时; 7、所有闹铃点数据应能断电保存; 8、能分别根据串口收到的“获取当前时间”、 “获取当前电压值”和

7、“获取当前光亮度值” 命令,分别通过串口向外发送“当前时间” 、 “当前电压值”和“当前光亮度值”,以便使 用串行设备观察这些参数; 9、显示温度、光亮值 10、显示合理、操作简单明了。 1.2 功能分析 1 电源提供方案 为了使模块稳定工作,必须有可靠的电源。这里有两种电源方案 方案一:采用独立的稳压电源。此方案的优点是稳定可靠,且有各种成熟电路可供选 用,缺点是各模块采用独立的电源,会使系统复杂,且可能影响电路电平。 方案二:采用单片机控制模块提供的电源,此方案的有点是系统简明,节约成本,缺 点是输出功率不高; 方案对比:方案一比较复杂,成本高,而方案二就能满足本次设计,因而采用了第二 种

8、方案。 2 显示界面方案 该系统要求完成即使,状态灯等功能,基于上述原因,考虑了二种方案: 方案一:采用数码管显示。该方案只能显示有限的符号和数码字符,无法胜任题目要 求 方案二:采用点阵式 LCD 显示,这种方案实现比较复杂,需要完成大量的软件工作, 但功能强大能方便的显示各种英文字符 ,图形等。 5 方案对比:方案二较形象,为了能完成题目的要求,采用了方案二实现系统的显示功 能。 3 输入方案 题目要求系统能手动设灯亮的时间,紧急情况处理,我们也考虑了两种方案 方案一:直接在 IO 口线上接上按键开关,此种方案设计精简和优化了电路,但是通 过按键扫描的方式,判断按键,此种方案如果按键扫描次

9、数少,会导致漏判断按键, 使得按键使用不灵敏 方案二:所剩余的口资源比较多,我们使用四个按键同过二极管接到 P3.2,外部中断 0 的口,五个按键 S0,S1,S2,S3,S4,S5 均采样外部中断接法。当一有按键按下 即能产生 外部中断,及时处理按键。 方案对比:按键均采用外部中断接法的目的是使按键反应灵敏,能够快速准确的控制。 2 硬件设计硬件设计 2.1 芯片资料芯片资料 2.1.1 STC12C5A32S2 芯片芯片 1:STC12C5A32S2 芯片是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速 /低功耗/超强抗干扰的新一代 8051 单片机,指令代码完全兼容传统的 805

10、1,但速度 快 812 倍内部集成 MAX810 专用 复位电路,2 路 PWM,8 路告诉 10 位 A/D 转换(250K/s),针对电机控制,强干扰 场合。 1.增强型 8051 CPU,1T,单时钟/机器周期,指令代码完全兼容 8051 2.工作电压:5.5V3.3V(5V 单片机) 3.工作频率范围:035MHz,相当于普通 8051 的 0420MHz 4.用户应用程序空间 8K/16K/20K/32K/40K/48K/52K/60K/62K 字节。 。 。 。 。 5.片上集成 1280 字节 RAM 6.通用 I/O 口(36/40/44 个)复位后为:准双向口/弱上拉(普通

11、8051 传统 I/O 口) 可设置成四种模式:准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏每个 I/O 口驱动能力均可达到 20mA,但整个芯片最大不要超过 55Ma 7.ISP(在系统可编程)/IAP(在应用可编程) ,无需专用编程器,无需专用仿真器可 通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片 8.看门狗 9.内部集成 MAX810 专用复位电路(外部晶体 12M 以下时,复位脚可直接接 1K 电阻到地) 10. 外部掉电检测电路:在 P4.6 口有一个低压门槛比较器 5V 单片机为 1.32V 误差 为+/-5%,3.3V 单片机为 1.30V 误差为+/

12、-3% 6 11. 时钟源:外部高精度晶体/时钟,内部 R/C 振荡器(温漂为+/-5%到+/-10%以内) 用户在下载用户程序时,可选择是使用 R/C 振荡器还是外部晶体/时钟常温下内 部 R/C 振荡器频率为:5.0V 单片机为 12. 共有 4 个 16 位定时器 两个与传统 8051 兼容的定时器/计数器,16 位定时器 T0/T1,没有定时器 2,但有独立的波特率发生器做串行通讯的波特率发生器 再加上 2 路 PCA 模块可实现 2 个 16 位定时器 13. 2 个时钟输出口,可由 T0 的溢出在 P3.4/T0 输出时钟,可有 T1 的溢出在 P3.5/T1 输出时钟 14. 外

13、部中断 I/O 口 7 路,传统的下降沿中断或低电平触发中断,并新增支持上升沿 中断 PCA 模块,POWER Down 模式可由外部中断唤醒 INT0/P3.2 INT1/P3.3 T0/P3.4 T1/P3.5 RXD/P3.0 CCP0/P1.3(也通过寄存器 设置到 P4.2),CCP1/P1.4(也可通过寄存器设置到 P4.3) 15. PWM(2 路)/PCA(可编程计数器阵列,2 路) 也可用来当 2 路 D/A 使用 也可用来再实现 2 个定时器 也可用来再实习 2 个外部中断(上升沿中断/下降沿中断均可分别或同时支持 16. A/D 转换,10 位精度 ADC,共 8 路,转

14、换速度可达 250K/S(每秒钟 25 万次) 17. 通用全双工异步串行口(UART) ,由于 STC12 系列是高速的 8051,可再用定时 器或 PCA 软件实现串口 18. STC12C5A60S2 系列有双串口,后缀有 S2 标志的才有双串口,RXD2/P1.2(可通 过寄存器设置到 P4.2),TXD2/P1.3(可通过寄存器设置到 p4.3) 19. 工作温度范围:-40+85(工业级)/075(商业级) 20. 封装:DIP-40,LQFP-44,LQFP-48 I/O 口不够时,可用 2 到 3 根普通 I/O 口线外 接 74HC164/165/595(均可级联)来扩展 I

15、/O 口 还可用 A/D 做按键扫描来节 省 I/O,或者用双 CPU,三线通信,还多了串口。 2.1.2 STC12C5A32S2 芯片管脚图芯片管脚图 7 2.2 原理图原理图 8 P1.0/T2 1 P1.1/T2EX 2 P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8 RST 9 P3.0/RxD 10 P3.1/TxD 11 P3.2/INT0 12 P3.3/INT1 13 P3.4/T0 14 P3.5/T1 15 P3.6/WR 16 P3.7/RD 17 XTAL2 18 XTAL1 19 VSS 20 P2.0/A8 21 P2.1/A9

16、 22 P2.2/A10 23 P2.3/A11 24 P2.4/A12 25 P2.5/A13 26 P2.6/A14 27 P2.7/A15 28 PSEN 29 ALE 30 EA/VPP 31 P0.7/AD7 32 P0.6/AD6 33 P0.5/AD5 34 P0.4/AD4 35 P0.3/AD3 36 P0.2/AD2 37 P0.1/AD1 38 P0.0/AD0 39 VCC 40 U1 P89C52X2FN 12 Y1 XTAL 33pF C3 Cap 33pF C4 Cap S2 S3 S4 S5 S6 10uF C5 1K R5 10K R6 VCC 1 2 3 4

17、 5 6 7 8 JP4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 JP1 VCC 10 R2 VCC E0 1 E1 2 E2 3 GND 4 SDA 5 SCL 6 WC 7 VCC 8 U2 M24C02BN6 10K R12 10K R13 VCC D1 D2 D3 D4 1 2 3 JP5 ds18b20 10K R10 VCC 1 2 3 4 5 6 7 8 9 P1 Header 9 LS1 Bell Q2 pnp9015 18 R11 VCC 1K R8 VCC VCC 1K R7 K1 1 2 3 4 JP3 usb DS13 LED1 S

18、1 1K R3 10uF C1 VCC 1K R1 1K R9 Q1 NPN9014 3k R4 VCC 1 2 JP2 Header 2 1 2 3 4 5 6 7 8 P4 Header 8 1 2 3 4 5 6 7 8 P10 Header 8 VCC 1 2 3 4 5 6 7 8 P7 Header 8 1 2 3 P8 IR VCC 1 2 P5 Header 2 1 2 P3 Header 2 0.1uF C2VCC 1 2 3 P2 Header 3 1 2 P6 1 2 P9 1 2 P11 1 2 P13 Header 2 1 2 3 P12 口口口 1 2 3 4 5

19、6 7 8 9 P20 Header 9 1 2 3 4 P21 Header 4 DS1 DS2 DS3 DS4 DS5 DS6 DS7 DS8 DS9 DS10DS11DS12 1K R30 1K R31 1K R32 1K R33 1K R34 1K R35 1K R36 1K R37 1K R38 1K R39 1K R40 1K R41 1 2 3 4 5 6 7 8 9 10 11 12 P22 Header 12 VCC 1 2 3 P30 Header 3 2.3 PCB 图图 9 2.4 按键按键 所有按键都经过二极管接到单片机的 INT0 口,再分别接到各个 I/O 口,当

20、按键一按下的时 候便可产生中断,增加按键的灵敏度。各个按键所接的对应 I/O 口: K1-P3.4,K2-P3.5,K3-P3.6,K4_P3.7 2.5 LCD 液晶显示模块液晶显示模块 引脚接口说明表 第 1 脚:VSS 为地电源。 第 2 脚:VDD 接 5V 正电源。 第 3 脚:VL 为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对 比度过高时会产生“鬼影”,使用时可以通过一个 10K 的电位器调整对比度。 第 4 脚:RS 为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。 第 5 脚:R/W 为读写信号线,高电平时进行读操作,低电平时进行写操作。当

21、 RS 和 R/W 共同为低电平时可以写入指令或者显示地址,当 RS 为低电平 R/W 为高电平时可以读忙信 号,当 RS 为高电平 R/W 为低电平时可以写入数据。 第 6 脚:E 端为使能端,当 E 端由高电平跳变成低电平时,液晶模块执行命令。 第 714 脚:D0D7 为 8 位双向数据线。 10 第 15 脚:背光源正极。 第 16 脚:背光源负极。 液晶显示硬件接线如下图所示 2.6 24c02 的用法介绍的用法介绍 AT24c02 是 ATMEL 公司生产的 AT24C 序列 E2PROM.它的存储容量为 256*8.采用此芯片可以 解决断电保存问题,可对所储数据保存 100 年,

22、并可多次擦写擦写次数可达 10 万次以上。 在一些应用系统设计中,有时需要对数据进行掉电保护。若采用普通存储器,在掉电时需 要用电池供电,并需要在硬件上增加掉电检测电路,但存在电池不可靠以及扩展存储芯片 占用单片机过多口线的缺点。采用具有 I2C 总线接口的串行 E2PROM 器件可很好地解决掉电 数据保存问题,且硬件电路简单。 2.4.1 AT24c02 引脚配置 各引脚的功能如下: 1,2,3(A0、 A1、 A2)可编程地址输入端。 4(GND)电源第。 5(SDA)串行数据输入输出端。 6 (SCL) 串行时钟输入端。 7(WP)写保护输入端,用于硬件数据保护。当其为低电平时,可以对整

23、个存储器进行 正常的读/写操作操作:当其为高电平时,存储器具有写保护功能,但是读操作不受影响。 8(VCC)电源争端。 11 24c02 接线图: 2.7 外围模块外围模块 2.7.1 Ad 采样模块采样模块 采样到的值转换成电压值:U=ad 采样值*Ucc/1023 2.7.2 温度传感器温度传感器 18b20 DS18B20 的使用方法: 由于 DS18B20 采用的是 1Wire 总线协议方式,即在一根数据线实现数据的双向传 输,而对 AT89S51 单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件 的方法来模拟单总线的协议时序来完成对 DS18B20 芯片的访问。 由于 D

24、S18B20 是在一根 I/O 线上读写数据,因此,对读写的数据位有着严格的时序要求。 DS18B20 有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信 号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件 作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总 线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输 都是低位在先。 DS18B20 的复位时序 DS18B20 的读时序 对于 DS18B20 的读时序分为读 0 时序和读 1 时序两个过程。 对于 DS18B20 的读时隙是从主机把单

25、总线拉低之后,在 15 秒之内就得释放单总线,以让 DS18B20 把数据传输到单总线上。DS18B20 在完成一个读时序过程,至少需要 60us 才 能完成。 12 DS18B20 的写时序 对于 DS18B20 的写时序仍然分为写 0 时序和写 1 时序两个过程。 对于 DS18B20 写 0 时序和写 1 时序的要求不同,当要写 0 时序时,单总线要被拉低至少 60us,保证 DS18B20 能够在 15us 到 45us 之间能够正确地采样 IO 总线上的“0”电平,当 要写 1 时序时,单总线被拉低之后,在 15us 之内就得释放单总线。 硬件连接图: 3 软件设计软件设计 3.1

26、主程序主程序 3.1.1流程图流程图 13 开始开始 初始化 从 24c02 读出数据 装载初值 等待中断 显示程序 从 24c02 读出存进去的值 按键扫描 是否到 10s? 是否产生中断? 定时器 0 的中断服务程序 End 3.1.2源程序源程序 参见附录时钟.c 文件 3.2 显示模块显示模块 3.2.1显示位置分布显示位置分布 14 时钟 时:分:秒 温度值 日期:年/月/日 闹钟 1 闹钟 2 闹钟 3 通道 0 采样值 转化值 通道 1 采样值 转化值 3.2.2Lcd1602 流程图流程图 定义变量 Lcd 送显示数据函数 显示位置 返回 Lcd 初始化子函数 显示两位整数 显

27、示字符串 显示 4 位整数 显示浮点数 源程序参见附录 lcd-1602.h 3.2.3显示子程序显示子程序 15 判断闹铃 ad_1=0; ad_0=ADC_GET(0); ad_1=ADC_GET(1); if(flag_do=1) flag_do=0; ES=0; /关串口中断 TI=1; switch(flag_on) case 1:puts(“黄萍生begainn“);break; case 2:printf(“time:%d:%d:%dn“,shi,fen,sec);break;/时间显示 case 3:printf(“data:%d/%d/%dn“,year,month,day)

28、;break; /日期显示 case 4:printf(“Temp:%c%c%c%c.%c Cn“,flagdat,disdata0,disdata1,disdata2,disdata3);break; /温度显示 case 5:printf(“bright:%f V;huabian:%f Vn“,ad_1*4.59/1023,ad_0*4.59/1023);break; /显示光敏和滑变两端电压值 21 case 6:puts(“errorn“); /显示错误 while(!TI); TI=0; /发送完毕,TI 手动清 0 ES=1; /开中断 void ser() interrupt 4

29、 /串口中断 RI=0; /串行中断收到数据后,RI 被置 1,需要清零以便能响应下次串行中断 a=SBUF; /取出数据 flag_do=1; /置标志位=1,告诉主函数有新数据到 if(a=1) flag_on=1; else if(a=2) flag_on=2; else if(a=3) flag_on=3; else if(a=4) flag_on=4; else if(a=5) flag_on=5; else if(a=6) flag_on=6; 4 系统软硬件的调试系统软硬件的调试 4.1 系统硬件调试 设计好电路PCB之后,经过打印、热转印、制板、焊接元件后就可以进行硬 件的调试

30、了。首先检查电路上有否漏焊、开路和短路的现象;然后给电路板供 5V的直流电压,观察电路板上的电源指示灯是否正常之后,把单片机,液晶 显示插入插槽中,下载线连接到电路板上,下载测试程序到单片机中,观察芯 片工作是否正常,如果芯片正常工作则说明系统板正常,不正常则说明系统硬 件有问题。 下载线的作用是把编译好的单片机程序下载到目标单片机中以及提供电源。 22 我们用的下载程序软件,STC_ISP.exe 。如下图所示 下载程序之前先选择第一步在 MUC Typ 空中选择 STC12C5A32S2 芯片,第二步 在 打开文件前清 0 缓冲 打勾, 第三步 选择 COM 口 设置最高波特率为 1152

31、00 第四步 选择软件的默认设置即可 第五步 先在每次下载前重新调入 已打开缓冲区文件 前的小框框打勾。完成这些设置之后就可以把程序下载到我 们的系统板中。 4.2 系统软件调试 本系统使用的软件开发环境是 keil。Keil C51 是美国 Keil Software 公司出品的 51 系列兼容单片机 C 语言软件开发系统,与汇编相比, C 语言在功能上、结构性、 可读性、可维护性上有明显的优势,因而易学易用。Keil 提供了包括 C 编译器、宏 汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个 集成开发环境( uVision)将这些部份组合在一起。 在 keil

32、 中,源代码的输入,编译通过之后就可以进行软件调试了。程序经过编译之后,编 译产生的 hex 文件,下载到实物板中,通过观察 LCD 查看显示时间是否正确,检查灯亮的 时间,灯的跳转顺序是否符合我们预想,按键是否起到相应的作用。 经调试,程序基本上能达到以上设计任务的要求,可以实现时间显示,温度显示,ad 采样电压显示,闹钟功能,串行通信功能,并扩展了日期功能。时间,闹钟,日期可以通 过按键实现修改,闹钟状态可以有按键控制,ad 采样得到的电压值与实际的值存在一定的 23 误差,温度传感器工作正常,在串口助手可以实现发送和接受功能,日期可以区分大小月 和闰平年。 5 参考文献参考文献 新概念

33、51 单片机 C 语言教程.入门、提高、开发-郭天祥著 单片机原理及接口技术-李全利 迟荣强著 单片机接口 c 语言开发技术-龚运新等著 24 6 附录附录 主程序:时钟主程序:时钟 4.c #include #include #include #include“define.h“ #include“lcd_1602.h“ #include“24c02.h“ #include“1820.h“ #include“get_ad.h“ #include“show_all.h“ #include“key_work.h“ void main(void) lcd_int(); /液晶初始化 ADC_int

34、(0); /ADC 通道 0 初始化 ADC_int(1); /ADC 通道 1 初始化 init_24c02(); /24c02 初始化 /24C02 初始化 shi=read_add_24c02(2); fen=read_add_24c02(3); /读出 24c02 的 单元地址 2-12 中保存的数据并赋给变量时间、闹钟 nshi1=read_add_24c02(4); nfen1=read_add_24c02(5); alarm1=read_add_24c02(6); nshi2=read_add_24c02(7); nfen2=read_add_24c02(8); alarm2=r

35、ead_add_24c02(9); nshi3=read_add_24c02(10); nfen3=read_add_24c02(11); alarm3=read_add_24c02(12); if(shi=24|fen=60|nshi1=24|nfen1=60|nshi1=24|nfen1=60|nshi1=24|nfen1=60) /防止第一次读时还没写过数据进入 24C02 而乱码 shi=0;fen=0;nshi1=0;nfen1=0;alarm1=0; nshi2=0;nfen2=0;alarm2=0; nshi3=0;nfen3=0;alarm3=0; 25 TCON=0X02;

36、TMOD=0X21; TH0=(65536-50000)/256; /装载初始值,12MHZ 晶振 50ms 数 为 50000 TL0=(65536-50000)%256; TH1=0xfd; /装载初始值,波特率是 9600 TL1=0xfd; IE=0X81;/打开总中断獠恐卸? ET0=1; TR0=1; TR1=1; SM0=0;/SCON 寄存器设置串行口工作方式 1:一帧 10 位、1 起始 位 8 数据位 1 停止位 SM1=1; ES=1;/打开串口中断 REN=1;/允许串行接收位,若置 1,则只有接收到有效停止位时, RI 才置 1 while(1) key_work1(

37、); alarm_out(); chuan_kou(); wendu=read_temp(); if(xianshi=0 ds1820disp(wendu); if(xianshi=1 if(xianshi=2 if(sec%10=0) /存储数据开始 write_add_24c02(2,shi);delay_ms(20); write_add_24c02(3,fen);delay_ms(20); /存时间 write_add_24c02(4,nshi1);delay_ms(20); write_add_24c02(5,nfen1);delay_ms(20); write_add_24c02(

38、6,alarm1); delay_ms(20);/存闹钟 1 write_add_24c02(7,nshi2);delay_ms(20); write_add_24c02(8,nfen2);delay_ms(20); 26 write_add_24c02(9,alarm2); delay_ms(20);/存闹钟 2 write_add_24c02(10,nshi3); delay_ms(20); write_add_24c02(11,nfen3); delay_ms(20); write_add_24c02(12,alarm3);delay_ms(20);/存闹钟 3 void timer0(

39、) interrupt 1 /使用了中断 1 TH0=(65536-50000)/256; /装载初始值,11.0592MHZ 晶振一个机器周期为 1.085us TL0=(65536-50000)%256; / year3=year/4; year4=year/100; if(year3=0 else flag_y=0; if(stopbit=0) num+; if(num=18) num=0; sec+; if(sec=60) sec=0; fen+; alarm01=alarm02=alarm03=1; if(fen=60) fen=0; shi+; if(shi=24) shi=0;

40、day+; if(month=1|month=3|month=5|month=7|month=8|month=10|month=12) 27 month+; else if(month=4|month=6|month=9|month=11) month+; else if(month=2 month+; else if(month=2 month+; if(month=12) month=1; year+; /=串口通信 = void chuan_kou() ad_0=0; ad_1=0; ad_0=ADC_GET(0); ad_1=ADC_GET(1); if(flag_do=1) flag

41、_do=0; ES=0; /关串口中断 28 TI=1; switch(flag_on) case 1:puts(“huangpingsheng begainn“);break; case 2:printf(“time:%d:%d:%dn“,shi,fen,sec);break;/时间显示 case 3:printf(“data:%d/%d/%dn“,year,month,day);break; /日期显示 case 4:printf(“Temp:%c%c%c%c.%c Cn“,flagdat,disdata0,disdata1,disdata2,disdata3);break; /温度显示

42、case 5:printf(“bright:%f V;huabian:%f Vn“,ad_1*4.59/1023,ad_0*4.59/1023);break; /显示光敏和滑变两端电压值 case 6:puts(“errorn“); /显示错误 while(!TI); TI=0; /发送完毕,TI 手动清 0 ES=1; /开中断 void ser() interrupt 4 /串口中断 RI=0; /串行中断收到数据后,RI 被置 1,需要清零以便能响应下次串行中断 a=SBUF; /取出数据 flag_do=1; /置标志位=1,告诉主函数有新数据到 if(a=1) flag_on=1;

43、else if(a=2) flag_on=2; else if(a=3) flag_on=3; else if(a=4) flag_on=4; else if(a=5) flag_on=5; else if(a=6) flag_on=6; 定义头文件:定义头文件:define.h #ifndef _define_H_ #define _define_H_ /=lcd1602 相关定义= #define uint unsigned int #define uchar unsigned char #define lcd_data_port P0 29 sbit lcd_rs=P24; /定义与 1

44、602LCD 的 RS(第 5 脚)连接的口线 sbit lcd_en=P25; /定义与 1602LCD 的 EN(第 4 脚)连接的口线,第 5 脚 R/W 端直接接地 /sbit lcd_rw=P24; /=18b20 相关定义= sbit DQ=P21; /温度传感器信号线 uint t,t1,t2; uint tvalue;/温度值 uchar tflag;/温度正负标志 uchar flagdat; int wendu; uchar xdata disdata5; /=24c02 相关定义= sbit sda_24c02= P27; /上拉有红色发光二极管,低电平亮 sbit sc

45、l_24c02=P26; /上拉有黄色发光二极管,低电平亮 /-与 STC12C5A32S2 单片机 ADC 相关的寄存器声明- sfr P1ASF =0x9d; /P1 口模数转换功能控 制寄存器 sfr ADC_CONTR =0xbc; /AD 转换控制寄存器 sfr ADC_RES =0xbd; /AD 转换结果寄存器 高 sfr ADC_RESL =0xbe; /AD 转换结果寄存器 低 sfr AURX1 =0xa2; /AD 转换结果存储方式 控制位 /P1ASF 寄存器:8 位,对应 P1 口 8 根口线,用于指定哪根口线用作 ADC 功能 #define ADC_POWER 0

46、x80 /ADC 电源开 #define ADC_SPEED 0x60 /设为 90 个时钟周期 ADC 一次 #define ADC_START 0x08 /ADC 启动控制位设为开 #define ADC_FLAG 0x10 /ADC 结束标志位 unsigned long ad_0=0,ad_1=0,ad_n=0; /=时钟闹钟的相关定义= sbit beep=P23; /定义蜂鸣器端 char num=0,sec=0,fen=0,shi=0,day=29,month=5,year1,year2,nshi1=0,nfen1=0,nshi2=0,nfen2=0,nshi3 =0,nfen3=0,year3,year4; 30

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 信息产业


经营许可证编号:宁ICP备18001539号-1