版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、/*电信(1)班 吴锦生 日期:2012.5.11/#include#include#include #define uint unsigned int#define uchar unsigned char#define lcd_date P0#define data 1000#define N 8#define second timebuf0#define minute timebuf1#define hour timebuf2#define day timebuf3#define yue timebuf4#define week timebuf5#define year timebuf6s
2、bit LEDCLK=P34;sbit LEDDIN=P23;sbit Key_Input=P10;sbit lcd_en=P22;sbit lcd_rs=P24;sbit lcd_rw=P23;sbit ACC0=ACC0;sbit ACC7=ACC7;sbit DQ=P32;sbit SDA=P37;/串行数据/地址控制端sbit SCL=P36;/串行时钟sbit sound=P12;uchar idata dispN;uchar keytemp=0;uchar keyval=0;uchar keyback;uint keynum;bit add_dec_flag;uchar mod;u
3、char t_open;bit time_mod;uchar temper_mod;uchar set_mod;uchar yue_set,day_set,hour_set,minute_set;int time1_hour,time1_minute,time2_hour,time2_minute,time3_yue,time3_day;bit keyup;bit flag_num;uchar flag_control;uchar controlbuf;uchar time_rst;uchar timebuf8=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00;u
4、char chun8;/*uchar chu8=0x00,0x00,0x07,0x16,0x04,0x01,0x13,0x00; */#define NOP3() _nop_();_nop_();_nop_()/*DS1302与MCU连接的各端口定义*/sbit DS_IO=P20;/DS1302数据口sbit DS_SCLK=P27;/DS1302串行时钟sbit DS_RST=P24;/*DS1302内部各个寄存器地址定义*/#define DS1302_SECOND 0X80 /秒#define DS1302_MINUTE 0X82 / 分#define DS1302_HOUR 0X84
5、 /时#define DS1302_DAY 0X86 /日#define DS1302_MONTH 0X88 /月#define DS1302_WEEK0X8A /星期#define DS1302_YEAR0X8C /年#define DS1302_CONTROL0X8E /写保护控制位#define DS1302_RAM(X)(0XC0+(X)*2)/用于计算DS1302静态RAM地址void delayms(uint z)uint x;uchar y;for(x=z;x0;x-) for(y=123;y0;y-);/*写入单个字节*/void DS1302WriteByte(uchar W
6、date)uchar i;for(i=0;i=1;/*读取一个字节*/uchar DS1302ReadByte(void)uchar i,temp;temp=0;for(i=0;i=1;if(DS_IO=1)temp=temp|0x80;DS_SCLK=1;NOP3();DS_SCLK=0;return(temp);/*对单个地址写相应的数据*/void Write1302(uchar addr,uchar DSdate)DS_RST=0;DS_SCLK=0;DS_RST=1;EA=0;DS1302WriteByte(addr); /地址DS1302WriteByte(DSdate); /数据
7、DS_SCLK=1;DS_RST=0;EA=1;/*读相应地址的数据*/uchar Read1302(uchar addr)uchar Rdate;DS_RST=0;DS_SCLK=0;DS_RST=1;EA=0;DS1302WriteByte(addr|0x01);Rdate=DS1302ReadByte();DS_SCLK=1;DS_RST=0;EA=1;return(Rdate);void bell() 闹钟设置 uchar j; for(j=0;j8;j+) sound=sound; delayms(1); void close_led()uchar i;for(i=0;i8;i+)L
8、EDCLK=0;LEDDIN=1;_nop_();LEDCLK=1;void Read_Key() /*键值读取函数*/keytemp=1;if(Key_Input=1)keytemp+;void keyscan() /键值确认函数 if(keytemp=0xff) keyup=1; /按键已经放开keyback=0; /清除按键备份值keyval=0; /清除按键存放单元 else if(keytemp=keyback&keyup=1) /两次的检测的值一样且按键已经放开keyval=keytemp; /存放按键值keyup=0; /按下按键keyback=0; /清除按键备份值else k
9、eyback=keytemp; void Key_job() /*键值工作程序*/switch(keyval)case 0x7f: time_mod= time_mod; flag_num=0; keynum=1; keyval=0; break; case 0xbf: set_mod +; if(set_mod=4) set_mod=0; flag_num=0; keynum=2; keyval=0; break; case 0xdf: if(add_dec_flag=0) if(set_mod=1) time1_hour+; if(time1_hour=24) time1_hour=0;
10、if(set_mod=2) time2_hour+; if(time2_hour=24) time2_hour=0; if(set_mod=3) time3_yue+; if(time3_yue=13) time3_yue=1; elseif(set_mod=1) time1_hour-; if(time1_hour0) time1_hour=23; if(set_mod=2) time2_hour-; if(time2_hour0) time2_hour=23; if(set_mod=3) time3_yue-; if(time3_yue1) time3_yue=12; flag_num=0
11、; keynum=3; keyval=0; break; case 0xef: if(add_dec_flag=0) if(set_mod=1) time1_minute+; if(time1_minute=60) time1_minute=0; if(set_mod=2) time2_minute+; if(time2_minute=60) time2_minute=0; if(set_mod=3) time3_day+; if(time3_day=32) time3_day=1; else if(set_mod=1) time1_minute-; if(time1_minute0) tim
12、e1_minute=59; if(set_mod=2) time2_minute-; if(time2_minute0) time2_minute=59; if(set_mod=3) time3_day-; if(time3_day1) time3_day=31; flag_num=0; keynum=4; keyval=0; break; case 0xf7: t_open+; if(t_open=5) t_open=0; flag_num=0; keynum=5; keyval=0; break; case 0xfb: add_dec_flag=add_dec_flag; flag_num
13、=0; keynum=6; keyval=0; break; case 0xfd: time_rst+; if(time_rst=3) time_rst=0; flag_num=0; keynum=7; keyval=0; break; case 0xfe: flag_control+; if(flag_control=1) controlbuf=t_open; t_open=0; if(flag_control=2) t_open=controlbuf; if(flag_control=3) flag_control=0; flag_num=0; keynum=8; keyval=0; br
14、eak; default: if(keyup=1)keynum=0;keyval=0;break;void Write_com(uchar com)lcd_rs=0;lcd_date=com;delayms(2);lcd_en=1;delayms(2);lcd_en=0;void Write_dat(uchar dat)lcd_rs=1;lcd_date=dat;delayms(2);lcd_en=1;delayms(2);lcd_en=0;void lcd_init()lcd_rw=0;lcd_en=0;delayms(15);Write_com(0x38);delayms(5);Write
15、_com(0x38);delayms(5);Write_com(0x38);/显示模式设置Write_com(0x08);/显示关闭Write_com(0X01);/清屏Write_com(0x06);/显示光标移动设置Write_com(0X0c);/显示开及光标设置void display_key() Write_com(0x4b+0x80); Write_dat(K); Write_com(0x4c+0x80); Write_dat(E); Write_com(0x4d+0x80); Write_dat(Y); Write_com(0x4e+0x80); Write_dat(:); Wr
16、ite_com(0x4f+0x80); Write_dat(0+keynum);init_mcu()TMOD=0x01; TH1=(65536-data)/256; TL1=(65536-data)%256; ET1=1;TR1=1; EA=1;/*DS1302初始化*/void Init_DS1302()DS_RST=0;DS_SCLK=0;DS_IO=0;/* 设置时钟芯片时间*/void SET_DS1302()Write1302(DS1302_CONTROL,0X00);/*Write1302_All(timebuf);*/Write1302(DS1302_SECOND,0X00);/
17、Write1302(DS1302_MINUTE,0X0);/Write1302(DS1302_HOUR,0X07);/Write1302(DS1302_DAY,0X16);/Write1302(DS1302_MONTH,0X4);/Write1302(DS1302_YEAR,0X13);/Write1302(DS1302_WEEK,0x01);Write1302(DS1302_CONTROL,0X80);/void display1_date() /uchar k; Write_com(0x00+0x80); Write_dat(2);Write_com(0x01+0x80); Write_d
18、at(0); Write_com(0x02+0x80); Write_dat(timebuf6/16)+0x30);Write_com(0x03+0x80); Write_dat(timebuf6%16)+0x30);Write_com(0x04+0x80); Write_dat(-);Write_com(0x05+0x80);Write_dat(timebuf4/16)+0x30);Write_com(0x06+0x80); Write_dat(timebuf4%16)+0x30);Write_com(0x07+0x80);Write_dat(-);Write_com(0x08+0x80);
19、Write_dat(timebuf3/16)+0x30);Write_com(0x09+0x80); Write_dat(timebuf3%16)+0x30);Write_com(0x0b+0x80);Write_dat(timebuf5%16)+0x30);Write_com(0x0c+0x80);Write_dat(t);Write_com(0x0d+0x80);Write_dat(h);Write_com(0x40+0x80);Write_dat(timebuf2/16)+0x30);Write_com(0x41+0x80); Write_dat(timebuf2%16)+0x30);W
20、rite_com(0x42+0x80);Write_dat(:);Write_com(0x43+0x80);Write_dat(timebuf1/16)+0x30);Write_com(0x44+0x80); Write_dat(timebuf1%16)+0x30);Write_com(0x45+0x80);Write_dat(:);Write_com(0x46+0x80);Write_dat(timebuf0/16)+0x30);Write_com(0x47+0x80); Write_dat(timebuf0%16)+0x30);void read1302_all(uchar addr,uc
21、har *shu) uchar i;DS_RST=0;DS_SCLK=0;DS_RST=1;EA=0;DS1302WriteByte(addr);for(i=0;iN;i+)shui=DS1302ReadByte();DS_SCLK=1;DS_RST=0;EA=1;void Write1302_All(uchar *p,uchar addr)uchar i;Write1302(DS1302_CONTROL,0X00);DS_RST=0;DS_SCLK=0;DS_RST=1;EA=0;DS1302WriteByte(addr); /地址for(i=0;i0;i-);/*读相应地址的数据*/voi
22、d display_set_time() Write_com(0x00+0x80); Write_dat(T); Write_com(0x01+0x80); Write_dat(1); Write_com(0x02+0x80); Write_dat(:); Write_com(0x03+0x80); Write_dat(time1_hour/10)+0x30); Write_com(0x04+0x80); Write_dat(time1_hour%10)+0x30); Write_com(0x05+0x80); Write_dat(:); Write_com(0x06+0x80); Write
23、_dat(time1_minute/10)+0x30); Write_com(0x07+0x80); Write_dat(time1_minute%10)+0x30); Write_com(0x09+0x80); Write_dat(D); Write_com(0x08+0x80); Write_dat( ); Write_com(0x0a+0x80); Write_dat(:); Write_com(0x0b+0x80); Write_dat(time3_yue/10)+0x30); Write_com(0x0c+0x80); Write_dat(time3_yue%10)+0x30); W
24、rite_com(0x0d+0x80); Write_dat(-); Write_com(0x0e+0x80); Write_dat(time3_day/10)+0x30); Write_com(0x0f+0x80); Write_dat(time3_day%10)+0x30); Write_com(0x40+0x80); Write_dat(T); Write_com(0x41+0x80); Write_dat(2); Write_com(0x42+0x80); Write_dat(:); Write_com(0x43+0x80); Write_dat(time2_hour/10)+0x30
25、); Write_com(0x44+0x80); Write_dat(time2_hour%10)+0x30); Write_com(0x45+0x80); Write_dat(:); Write_com(0x46+0x80); Write_dat(time2_minute/10)+0x30); Write_com(0x47+0x80); Write_dat(time2_minute%10)+0x30);void time_compare() uchar k; yue_set=yue/16*10+yue%16; day_set=day/16*10+day%16; hour_set=hour/1
26、6*10+hour%16; minute_set=minute/16*10+minute%16; if(t_open=1) if(hour_settime1_hour) for(k=0;k=time1_minute) for(k=0;ktime2_hour) for(k=0;k=time2_minute) for(k=0;k3;k+) Write_com(0x40+0x80+k); Write_dat(0xff); bell(); if(t_open=3) if(yue_settime3_yue) for(k=0;k2;k+) Write_com(0x09+0x80+k); Write_dat
27、(0xff); bell(); if(yue_set=time3_yue) if(day_set=time3_day) for(k=0;ktime3_yue) sound=1; if(t_open=4) if(yue_settime3_yue) for(k=0;k2;k+) Write_com(0x09+0x80+k); Write_dat(0xff); bell(); if(yue_set=time3_yue) if(day_set=time3_day) for(k=0;ktime3_yue) sound=1; if(hour_settime2_hour) for(k=0;k=time2_m
28、inute) for(k=0;ktime1_hour) for(k=0;k=time1_minute) for(k=0;k3;k+) Write_com(0x00+0x80+k); Write_dat(0xff); bell(); main()lcd_init();close_led();init_mcu();Init_DS1302();SET_DS1302();time_mod=0;set_mod=0;time1_hour=7;time1_minute=30;time2_hour=23;time2_minute=30;time3_yue=4;time3_day=16;t_open=0;add_dec_flag=0;sound=1;fl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 远程医疗诊断系统-洞察与解读
- 迟发性运动障碍评估法-洞察与解读
- 电影运营实施方案范文
- 平房封顶建设方案怎么写
- 信息管理班级建设方案
- 围绕2026年智慧城市建设的交通管理系统优化方案
- 双建先锋行动实施方案
- 学生教培基地建设方案
- 有具体工作方案
- 木栈道防腐木施工方案范本参考
- 776-2015托幼机构消毒卫生规范
- 电离辐射危害及预防方法
- 系统解剖学课件:内脏神经
- GB/T 19515-2023道路车辆可再利用率和可回收利用率要求及计算方法
- GB/T 15587-2023能源管理体系分阶段实施指南
- ICD-9-CM3编码与手术分级目录
- 数据库原理及应用-课件
- 探究物联网的技术特征-说课
- GB/T 18804-2022运输工具类型代码
- LY/T 1726-2008自然保护区有效管理评价技术规范
- GA/T 951-2011紫外观察照相系统数码拍照规则
评论
0/150
提交评论