?? 001.c
字號:
out_rxd(&timer[nian/16]); //年
out_rxd(&timer[nian%16]);
}
out_rxd(&timer[11]); //不顯示
out_rxd(&hanzi[0][i*2+1]); //年字符
out_rxd(&hanzi[0][i*2]);
if(id==2&&ss>750) //當ID為2和SS大于1000時月不顯示。
{out_rxd(&timer[11]); //不顯示
out_rxd(&timer[11]);} //不顯示
else
{if(yue/16==0)
out_rxd(&timer[11]); //當月十位為零時不顯示
else
out_rxd(&timer[yue/16]);
out_rxd(&timer[yue%16]); //月
}
out_rxd(&hanzi[1][i*2+1]); //月字符
out_rxd(&hanzi[1][i*2]);
if(id==3&&ss>750) //當ID為3和SS大于1000時日不顯示。
{out_rxd(&timer[11]); //不顯示
out_rxd(&timer[11]);} //不顯示
else
{out_rxd(&timer[ri/16]);
out_rxd(&timer[ri%16]);} //日
out_rxd(&hanzi[17][i*2+1]); //日字符
out_rxd(&hanzi[17][i*2]);
out_rxd(&hanzi[2][i*2+1]); //星字符
out_rxd(&hanzi[2][i*2]);
out_rxd(&hanzi[3][i*2+1]); //期字符
out_rxd(&hanzi[3][i*2]);
out_rxd(&timer[11]); //不顯示
if(id==4&&ss>750) //當ID為3和SS大于1000時星期不顯示。
{out_rxd(&timer[11]); //不顯示
out_rxd(&timer[11]);} //不顯示
else
{out_rxd(&hanzi[xinqi+10][i*2+1]);//星期值字符
out_rxd(&hanzi[xinqi+10][i*2]);}
out_rxd(&timer[11]); //不顯示
if(id==5&&ss>750) //當ID為4和SS大于1000時時不顯示。
{out_rxd(&timer[11]); //不顯示
out_rxd(&timer[11]);} //不顯示
else
{
if(shi/16==0)
out_rxd(&timer[11]); //當時十位為零時不顯示
else
out_rxd(&timer[shi/16]); //從串口輸出時十位。
out_rxd(&timer[shi%16]); //從串口輸出時個位。
}
out_rxd(&timer[10]); //從串口輸出兩點。
if(id==6&&ss>750) //當ID為6和SS大于1000時分不顯示。
{out_rxd(&timer[11]); //不顯示
out_rxd(&timer[11]);} //不顯示
else
{out_rxd(&timer[fen/16]); //輸出分值
out_rxd(&timer[fen%16]);}
out_rxd(&timer[10]); //從串口輸出兩點。
if(id==7&&ss>750) //當ID為6和SS大于1000時秒不顯示。
{out_rxd(&timer[11]); //不顯示
out_rxd(&timer[11]);} //不顯示
else
{out_rxd(&timer[miao/16]); //輸出秒值
out_rxd(&timer[miao%16]);}
/*****************************************************************/
P2_7=1; //鎖存為高,595鎖存信號
P2=sw; //輸出行信號
if(i<15)
DelayMs(); //延時,等待一段時間,讓這列顯示的內容在人眼內產生“視覺暫留”現象。*/
}
}
/*******************************************************/
void out_rxd(unsigned char *d) /*從串口發送數據*/
{
SBUF=*d;
while(TI==0); //等待發送完畢
TI=0;
}
/********************************ds1302時間調整*****************/
void id_case1_key()
{
if (key_up==0) //增加
{
DelayMs();
if(key_up==0)
{
while(key_up==0)
{xs_out();}
ss=0;
Set(id,0);
}
}
if (key_Down==0) //減少
{
DelayMs();
if(key_Down==0)
{
while(key_Down==0)
{xs_out();}
ss=0;
Set(id,1);
}
}
}
//根據選擇調整相應項目
void Set(uchar sel,uchar sel_1)
{
uchar address,item;
uchar max,mini;
if(sel==7) {address=0x80; max=0;mini=0;} //秒
if(sel==6) {address=0x82; max=59;mini=0;} //分鐘
if(sel==5) {address=0x84; max=23;mini=0;} //小時
if(sel==4) {address=0x8a; max=7; mini=1;} //星期
if(sel==3) {address=0x86; max=31;mini=1;} //日
if(sel==2) {address=0x88; max=12;mini=1;} //月
if(sel==1) {address=0x8c; max=99;mini=0;} //年
item=R1302(address+1)/16*10+R1302(address+1)%16;
if (sel_1==0) item++; else item--;
if(item>max) item=mini;
if(item<mini) item=max;
W1302(0x8e,0x00);
W1302(address,item/10*16+item%10);
W1302(0x8e,0x80);
}
/**************************延時***********************/
void DelayMs(void)
{
uchar TempCyc;
for(TempCyc=150;TempCyc>1;TempCyc--)
{;}
}
//********DS1302讀寫程序***************//
/********************************************************************
函 數 名:RTInputByte()
功 能:實時時鐘寫入一字節
說 明:往DS1302寫入1Byte數據 (內部函數)
入口參數:d 寫入的數據
返 回 值:無
***********************************************************************/
void RTInputByte(uchar d)
{
uchar h;
ACC = d;
for(h=8; h>0; h--)
{
T_IO = ACC0; /*相當于匯編中的 RRC */
T_CLK = 1;
T_CLK = 0;
ACC = ACC >> 1;
}
}
/********************************************************************
函 數 名:RTOutputByte()
功 能:實時時鐘讀取一字節
說 明:從DS1302讀取1Byte數據 (內部函數)
入口參數:無
返 回 值:ACC
設 計:zhaojunjie 日 期:2002-03-19
修 改: 日 期:
***********************************************************************/
uchar RTOutputByte(void)
{
uchar h;
for(h=8; h>0; h--)
{
ACC = ACC >>1; /*相當于匯編中的 RRC */
ACC7 = T_IO;
T_CLK = 1;
T_CLK = 0;
}
return(ACC);
}
/********************************************************************
函 數 名:W1302()
功 能:往DS1302寫入數據
說 明:先寫地址,后寫命令/數據 (內部函數)
調 用:RTInputByte() , RTOutputByte()
入口參數:ucAddr: DS1302地址, ucData: 要寫的數據
返 回 值:無
***********************************************************************/
void W1302(uchar ucAddr, uchar ucDa)
{
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(ucAddr); /* 地址,命令 */
RTInputByte(ucDa); /* 寫1Byte數據*/
T_CLK = 1;
T_RST = 0;
}
/********************************************************************
函 數 名:R1302()
功 能:讀取DS1302某地址的數據
說 明:先寫地址,后讀命令/數據 (內部函數)
調 用:RTInputByte() , RTOutputByte()
入口參數:ucAddr: DS1302地址
返 回 值:ucData :讀取的數據
***********************************************************************/
uchar R1302(uchar ucAddr)
{
uchar ucData;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(ucAddr); /* 地址,命令 */
ucData = RTOutputByte(); /* 讀1Byte數據 */
T_CLK = 1;
T_RST = 0;
return(ucData);
}
/********************************************************************
函 數 名:Set1302()
功 能:設置初始時間
說 明:先寫地址,后讀命令/數據(寄存器多字節方式)
調 用:W1302()
入口參數:pClock: 設置時鐘數據地址 格式為: 秒 分 時 日 月 星期 年
7Byte (BCD碼)1B 1B 1B 1B 1B 1B 1B
返 回 值:無
***********************************************************************/
void Set1302(uchar *pClock)
{
uchar h;
uchar ucAddr = 0x80;
W1302(0x8e,0x00); /* 控制命令,WP=0,寫操作?*/
for(h =7; h>0; h--)
{
W1302(ucAddr,*pClock); /* 秒 分 時 日 月 星期 年 */
pClock++;
ucAddr +=2;
}
W1302(0x8e,0x80); /* 控制命令,WP=1,寫保護?*/
}
/******************讀取DS1302中的時間****************/
void du1302()
{
miao=R1302(0x81); //對取 秒 分 時 日 月 星期 年
fen=R1302(0x83);
shi=R1302(0x85);
ri=R1302(0x87);
yue=R1302(0x89);
xinqi=R1302(0x8b);
nian=R1302(0x8d);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -