版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年江苏省徐州市中考化学真题卷含答案解析
- 2025年工业机器人维护保养培训试题及答案解析
- 2025员工三级安全培训试题及答案
- 2025年矿业权评估师考试(矿业权评估地质与矿业工程专业能力)经典试题及答案
- 【民办幼儿园年检工作自查报告】民办幼儿园年检自查自评报告
- 2025年砌筑工职业技能鉴定试卷及答案
- 2025年成本年度工作总结报告
- 2025年中小学诗词大会题库附答案
- 公司污水处理工团队冲突调解配合考核试卷及答案
- (完整版)建筑工地三级安全教育试题(附答案)
- 肿瘤患者双向转诊管理职责
- 公共安全视频监控建设联网应用(雪亮工程)运维服务方案纯方案
- 福建省漳州市2024-2025学年高一上学期期末教学质量检测历史试卷(含答案)
- 定额〔2025〕2号文-关于发布2020版电网技术改造及检修工程概预算定额2024年下半年价格
- 管道穿越高速桥梁施工方案
- 2024版《中医基础理论经络》课件完整版
- 2022版义务教育(物理)课程标准(附课标解读)
- 肺结核患者合并呼吸衰竭的护理查房课件
- 井喷失控事故案例教育-井筒工程处
- 地源热泵施工方案
- GB/T 16947-2009螺旋弹簧疲劳试验规范
评论
0/150
提交评论