📄 ds130218b20.c
字号:
uchar R1302(uchar address)
{
uchar da;
T_rst=0;T_clk=0;T_rst=1;
v_RTinputByte(address);
da=v_RToutputByte();
delay(4);
T_clk=1;T_rst=0;
return (da);
}
//------向1302某个地址写入某数据--------
void W1302(uchar address,uchar da)
{
T_rst=0;T_clk=0;T_rst=1;
v_RTinputByte(address);
v_RTinputByte(da);
delay(4);
T_clk=1;T_rst=0;
}
//------获取1302的年月日,时分秒,星期---
void getYMD_HMS()
{
sec_1302=R1302(0x81);delay(3);
min_1302=R1302(0x83);delay(3);
hour_1302=R1302(0x85);delay(3);
day_1302=R1302(0x87);delay(3);
month_1302=R1302(0x89);delay(3);
year_1302=R1302(0x8d);delay(3);
week_1302=R1302(0x8b);delay(3);
}
//----BCD转换到disp[]中
void clktodisp(uchar j,uchar xx)
{
disp[j]=(xx>>4)&0x0f;
disp_set[j]=disp[j];
j++;
disp[j]=xx&0x0f;
disp_set[j]=disp[j];
}
//---年、月、日、时、分、秒的转换
void YMD_HMS_TO_led()
{
getYMD_HMS();
clktodisp(0,year_1302); clktodisp(2,month_1302);
clktodisp(4,day_1302); clktodisp(6,week_1302-1);
clktodisp(8,hour_1302); clktodisp(10,min_1302);
clktodisp(12,sec_1302);
}
//---正常时间显示
void display_1302()
{
lcd_disonechar(1,0,'2');
lcd_disonechar(2,0,'0');
lcd_disonechar(3,0,disp[0]|0x30);
lcd_disonechar(4,0,disp[1]|0x30);
lcd_disonechar(5,0,'.');
lcd_disonechar(6,0,disp[2]|0x30);
lcd_disonechar(7,0,disp[3]|0x30);
lcd_disonechar(8,0,'.');
lcd_disonechar(9,0,disp[4]|0x30);
lcd_disonechar(10,0,disp[5]|0x30);
// lcd_disonechar(10,0,' ');
lcd_disonechar(11,0,' ');
lcd_disonechar(12,0,'-');
lcd_disonechar(13,0,'-');
lcd_disonechar(14,0,'-');
lcd_disonechar(15,0,disp[7]|0x30);
lcd_disonechar(0,1,disp[8]|0x30);
lcd_disonechar(1,1,disp[9]|0x30);
lcd_disonechar(2,1,':');
lcd_disonechar(3,1,disp[10]|0x30);
lcd_disonechar(4,1,disp[11]|0x30);
lcd_disonechar(5,1,':');
lcd_disonechar(6,1,disp[12]|0x30);
lcd_disonechar(7,1,disp[13]|0x30);
}
//--修改时间显示
void display_ch_1302()
{
static uchar a=0;
a=!a;
lcd_disonechar(0,0,'2');
lcd_disonechar(1,0,'0');
if(set_no==0&&a==1) lcd_disonechar(2,0,' ');
else lcd_disonechar(2,0,disp_set[0]|0x30);
if(set_no==1&&a==1) lcd_disonechar(3,0,' ');
else lcd_disonechar(3,0,disp_set[1]|0x30);
lcd_disonechar(4,0,'.');
if(set_no==2&&a==1) lcd_disonechar(5,0,' ');
else lcd_disonechar(5,0,disp_set[2]|0x30);
if(set_no==3&&a==1) lcd_disonechar(6,0,' ');
else lcd_disonechar(6,0,disp_set[3]|0x30);
lcd_disonechar(7,0,'.');
if(set_no==4&&a==1) lcd_disonechar(8,0,' ');
else lcd_disonechar(8,0,disp_set[4]|0x30);
if(set_no==5&&a==1) lcd_disonechar(9,0,' ');
else lcd_disonechar(9,0,disp_set[5]|0x30);
lcd_disonechar(10,0,' ');
lcd_disonechar(11,0,' ');
lcd_disonechar(12,0,'-');
lcd_disonechar(13,0,'-');
lcd_disonechar(14,0,'-');
if(set_no==7&&a==1) lcd_disonechar(15,0,' ');
else lcd_disonechar(15,0,disp_set[7]|0x30);
if(set_no==8&&a==1) lcd_disonechar(0,1,' ');
else lcd_disonechar(0,1,disp_set[8]|0x30);
if(set_no==9&&a==1) lcd_disonechar(1,1,' ');
else lcd_disonechar(1,1,disp_set[9]|0x30);
lcd_disonechar(2,1,':');
if(set_no==10&&a==1) lcd_disonechar(3,1,' ');
else lcd_disonechar(3,1,disp_set[10]|0x30);
if(set_no==11&&a==1) lcd_disonechar(4,1,' ');
else lcd_disonechar(4,1,disp_set[11]|0x30);
lcd_disonechar(5,1,':');
if(set_no==12&&a==1) lcd_disonechar(6,1,' ');
else lcd_disonechar(6,1,disp_set[12]|0x30);
if(set_no==13&&a==1) lcd_disonechar(7,1,' ');
else lcd_disonechar(7,1,disp_set[13]|0x30);
}
void disp_settoclk()
{
set_year=disp_set[0]*16+disp_set[1];
set_month=disp_set[2]*16+disp_set[3];
set_day=disp_set[4]*16+disp_set[5];
set_week=disp_set[6]*16+disp_set[7];
set_hour=disp_set[8]*16+disp_set[9];
set_min=disp_set[10]*16+disp_set[11];
}
//----向1302写入的年月日,时分秒,星期---
void sendYMD_HMS()
{
disp_settoclk();
W1302(0x8e,0);delay(2);
W1302(0x80,sec_1302&0x7f);delay(2);
W1302(0x80,set_sec);delay(2);
W1302(0x82,set_min);delay(2);
W1302(0x84,set_hour);delay(2);
W1302(0x86,set_day);delay(2);
W1302(0x88,set_month);delay(2);
W1302(0x8c,set_year);delay(2);
W1302(0x8a,set_week+1);delay(2);
}
/**************************1302程序****************************/
/**************************74165程序****************************/
//----键盘扫描74165----
uchar scankeyboard()
{
uchar i,d=0;
sh_ld=0; delay(2);sh_ld=1;
for(i=0;i<8;i++)
{
if(in==1) d=d*2+1;
else d=d*2;
clk_165=0;clk_165=1;
}
dd[0]=dd[1];dd[1]=d;
return(d);
}
//----键值处理----
void keyfuntion(uchar key_value)
{
switch(key_value)
{
case 0: break;
case 1: if(dd[0]!=dd[1]) {set_no=0; set_flag=!set_flag;}break;
case 2: if(set_flag==1&&(dd[0]!=dd[1]))
{
set_no++;
if(set_no==14) set_no=0;
}
break;
case 4: if(set_flag==1&&(dd[0]!=dd[1]))
{
disp_set[set_no]++;
if(set_no==0&&disp_set[set_no]==10) disp_set[set_no]=0;
if(set_no==1&&disp_set[set_no]==10) disp_set[set_no]=0;
if(set_no==2&&disp_set[set_no]==2) disp_set[set_no]=0;
if(set_no==3&&disp_set[set_no]==10) disp_set[set_no]=0;
if(set_no==4&&disp_set[set_no]==4) disp_set[set_no]=0;
if(set_no==5&&disp_set[set_no]==10) disp_set[set_no]=0;
if(set_no==6) disp_set[6]=0;
if(set_no==7&&disp_set[set_no]==8) disp_set[set_no]=1;
if(set_no==8&&disp_set[set_no]==3) disp_set[set_no]=0;
if(set_no==9&&disp_set[set_no]==4) disp_set[set_no]=0;
if(set_no==10&&disp_set[set_no]==6) disp_set[set_no]=0;
if(set_no==11&&disp_set[set_no]==10) disp_set[set_no]=0;
if(set_no==12&&disp_set[set_no]==6) disp_set[set_no]=0;
if(set_no==13&&disp_set[set_no]==10) disp_set[set_no]=0;
}
break;
case 8: if(set_flag==1)
{
set_flag=0;
sendYMD_HMS();
}
break;
default :break;
}
}
/**************************74165程序****************************/
void time0() interrupt 1
{
static uchar m,n;
m++;
n++;
a++;
keyfuntion(scankeyboard());
if(set_flag==1&&m==2) {m=0;display_ch_1302();}
else if(set_flag==0&&n==20)
{
n=0;
keyfuntion(scankeyboard());
YMD_HMS_TO_led();
display_1302();
}
if(a==30) { dis_flag=1;
a=0;
}
else dis_flag=0;
if(m==5) m=0;
if(n==20) n=0;
TH0=0X3C;
TL0=0XB0;
}
/* void time1() interrupt 3
{
static uchar a;
a++;
keyfuntion(scankeyboard());
if(a==30) { Display_18b20();
dis_flag=1;
a=0;
}
else dis_flag=0;
if(a==16) {
if(disp[8]==1&&disp[9]==0&&disp[10]==0&&disp[11]==6) alarm=1;
else { alarm=0;p27=1;}
}
TH0=0X3C;
TL0=0XB0;
}
*/
void main()
{
EA=1;
ET0=1;
//ET1=1;
TMOD=0X01;
TH0=0x3C;
TL0=0xB0;
// TH1=0x3C;
//TL1=0xB0;
TR0=1;
// TR1=1;
lcdreset();
W1302(0x8e,0);delay(2);
sec_1302=R1302(0x81);delay(3);
W1302(0x80,sec_1302&0x7f);delay(3);
W1302(0x80,sec_1302&0x7f);
covert_18b20();
Display_18b20();
while(1)
{
if(dis_flag)
{
covert_18b20();
Display_18b20();
}
// if(alarm==1) p27=!p27;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -