📄 ds1302.c
字号:
//ICC-AVR 修改日期: 2007-05-01 15:38:44
//PC3:功能按键
//PC4:移位按键
//PC5:加一按键
//PB0:减一按键
// CenWenJiao
// Target : M8
// Crystal: 1.0000Mhz
//2007.05.01 21:08:CC 完成时间调整程序
#include <iom8v.h>
#include <macros.h>
#include "ds1302.h"
#include "DELAY.C"
#include "LCD.h" //eureka
/*cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
单片机初始化程序
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc*/
void port_init(void) //设置portb和portc端口
{
PORTB = 0x01;//PB0 作为减一按键
DDRB = 0x00;
PORTC = 0x38; //m103 output only//PC3; PC4; PC5; 功能,移位,加一
DDRC = 0xC7;
PORTD = 0x00;
DDRD = 0xFF;
}
/*ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
1302初始化驱动
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc*/
void init_devices(void)
{
//CLI(); //disable all interrupts
port_init();
DS1302_set();
//timer1_init();
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x04;
//SEI(); //re-enable interrupts
}
/*ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
LCD1602初始化驱动
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc*/
void init_devicesl(void)
{
//CLI(); //disable all interrupts
LCD_init();
// DS1302_set();
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x00; //timer interrupt sources
// SEI(); //re-enable interrupts
}
/*ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
基本的显示程序
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc*/
void SendDataForDisplay(void)
{
//DS1302_ReadTime();
//DataFenli();
LCD_write_string(0,0,"time:");
LCD_write_char(6,0,hourth+48); //时
LCD_write_char(7,0,hourtl+48);
LCD_write_char(8,0,45);
LCD_write_char(9,0,minuteth+48); //分
LCD_write_char(10,0,minutetl+48);
LCD_write_char(11,0,45);
LCD_write_char(12,0,secondth+48);
LCD_write_char(13,0,secondtl+48); //秒
LCD_write_string(0,1,"data:");
LCD_write_char(6,1,yearth+48);
LCD_write_char(7,1,yeartl+48); //年
LCD_write_char(8,1,45);
LCD_write_char(9,1,monthth+48); //月
LCD_write_char(10,1,monthtl+48);
LCD_write_char(11,1,45);
LCD_write_char(12,1,dateth+48); //日
LCD_write_char(13,1,datetl+48);
delay_nus(200);
}
/*ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
显示中调用的闪烁调用程序
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc*/
void black(int m,int n)//闪烁
{
LCD_write_char(m,n,95);//95为闪烁时"下滑线"的代码
delay_nus(1000);
}
/*cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc*/
/*设置分钟,秒,加法子程序*/
/*cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc*/
void PlusForSET(int i)
{
if(WriteTime[i]==0x09) //writetime[i] 是定义存储写地址的数组
{ WriteTime[i]=0x0f;
}
if(WriteTime[i]==0x19)
{WriteTime[i]=0x1f;
}
if(WriteTime[i]==0x29)
{WriteTime[i]=0x2f;
}
if(WriteTime[i]==0x39)
{WriteTime[i]=0x3f;
}
if(WriteTime[i]==0x49)
{WriteTime[i]=0x4f;
}
if(WriteTime[i]==0x59)
{WriteTime[i]=0x00;
}
else
WriteTime[i]=WriteTime[i]+1;
}
//ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
// 设置分钟,秒 减法程序
//ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
void SubForSET(int i)
{
if(WriteTime[i]==0x00)
{ WriteTime[i]=0x5a;
}
if(WriteTime[i]==0x10)
{WriteTime[i]=0x0a;
}
if(WriteTime[i]==0x20)
{WriteTime[i]=0x1a;
}
if(WriteTime[i]==0x30)
{WriteTime[i]=0x2a;
}
if(WriteTime[i]==0x40)
{WriteTime[i]=0x3a;
}
if(WriteTime[i]==0x50)
{WriteTime[i]=0x49;
}
else
WriteTime[i]=WriteTime[i]-1;
}
/*cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc*/
//设置小时加减法子程序
//ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
//加法
void PlusHour(int i)
{
if(WriteTime[i]==0x09)
{ WriteTime[i]=0x0f;
}
if(WriteTime[i]==0x19)
{WriteTime[i]=0x1f;
}
if(WriteTime[i]==0x23)
{WriteTime[i]=0x00;
}
else
WriteTime[i]=WriteTime[i]+1;
}
//减法
void SubHour(int i)
{
if(WriteTime[i]==0x00)
{ WriteTime[i]=0x24;
}
if(WriteTime[i]==0x10)
{WriteTime[i]=0x0a;
}
if(WriteTime[i]==0x20)
{WriteTime[i]=0x19;
}
else
WriteTime[i]=WriteTime[i]-1;
}
//cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
//设置日期,子程序
//cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
//日期加法
void PlusDay(int i)
{ if(WriteTime[i]==0x09)
{ WriteTime[i]=0x0f;
}
if(WriteTime[i]==0x19)
{WriteTime[i]=0x1f;
}
if(WriteTime[i]==0x29)
{WriteTime[i]=0x2f;
}
if(WriteTime[i]==0x31)
{WriteTime[i]=0x00;
}
else
WriteTime[i]=WriteTime[i]+1;
}
//日期 减法
void SubDay(int i)
{
if(WriteTime[i]==0x00)
{ WriteTime[i]=0x32;
}
if(WriteTime[i]==0x10)
{WriteTime[i]=0x0a;
}
if(WriteTime[i]==0x20)
{WriteTime[i]=0x1a;
}
if(WriteTime[i]==0x30)
{WriteTime[i]=0x29;
}
else
WriteTime[i]=WriteTime[i]-1;
}
//cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
//设置月份子程序
//cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
//月份 加法
void PlusMonth(int i)
{
if(WriteTime[i]==0x09)
{ WriteTime[i]=0x0f;
}
if(WriteTime[i]==0x12)
{WriteTime[i]=0x00;
}
else
WriteTime[i]=WriteTime[i]+1;
}
//月份减法
void SubMonth(int i)
{
if(WriteTime[i]==0x00)
{ WriteTime[i]=0x13;
}
if(WriteTime[i]==0x11)
{WriteTime[i]=0x09;
}
else
WriteTime[i]=WriteTime[i]-1;
}
//cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
//设置年子程序
//cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
//加
void PlusYear(int i)
{
if(WriteTime[i]==0x09)
{ WriteTime[i]=0x0f;
}
if(WriteTime[i]==0x19)
{WriteTime[i]=0x1f;
}
if(WriteTime[i]==0x29)
{WriteTime[i]=0x2f;
}
if(WriteTime[i]==0x39)
{WriteTime[i]=0x3f;
}
if(WriteTime[i]==0x49)
{WriteTime[i]=0x4f;
}
if(WriteTime[i]==0x59)
{WriteTime[i]=0x5f;
}
if(WriteTime[i]==0x69)
{WriteTime[i]=0x6f;
}
if(WriteTime[i]==0x79)
{WriteTime[i]=0x7f;
}
if(WriteTime[i]==0x89)
{WriteTime[i]=0x8f;
}
if(WriteTime[i]==0x99)
{WriteTime[i]=0x00;
}
else
WriteTime[i]=WriteTime[i]+1;
}
//减
void SubYear(int i)
{
if(WriteTime[i]==0x00)
{ WriteTime[i]=0x5a;
}
if(WriteTime[i]==0x10)
{WriteTime[i]=0x0a;
}
if(WriteTime[i]==0x20)
{WriteTime[i]=0x1a;
}
if(WriteTime[i]==0x30)
{WriteTime[i]=0x2a;
}
if(WriteTime[i]==0x40)
{WriteTime[i]=0x3a;
}
if(WriteTime[i]==0x50)
{WriteTime[i]=0x4a;
}
if(WriteTime[i]==0x60)
{WriteTime[i]=0x5a;
}
if(WriteTime[i]==0x70)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -