📄 03.c
字号:
// 工程名称: DS12CR887实时时钟
// 2008/12/10
// 功能描述: 万年历,农历和电子钟,具备拨报日期、时间、正点报时、秒表、闹钟等功能。
// 更多功拨报日期、时间、正点报时、秒表、闹钟等功能。进一步添加中...
//======================================================================
//对主函数调用的函数声明
//======================================================================
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
char temp03,aa,bb,cc,dd,ee,ff,gg,hh;
char ge,shi,bai,qian,w2,shiwan,xin;
sbit dula=P2^0;
sbit wela=P2^1;
sbit wela02=P2^2;
sbit dian=P2^3;
sbit dscs=P1^0;
sbit dsas=P1^1;
sbit dsrw=P1^2;
sbit dsds=P1^3;
//======================================================================
//0-f字库
//======================================================================
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
void displayxq(uchar xin);
void display12(uchar aa,uchar bb);
void display34(uchar cc,uchar dd);
void display56(uchar ee,uchar ff);
void display78(uchar gg,uchar hh);
void display(uchar shi,uchar ge);
void display01(uchar qian,uchar bai);
void display02(uchar shiwan,uchar w2);
void delay(uint z);
/*void write_ds(uchar add,uchar date)
{
dscs=0;
dsas=1;
dsds=1;
dsrw=1;
P0=add;
dsas=0;
dsrw=0;
P0=date;
dsrw=1;
dsas=1;
dscs=1;
} */ //写芯片的时候才用write_ds
uchar read_ds(uchar add)
{
uchar ds_date;
dscs=0;
dsas=1;
dsds=1;
dsrw=1;
P0=add;
dsas=0;
dsds=0;
ds_date=P0;
dsds=1;
dscs=1;
dsas=1;
return ds_date;
}
//======================================================================
//显示初始化2008 年12 月10日 星期2 23:11:20//
//======================================================================
/*void init()
{
//write_ds(10,160);这几行为初始化芯片时钟
//write_ds(11,06);
//write_ds(0,00);//秒
//write_ds(2,28);//分
//write_ds(4,18);//时
//write_ds(6,03);//星期
//write_ds(7,10);//日
//write_ds(8,12);//月
//write_ds(9,0x08);//年后
//temp03=20;//2008的前两位100年+1不用,固定为20
}*/
//======================================================================
//主函数//
//======================================================================
void main()
{
//init();
temp03=20;
dian=0;
while(1)
{
display(shi,ge);
display01(qian,bai);
display02(shiwan,w2);
display78(gg,hh);
display56(ee,ff);
display34(cc,dd);
display12(aa,bb);
displayxq(xin);
}
}
//======================================================================
//延时子程序//
//======================================================================
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//======================================================================
//星期显示子程序//
//======================================================================
void displayxq(uchar xin)
{
xin=read_ds(6)%10;
wela02=1;
P0=0x00;
wela02=0;
dula=1;
P0=table[xin];
dula=0;
wela=1;
P0=0x40;
delay(1);
wela=0;
}
//======================================================================
//秒显示子程序//
//======================================================================
void display(uchar shi,uchar ge)
{
ge=read_ds(0)%10;
shi=read_ds(0)/10;
wela02=1;
P0=0x00;
wela02=0;
dula=1;
P0=table[shi];
dula=0;
wela=1;
P0=0x10;
delay(1);
wela=0;
dula=1;
P0=table[ge];
dula=0;
wela=1;
P0=0x20;
delay(1);
wela=0;
}
//======================================================================
//分显示子程序//
//======================================================================
void display01(uchar qian,uchar bai)
{
qian=read_ds(2)/10;
bai=read_ds(2)%10;
wela02=1;
P0=0x00;
wela02=0;
dula=1;
P0=table[qian];
dula=0;
wela=1;
P0=0x04;
delay(1);
wela=0;
dula=1;
P0=table[bai];
dula=0;
wela=1;
P0=0x08;
delay(1);
wela=0;
}
//======================================================================
//时显示子程序//
//======================================================================
void display02(uchar shiwan,uchar w2)
{
shiwan=read_ds(4)/10;
w2=read_ds(4)%10;
wela02=1;
P0=0x00;
wela02=0;
dula=1;
P0=table[shiwan];
dula=0;
wela=1;
P0=0x01;
delay(1);
wela=0;
dula=1;
P0=table[w2];
dula=0;
wela=1;
P0=0x02;
delay(1);
wela=0;
}
//======================================================================
//日期显示子程序//
//======================================================================
void display78(uchar gg,uchar hh)
{
gg=read_ds(7)/10;
hh=read_ds(7)%10;
wela=1;
P0=0x00;
wela=0;
dula=1;
P0=table[gg];
dula=0;
wela02=1;
P0=0x40;
delay(1);
wela02=0;
dula=1;
P0=table[hh];
dula=0;
wela02=1;
P0=0x80;
delay(1);
wela02=0;
}
//======================================================================
//月份显示子程序//
//======================================================================
void display56(uchar ee,uchar ff)
{
ee=read_ds(8)/10;
ff=read_ds(8)%10;
wela=1;
P0=0x00;
wela=0;
dula=1;
P0=table[ee];
dula=0;
wela02=1;
P0=0x10;
delay(1);
wela02=0;
dula=1;
P0=table[ff];
dula=0;
wela02=1;
P0=0x20;
delay(1);
wela02=0;
}
//======================================================================
//年后两位显示子程序//
//======================================================================
void display34(uchar cc,uchar dd)
{
cc=read_ds(9)/10;
dd=read_ds(9)%10;
wela=1;
P0=0x00;
wela=0;
dula=1;
P0=table[cc];
dula=0;
wela02=1;
P0=0x04;
delay(1);
wela02=0;
dula=1;
P0=table[dd];
dula=0;
wela02=1;
P0=0x08;
delay(1);
wela02=0;
}
//======================================================================
//年前两位显示子程序//
//======================================================================
void display12(uchar aa,uchar bb)
{
aa=temp03/10;
bb=temp03%10;
wela=1;
P0=0x00;
wela=0;
dula=1;
P0=table[aa];
dula=0;
wela02=1;
P0=0x01;
delay(1);
wela02=0;
dula=1;
P0=table[bb];
dula=0;
wela02=1;
P0=0x02;
delay(1);
wela02=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -