📄 1_2.c
字号:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
#define LEDPORT P0
uchar numdu,tt,temp,temp01,temp02,shiwan,wan,qian,bai,shi,ge;
sbit dula=P2^7;
sbit wela=P2^6;
sbit keyfen=P2^3;
sbit keyshi=P2^1;
sbit dian=P2^4;
sbit SCLK=P3^2;
sbit IO=P3^3;
sbit RST=P3^4;
sbit ACC7=ACC^7;
sbit ACC0=ACC^0;
uchar times[7]={25,33,23,6,11,2,0x07};//用来存放时间???
uchar KEY=0;
void write_1302_byte(uchar d);//向1302定入一字节数据D
uchar read_1302_byte(void);//从1302读出一字节数据并返回
void write_1302_reg(uchar add,uchar d);//向1302地址ADD处写入数据D
uchar read_1302_reg(uchar add);//向1302地址ADD处读出数据并返回
void write_1302_time(uchar*time);//设置时间
void read_1302_time(uchar time[]);//读出时间
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
//uchar code tablewe[]={
//0x01,0x02,0x04,0x08,0x10,0x20};
//00000001,00000010,00000100
//00001000,00010000,00100000
void display(uchar shi,uchar ge);
void display01(uchar qian,uchar bai);
void display02(uchar shiwan,uchar wan);
void delay(uint z);
void main()
{
read_1302_time()
temp=55;//《256
temp01=59;
temp02=19;
numdu=0;
while(1)
{
display02(shiwan,wan);
display01(qian,bai);
display(shi,ge);
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display(uchar shi,uchar ge)
{
shi=temp/10;
ge=temp%10;
dula=1;
P0=table[shi];
dula=0;
wela=1;
P0=0x10;
delay(1);
dula=1;
P0=table[ge];
dula=0;
wela=1;
P0=0x20;
delay(1);
}
void display01(uchar qian,uchar bai)
{
qian=temp01/10;
bai=temp01%10;
dula=1;
P0=table[qian];
dula=0;
wela=1;
P0=0x04;
delay(1);
dula=1;
P0=table[bai];
dula=0;
wela=1;
P0=0x08;
delay(1);
}
void display02(uchar shiwan,uchar wan)
{
shiwan=temp02/10;
wan=temp02%10;
dula=1;
P0=table[shiwan];
dula=0;
wela=1;
P0=0x01;
delay(1);
dula=1;
P0=table[wan];
dula=0;
wela=1;
P0=0x02;
delay(1);
}
/*===================================*/
/* 向1302当前地址处写入1字节数据 */
/*===================================*/
void write_1302_byte(uchar d)
{
uchar i;
ACC=d;
for(i=8;i>0;i--)
{
IO=ACC0;
SCLK=1;
SCLK=0;
ACC=ACC>>1;
}
}
/*===================================*/
/* 向1302当前地址处读出1字节数据 */
/*===================================*/
uchar read_1302_byte(void)
{
uchar i;
for(i=8;i>0;i--)
{
ACC=ACC>>1;
ACC7=IO;
SCLK=1;
SCLK=0;
}
return (ACC);
}
/*===================================*/
/* 把数据DATA写入1302寄存器ADD处 */
/*===================================*/
void write_1302_reg(uchar add,uchar d)
{
RST=0;
SCLK=0;
RST=1;
write_1302_byte(add);
write_1302_byte(d);
SCLK=1;
RST=0;
}
/*===================================*/
/* 读取寄存器ADD处的值 */
/*===================================*/
uchar read_1302_reg(uchar add)
{
uchar d;
RST=0;
SCLK=0;
RST=1;
write_1302_byte(add);
d=read_1302_byte();
SCLK=1;
RST=0;
return (d);
}
/*===================================*/
/* 设置时间,TIME[0]-time[6]数据存放为:秒,分,时,日,月,星期,年 */
/*===================================*/
void write_1302_time(uchar *time)
{
uchar add=0x80;
uchar i;
uchar timeBCD[7];
bdata uchar l,h;
for(i=0;i<7;i++)
{
l=time[i]%10;
h=time[i]/10;
timeBCD[i]=h*16+l;
}
write_1302_reg(0x8e,0x00);
for(i=0;i<7;i++)
{
write_1302_reg(add,timeBCD[i]);
add+=2;
}
write_1302_reg(0x8e,0x80);
}
/*===================================*/
/* 读取当前时间 */
/*===================================*/
void read_1302_time(uchar time[])
{
uchar i;
uchar add=0x81;
bdata uchar l,h;
write_1302_reg(0x8e,0x00);
for(i=0;i<7;i++)
{
time[i]=read_1302_reg(add);
l=time[i]&0x0f;
h=(time[i]>>4)&0x0f;
time[i]=h*10+l;
add+=2;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -