版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、总电路图:单片机电路图:RESPACKSAr - o' w Ur 匚j r- i:d e>XTAL1XTAL2PSENALE eT30IL-P1I 叶Hid31P1 0 pi 1 p-1 2P1.3P1.4P1.5P-16P1.723ridn.1 *4KI,5SCLPRS1< rRSTPQJO/AM) P0.1/ACH P0J2/AD2 PO 3/AD3 PO 4/AD4 P0.5/AD5 PO 6/AD6 PO 7/AD7P2.0/A6PNhASP2.2/A10P2.3ZA11P2.4/A12P2/A13P2JB1A14P2.7/A15P3.0JRXD P3.1 jTKD
2、 PS.aNTO" P3.3/1NFTP34/TQP3.5/T1P3.BAP3.7iRC33383736353435322312JLLJL21602接线图:AT69C51f> RS £> RWO EASAWY OEAD2D3D4D5D6D7151302接线图:I/O接单片机3.5脚按键接线图:程序清单:#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int sbit ACCO = ACCA0;sbit ACC7 = A
3、CCA7;sbit t=P1AO;/ 进入调时按键sbit jia=P1A1;/ 加一按键sbit jian=P1A2;/ 减一按键sbit m=P1A3;/ 退出调时按键sbit BEEP=P2AO;/ 蜂鸣器sbit jtod=P1A4;/ 矩阵按键转独立按键,该脚置 Osbit T_CLK = P1A6; /* 实时时钟时钟线引脚 */sbit T_IO = P3A5; /* 实时时钟数据线引脚 */sbit T_RST = P1A7; /* 实时时钟复位线引脚 */sbit E=P2A7;/16O2 使能引脚sbit RW=P2A6;/16O2 读写引脚sbit RS=P2A5;/16
4、O2 数据 /命令选择引脚codeucharhanzi8=OxO4,OxOf,Ox12,OxOf,OxOa,Ox1f,OxO2,OxO2,OxOf,OxO9,OxOf,OxO9,OxOf,OxO9,Ox13, Ox11,Ox1f,Ox11,Ox11,Ox1f,Ox11,Ox11,Ox1f,OxOO;void v_W13O2(uchar ucAddr, uchar ucDa); uchar uc_R13O2(uchar);uchar dectobcd(uchar bcd);uchar bcdtodec(uchar);void beep();void delay(uchar x)uchar i;w
5、hile(x-)for(i=O;i<11O;i+);/* 名称 : enable(uchar del)* 功能 : 16O2 命令函数* 输入 : 输入的命令值* 输出 : 无* void enable(uchar del)RS = 0;RW = 0;P0 = del;E = 1;delay(3);E=0;/* 名称 : write(uchar del)* 功能 : 1602 写数据函数* 输入 : 需要写入 1602 的数据* 输出 : 无*void write(uchar del)RS = 1;RW = 0;P0 = del;E = 1;delay(3);E=0;/* 名称: L16
6、02_init()* 功能: 1602 初始化,请参考 1602 的资料* 输入: 无* 输出: 无*void L1602_init(void)enable(0x01);enable(0x38);enable(0x06);enable(0x0c);E=0;/装入自定义字符汉字void writch()uchar i,j;enable(0x40);for(i=0;i<8;i+)for(j=0;j<8;j+)write(hanziij);/* 名称 : L1602_char(uchar hang,uchar lie,char sign)* 功能 : 改变液晶中某位的值,如果要让第一行,
7、第五个字符显示 "b" L1602_char(1,5,'b')* 输入 : 行,列,需要输入 1602 的数据* 输出 : 无*/void L1602_char(uchar hang,uchar lie,char sign)uchar a;if(hang = 1) a = 0x80;if(hang = 2) a = 0xc0; a = a + lie - 1; enable(a); write(sign);/* 名称 : L1602_string(uchar hang,uchar lie,uchar *p)* 功能 : 改变液晶中某位的值,如果要让第一行,第
8、五个字符开场显示 函数如下L1602_string(1,5,"ab cd ef;")* 输入 : 行,列,需要输入 1602 的数据* 输出 : 无*/void L1602_string(uchar hang,uchar lie,uchar *p)uchar a;if(hang = 1) a = 0x80;if(hang = 2) a = 0xc0;a = a + lie - 1;enable(a);while(1)if(*p = '0') break;write(*p);,调用该函数如下"ab cd ef" ,调用该p+;/时钟调节 /
9、 void timechange()uchar a,num=1;uchar year,mon,day,hour,min,sec; /进入调时循环while(num)if(t=0) delay(5);if(t=0) num+; beep(); while(!t); /退出调时按键 mif(m=0) delay(5);if(m=0) num=0;enable(0x0f); a=uc_R1302(0x81)|0x80; v_W1302(0x8e,0); v_W1302(0x80,a);/调时到年以后退出调时 if(num=7) num=0;/num=1 调秒 if(num=1) enable(0xc
10、0+12);if(jia=0)delay(5);if(jia=0)/秒加一while(!jia); sec=bcdtodec(uc_R1302(0x81)&0x7f); sec+;if(sec>59)sec=0;L1602_char(2, 12, sec/10%10+48);L1602_char(2, 13, sec%10 + 48);v_W1302(0x80,dectobcd(sec)|0x80); if(jian=0) / 秒减一 delay(5);if(jian=0)while(!jian);sec=bcdtodec(uc_R1302(0x81); sec-;if(sec=
11、-1)sec=59;L1602_char(2, 12, sec/10%10+48);L1602_char(2, 13, sec%10 + 48); v_W1302(0x80,dectobcd(sec)|0x80); if(num=2)/调分钟enable(0xc0+9);if(jia=0)delay(5);if(jia=0)min = bcdtodec(uc_R1302(0x83); min+;while(!jia);if(min>59)min=0;L1602_char(2, 9, min / 10 % 10 + 48);L1602_char(2, 10, min % 10 + 48);
12、 v_W1302(0x82,dectobcd(min); if(jian=0) delay(5); if(jian=0) min = bcdtodec(uc_R1302(0x83);min-;while(!jian);if(min=-1)min=59;L1602_char(2, 9, min / 10 % 10 + 48);L1602_char(2, 10, min % 10 + 48);v_W1302(0x82,dectobcd(min);if(num=3)/ 调小时enable(0xc0+6);if(jia=0)delay(5);if(jia=0)hour = bcdtodec(uc_R1
13、302(0x85); hour+;while(!jia); if(hour>23) hour=0;L1602_char(2, 6, hour / 10 % 10 + 48);L1602_char(2, 7, hour % 10 + 48); v_W1302(0x84,dectobcd(hour);if(jian=0) delay(5); if(jian=0)while(!jian);hour = bcdtodec(uc_R1302(0x85); hour-;if(hour=-1) hour=23;L1602_char(2, 6, hour / 10 % 10 + 48);L1602_ch
14、ar(2, 7, hour % 10 + 48); v_W1302(0x84,dectobcd(hour);if(num=4)/ 调日期enable(0x80+13);if(jia=0) delay(5); if(jia=0)hour = bcdtodec(uc_R1302(0x87); day+;while(!jia); if(day>31)day=0;L1602_char(1, 13, day / 10 % 10 + 48);L1602_char(1, 14, day % 10 + 48); v_W1302(0x86,dectobcd(day); if(jian=0) delay(5
15、); if(jian=0) while(!jian); day=bcdtodec(uc_R1302(0x87); day-;if(day=-1) day=31;L1602_char(1,13,day/10%10+48);L1602_char(1,14,day%10+48); v_W1302(0x86,dectobcd(day);if(num=5)/ 调月份enable(0x80+10);if(jia=0)delay(5);if(jia=0)mon = bcdtodec(uc_R1302(0x89); mon+;while(!jia); if(mon>12) mon=0;L1602_cha
16、r(1, 10, mon / 10 % 10 + 48);L1602_char(1, 11, mon % 10 + 48); v_W1302(0x88,dectobcd(mon);if(jian=0) delay(5); if(jian=0) while(!jian); mon = bcdtodec(uc_R1302(0x89); mon-;if(mon=-1) mon=12;L1602_char(1, 10, mon / 10 % 10 + 48);L1602_char(1, 11, mon % 10 + 48); v_W1302(0x88,dectobcd(mon);if(num=6) /
17、 调年份enable(0x80+7);if(jia=0)delay(5);if(jia=0)year = bcdtodec(uc_R1302(0x8d);year+;while(!jia);if(year>20)year=0;L1602_char(1, 7, year / 10 % 10 + 48);L1602_char(1, 8, year % 10 + 48); v_W1302(0x8c,dectobcd(year);if(jian=0)delay(5);if(jian=0)while(!jian);year = bcdtodec(uc_R1302(0x8d);year-;if(ye
18、ar=-1)year=20;L1602_char(1, 7, year / 10 % 10 + 48);L1602_char(1, 8, year % 10 + 48); v_W1302(0x8c,dectobcd(year);if(num=0) / 关闭光标闪烁enable(0x0c);v_W1302(0x80,uc_R1302(0x81)&0x7f); /开启 1302 记时 /* 名称 : v_RTInputByte * 功能 :往 DS1302 写入 1Byte 数据* 输入 :ucDa 写入的数据* 输出 :无*void v_RTInputByte(uchar ucDa)uc
19、har i;ACC = ucDa;T_RST = 1;for(i=8; i>0; i-)T_IO = ACC0;T_CLK = 1;T_CLK = 0;ACC = ACC >> 1;/* 名称 : uc_RTOutputByte * 功能 : 从 DS1302 读取 1Byte 数据* 输入 : 无* 返回值 : ACC* uchar uc_RTOutputByte(void)uchar i;T_RST = 1; for(i=8; i>0; i-)ACC = ACC >>1;ACC7 = T_IO;T_CLK = 1;T_CLK = 0; return(AC
20、C);* * 名称 : v_W1302(uchar ucAddr, uchar ucDa)* 功能 : 往 DS1302 写入数据* 输入 : ucAddr: DS1302 地址 , ucDa: 要写的数据* 返回值 : 无*void v_W1302(uchar ucAddr, uchar ucDa)T_RST = 0;T_CLK = 0;T_RST = 1; v_RTInputByte(ucAddr); / 写地址_nop_();_nop_(); v_RTInputByte(ucDa); / 写 1Byte 数据T_CLK = 1;T_RST = 0; /* 名称: uc_R1302(uch
21、ar ucAddr)* 功能: 读取 DS1302 某地址的数据* 输入 : ucAddr: DS1302 地址* 返回值 : ucDa : 读取的数据 */ uchar uc_R1302(uchar ucAddr)uchar ucDa;T_RST = 0;T_CLK = 0;T_RST = 1; v_RTInputByte(ucAddr);/ 写地址,命令_nop_();_nop_();ucDa = uc_RTOutputByte(); / 读 1Byte 数据 T_CLK = 1;T_RST = 0; return(ucDa);/* 名称 : bcdtodec(uchar bcd)为数值*
22、 功 能 : BCD 码 转 换 为 DEC 码 (DEC 码 为 十 进 制 数 据 : BCD:0x11->DEC 11(HEX:0x0b)* 输入 : bcd 码* 输出 : dec 码*/ uchar bcdtodec(uchar bcd)uchar data1; data1=(bcd&0x70)>>4)*10+(bcd&0x0f);return data1;uchar dectobcd(uchar dec)uchar dat; dat=(dec/10)<<4|(dec%10);return dat;/* 名称 : Write_DS1302
23、Init()* 功能 : 往 DS1302 中写入数据。最开场显示的数据就是在这里设置的。* 输入 : 无* 输出 : 无*/void Write_DS1302Init(void)v_W1302(0x8e,0);v_W1302(0x80,0x00); /写入秒 v_W1302(0x8e,0);v_W1302(0x82,0x00); /写入分 v_W1302(0x8e,0);v_W1302(0x84,0x00); /写入小时 v_W1302(0x8e,0);v_W1302(0x86,0x00); /写入日 v_W1302(0x8e,0);v_W1302(0x88,0x00); /写入月 v_W1
24、302(0x8e,0);v_W1302(0x8a,0x00); /写入星期 v_W1302(0x8e,0);v_W1302(0x8c,0x00); /写入年 v_W1302(0x90,0xa6);/ 单二极管, 2K 电阻充电/* 名称 : Run_DS1302(void)* 功能 : 读出 DS1302 中的数据,并在液晶 1602 上进展显示* 输入 : 无* 输出 : 无*/void Run_DS1302(void)uchar sec, min, hour, day, month, year; v_W1302(0x8f, 0);sec = bcdtodec(uc_R1302(0x81);
25、/读出 DS1302 中的秒 v_W1302(0x8f, 0);min = bcdtodec(uc_R1302(0x83);/读出 DS1302 中的分v_W1302(0x8f, 0);hour = bcdtodec(uc_R1302(0x85); / 读出 DS1302 中的小时 v_W1302(0x8f, 0);day = bcdtodec(uc_R1302(0x87);/读出 DS1302 中的日v_W1302(0x8f, 0);month = bcdtodec(uc_R1302(0x89); /读出 DS1302 中的月 v_W1302(0x8f, 0);year = bcdtodec(uc_R1302(0x8d);/读出 DS1302 中的年L1602_char(2, 6, hour / 10 % 10 + 48); / 字符 ASIIC 码显示, 0 的 ASIIC=48 L1602_char(2, 7
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五版股份质押回购交易合同3篇
- 二零二四二手钢铁材料购买与运输合同3篇
- 二零二五版打印机销售渠道资源整合与共享合同3篇
- 年度聚碳酸酯(PC)及合金市场分析及竞争策略分析报告
- 二零二四年工业自动化设备安装与生产流程优化合同3篇
- 2024-2025学年新教材高中数学第十章复数10.2.2第1课时复数的乘法教师用书教案新人教B版必修第四册
- 二零二五年文秘与档案管理劳动合同2篇
- 二零二五年度网络安全风险评估与防护合同3篇
- 2025年星酒店投资技术服务与酒店客房智能化改造合同3篇
- 二零二五年度特色餐饮店承包经营权转让合同3篇
- 2025-2030年中国MPV汽车市场全景调研及投资策略分析报告
- 二零二五年度数据存储与备份外包服务协议2篇
- 家政服务与社区合作方案
- 2024年深圳市龙岗区城市建设投资集团有限公司招聘笔试真题
- 2024-2025学年北京市朝阳区高三上学期期末考试数学试卷(含答案)
- 第五单元《习作例文:风向袋的制作》说课稿-2024-2025学年五年级上册语文统编版
- 四年级数学(除数是两位数)计算题专项练习及答案
- 四川省绵阳市涪城区2024-2025学年九年级上学期1月期末历史试卷(含答案)
- 2025年山东水发集团限公司社会招聘高频重点提升(共500题)附带答案详解
- JJG 1204-2025电子计价秤检定规程(试行)
- 2024年计算机二级WPS考试题库(共380题含答案)
评论
0/150
提交评论