📄 1302.c
字号:
/******************************************************************************
该程序里面的延时采用汇编的形式,因此在换了晶振之后就必须的改变汇编中的空指令的
条数
该程序是在mega16,8M外部晶振的条件下调试的,胡绍新
******************************************************************************/
#include"mega16.h"
#include"delay.h"
#include"chuankou.c"
#include"avryejing.c"
#define sck PORTA.0
#define io PORTA.1
#define io_in PINA.1
#define io_en DDRA.1
#define rest PORTA.2
struct time
{unsigned char year; //年
unsigned char month; //月
unsigned char day; //日
unsigned char week; //周
unsigned char hour; //时
unsigned char min; //分
unsigned char sec; //秒
}shijian,shijian2;
unsigned char DAA(unsigned char w)
{unsigned char k1;
unsigned char k2;
k1=w&0x0f;
k2=w>>4;
k2=k2&0x0f;
return k2*10+k1;
}
void sendbyte(unsigned char w)
{unsigned char i=0;
rest=1; //启动数据传输,开始传输数据
for(i=0;i<8;i++)
//while(1)
{if(w&0x01)
io=1;
else
io=0;
#asm
NOP
NOP
#endasm
sck=0;
#asm
NOP
NOP
#endasm
sck=1;
w=w>>1;
}
}
unsigned char receive()
{unsigned char temp=0;
unsigned char i=0;
rest=1;//启动数据传输
io_en=0;//将数据口置位输入模式
for(i=0;i<8;i++)
{temp=temp>>1;
sck=1;
#asm
NOP
NOP
#endasm
sck=0;
#asm
NOP
NOP
#endasm
if(io_in)temp|=0x80;
else temp&=0x7f;
}
io_en=1;
return temp;
}
void wr1302(unsigned char address,unsigned char data)
{io_en=1;//将数据口置为输出状态
rest=0;
sck=0;
rest=1;
sendbyte(address);
sendbyte(data);
rest=0;
io=1;
}
unsigned char read1302(unsigned char address)
{unsigned char temp=0;
io_en=1;//将数据口置为输出状态
rest=0;
#asm
NOP
NOP
#endasm
sck=0;
rest=1;
sendbyte(address);
temp=receive();
rest=0;
io=1;
return temp;
}
main()
{unsigned char k=0;
unsigned char k2=0;
unsigned char k3=0;
unsigned char i=0;
DDRA=0x0f;
PORTA=0x0f;
delay_ms(300);
rest_lcd();
for(i=0;i<11;i++)chinese(0,4+2*i,i);
chinese(2,9,18);
chinese(2,11,19);
chinese(2,13,11);
chinese(2,15,12); //1302时钟
chinese(6,9,13);
chinese(6,13,14);
chinese(6,17,15); //年月日
word(7,5,18);
word(7,6,16);
word(7,7,16);
chinese(9,9,11);
chinese(9,13,16);
chinese(9,17,17); //时分秒
chinese(12,11,20);
chinese(12,13,21);
xianshi(12345678,0);
wr1302(0x8e,0x00);//允许写入数据
//wr1302(0xbf,0x00);
//wr1302(0x84,0x16);
//wr1302(0x82,0x56);
k=read1302(0x81);
wr1302(0x90,0xa7);
//k=DAA(k);
if(k&0x80)
{wr1302(0x80,0x00);
}
/*
//初始化程序
wr1302(0x80,0x00);//秒
wr1302(0x82,0x17);//分
wr1302(0x84,0x13);//时
wr1302(0x86,0x27);//日
wr1302(0x88,0x01);//月
wr1302(0x8a,0x06);//周
wr1302(0x8c,0x07);//年
///
*/
while(1)
{//wr1302(0xc0,0x08);
shijian.sec=DAA(read1302(0x81));
shijian.min=DAA(read1302(0x83));
shijian.hour=DAA(read1302(0x85));
shijian.day=DAA(read1302(0x87));
shijian.month=DAA(read1302(0x89));
shijian.week=DAA(read1302(0x8b));
shijian.year=DAA(read1302(0x8d));
if(shijian2.sec!=shijian.sec)shuxian(10,15,shijian.sec,2);
if(shijian2.min!=shijian.min)shuxian(10,11,shijian.min,2);
if(shijian2.hour!=shijian.hour)shuxian(10,7,shijian.hour,2);
if(shijian2.day!=shijian.day)shuxian(7,15,shijian.day,2);
if(shijian2.month!=shijian.month)shuxian(7,11,shijian.month,2);
if(shijian2.week!=shijian.week)shuxian(13,15,shijian.week,2);
if(shijian2.year!=shijian.year)shuxian(7,7,shijian.year,2);
shijian2=shijian;
xianshi((long)k3*10000+(long)k2*100+k,0);
delay_ms(1000);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -