|
直接上代码:
main.c代码:
#include "sys.h"
#include "ds1302.h"
#include <stdio.h>
#define START_WIN_NUM_VP 0x2000 //这个地址是一个文本显示控件
#define DATE_WIN_YEAR_VP 0x3000 // 年
#define DATE_WIN_MONTH_VP 0x3010 //
#define DATE_WIN_DAY_VP 0x3020 //
#define DATE_WIN_HOUR_VP 0x3030 //
#define DATE_WIN_MIN_VP 0x3040 //
#define DATE_WIN_SEC_VP 0x3050//
#define DATE_WIN_WEEK_VP 0x3060 //
u8 date_buff[40];
u8 lenrq;
u16 btn_val;
u16 valrq;
u8 int_to_bcd(u8 val)
{
return (((val/10)<<4)+(val%10));
}
void main(void)
{
sys_init();
ds1302_init();
while(1)
{
ds1302_read_date();
lenrq = sprintf(date_buff,"20%02x/%02x/%02x %02x:%02x:%02x week:%x",
(u16)cur_date.year,(u16)cur_date.month,(u16)cur_date.day,
(u16)cur_date.hour,(u16)cur_date.min,(u16)cur_date.sec,
(u16)cur_date.week
);
date_buff[lenrq+1] = 0;
sys_write_vp(START_WIN_NUM_VP,date_buff,lenrq/2+2);
sys_read_vp(0x1000,(u8*)&btn_val,1);
if(btn_val==1)
{
sys_read_vp(DATE_WIN_YEAR_VP,(u8*)&valrq,1);
cur_date.year = int_to_bcd(valrq);
sys_read_vp(DATE_WIN_MONTH_VP,(u8*)&valrq,1);
cur_date.month = int_to_bcd(valrq);
sys_read_vp(DATE_WIN_DAY_VP,(u8*)&valrq,1);
cur_date.day = int_to_bcd(valrq);
sys_read_vp(DATE_WIN_HOUR_VP,(u8*)&valrq,1);
cur_date.hour = int_to_bcd(valrq);
sys_read_vp(DATE_WIN_MIN_VP,(u8*)&valrq,1);
cur_date.min = int_to_bcd(valrq);
sys_read_vp(DATE_WIN_SEC_VP,(u8*)&valrq,1);
cur_date.sec = int_to_bcd(valrq);
sys_read_vp(DATE_WIN_WEEK_VP,(u8*)&valrq,1);
cur_date.week = int_to_bcd(valrq);
ds1302_init_date();
btn_val = 0;
sys_write_vp(0x1000,(u8*)&btn_val,1);
}
}
}
main------------------------------------------------------------------------------------------------
头文件(ds1302.h):
----------------------------------------------------------------------------------------------------
#ifndef __DS1302_H__
#define __DS1302_H__
#include "sys.h"
sbit DS1302_CLK = P3^1;
sbit DS1302_DAT = P3^2;
sbit DS1302_RST = P3^3;
#define DS1302_DAT_IN() P3MDOUT&=0xFB
#define DS1302_DAT_OUT() P3MDOUT|=0x04
#define DS1302_SEC_ADDR 0x80
#define DS1302_MIN_ADDR 0x82
#define DS1302_HOUR_ADDR 0x84
#define DS1302_DAY_ADDR 0x86
#define DS1302_MONTH_ADDR 0x88
#define DS1302_WEEK_ADDR 0x8a
#define DS1302_YEAR_ADDR 0x8c
#define DS1302_CTRL_ADDR 0x8e
typedef struct{
u8 sec;
u8 min;
u8 hour;
u8 day;
u8 month;
u8 week;
u8 year;
}DATE;
extern DATE cur_date;
void ds1302_init(void);
void ds1302_write_reg(u8 addr,u8 dat);
u8 ds1302_read_reg(u8 addr);
void ds1302_init_date(void);
void ds1302_read_date(void);
#endif
---------------------------------------------------------------------------------------------------------------------------
UI设计:
我这使用两个滑动手势调节:
还有两个数据窗口指示:
一个按键返回:
一个取消按键使用基础按键:
|
|