?? hello.c.huzm.c
字號:
break; /*跳出此循環(huán)*/
case 0x0e: /*是否按“C”,已偵測過*/
read24c02(); /*呼叫讀取密碼存放在DATE1[]副程式*/
break; /*跳出此循環(huán)*/
case 0x0f:
open(); /*是否按“D”,是則呼比較密碼開門副程式*/
dispbuf[0]=0x03; /*小數(shù)點位*/
goto openend;
break; /*跳出此循環(huán)*/
default:
xch(); /*以上均不是則為數(shù)字鍵呼叫XCH作右鍵滾入*/
break; /*跳出此循環(huán)*/
} /*跳出SWITCH*/
delay(100); /*按鈕抗機械反彈跳*/
while(m==P0); /*按鈕放開否?*/
send_to_Led_a(); /*串行發(fā)送到DTLED-6副程式*/
openend: nop;
}
} /*返回上一層程式*/
/****************************************************/
void temp_setclock(void) /*判斷有按鍵輸入否?*/
{
switch(dispbuf[0]) /*是則測試ptr鍵盤掃描計數(shù)器指標至TAB[]取到的鍵盤碼*/
{
case 0x01:
wxb1(); /*0~9計數(shù)*/
break; /*跳出此循環(huán)*/
case 0x03:
wxb1(); /*0~9計數(shù)*/
break; /*跳出此循環(huán)*/
case 0x05:
wxb2(); /*0~2,0~4計數(shù)*/
break; /*跳出此循環(huán)*/
default: /*以上均不是*/
break; /*跳出此循環(huán)*/
}
delay(100); /*按鈕抗機械反彈跳*/
while(m==P0); /*按鈕放開否?*/
send_to_Led_a(); /*串行發(fā)送到DTLED-6副程式*/
} /*返回上一層程式*/
/****************************************************/
void wxb1(void)
{
switch(tab[ptr]) /*是則測試ptr鍵盤掃描計數(shù)器指標至TAB[]取到的鍵盤碼*/
{
case 0x02:
dispbuf[dispbuf[0]]++; /*是按“上”,是則呼叫設(shè)定密碼SET*/
if(dispbuf[dispbuf[0]]>9)
{dispbuf[dispbuf[0]+1]++;
dispbuf[dispbuf[0]]=0;
}
if(dispbuf[dispbuf[0]+1]==6)
{dispbuf[dispbuf[0]+1]=dispbuf[dispbuf[0]]=0;
}
break; /*跳出此循環(huán)*/
case 0x08:
if(dispbuf[dispbuf[0]]==0) /*是按“下”,是則呼叫清除顯示器CLEAR*/
{if(dispbuf[dispbuf[0]+1]==0)
dispbuf[dispbuf[0]+1]=6;
dispbuf[dispbuf[0]]=10;
dispbuf[dispbuf[0]+1]--;
}
dispbuf[dispbuf[0]]--;
break; /*跳出此循環(huán)*/
case 0x04: /*是按“左”,未規(guī)劃鍵待用戶自己定義*/
dispbuf[0]=dispbuf[0]+2; /*小數(shù)點左移一位*/
if(dispbuf[0]>6)
dispbuf[0]=1;
break; /*跳出此循環(huán)*/
case 0x06: /*是按“右”,未規(guī)劃鍵待用戶自己定義*/
if(dispbuf[0]<3)
dispbuf[0]=7;
dispbuf[0]=dispbuf[0]-2; /*小數(shù)點右移一位*/
break; /*跳出此循環(huán)*/
case 0x0a: /*是按“*”,已偵測過*/
FLAG5=1;
break; /*跳出此循環(huán)*/
case 0x0c: /*是否按“A”,未規(guī)劃鍵待用戶自己定義*/
FLAG4=FLAG5=P3_6=1;
dispbuf[0]=0x03; /*小數(shù)點位*/
break; /*跳出此循環(huán)*/
default: /*以上均不是*/
break; /*跳出此循環(huán)*/
}
} /*返回上一層程式*/
/****************************************************/
void wxb2(void)
{switch(tab[ptr]) /*是則測試ptr鍵盤掃描計數(shù)器指標至TAB[]取到的鍵盤碼*/
{case 0x02:
dispbuf[dispbuf[0]]++; /*是按“上”,是則呼叫設(shè)定密碼SET*/
if(dispbuf[dispbuf[0]+1]==2)
{if(dispbuf[dispbuf[0]]>4)
{dispbuf[dispbuf[0]+1]=dispbuf[dispbuf[0]]=0;}
}
else
{if(dispbuf[dispbuf[0]]>9)
{dispbuf[dispbuf[0]+1]++; dispbuf[dispbuf[0]]=0;}
if(dispbuf[dispbuf[0]+1]>2)
{dispbuf[dispbuf[0]+1]=dispbuf[dispbuf[0]]=0;}
}
break; /*跳出此循環(huán)*/
case 0x08:
if(dispbuf[dispbuf[0]]==0) /*是按“下”,是則呼叫清除顯示器CLEAR*/
{if(dispbuf[dispbuf[0]+1]==0)
{dispbuf[dispbuf[0]+1]=2;
dispbuf[dispbuf[0]]=5;
}
else
{dispbuf[dispbuf[0]]=10; dispbuf[dispbuf[0]+1]--;
}
}
dispbuf[dispbuf[0]]--;
break; /*跳出此循環(huán)*/
case 0x04: /*是按“左”,未規(guī)劃鍵待用戶自己定義*/
dispbuf[0]=dispbuf[0]+2; /*小數(shù)點左移一位*/
if(dispbuf[0]>6)
dispbuf[0]=1;
break; /*跳出此循環(huán)*/
case 0x06: /*是按“右”,未規(guī)劃鍵待用戶自己定義*/
if(dispbuf[0]<3)
dispbuf[0]=7;
dispbuf[0]=dispbuf[0]-2; /*小數(shù)點右移一位*/
break; /*跳出此循環(huán)*/
case 0x0a: /*是按“*”,已偵測過*/
FLAG5=1;
break; /*跳出此循環(huán)*/
case 0x0c: /*是否按“A”,未規(guī)劃鍵待用戶自己定義*/
FLAG4=FLAG5=P3_6=1;
dispbuf[0]=0x03; /*小數(shù)點位*/
break; /*跳出此循環(huán)*/
default: /*以上均不是*/
break; /*跳出此循環(huán)*/
}
} /*返回上一層程式*/
/****************************************************/
void save_clocks(void) /*按顯示時間更改時鐘*/
{clocktmp[0]=dispbuf[1]|(dispbuf[2]<<4);
clocktmp[1]=dispbuf[3]|(dispbuf[4]<<4);
clocktmp[2]=dispbuf[5]|(dispbuf[6]<<4);
Wr1302();
FLAG2=1;
nop;
}
/****************************************************/
void xch(void) /*顯示向右移動副程式*/
{char c; /*宣告變數(shù)*/
for(c=6;c>0;c--)
{dispbuf[c]=dispbuf[c-1];/*將顯示器dispbuf[]移位交換,dispbuf[3]->dispbuf[4]->dispbuf[5]...*/
}
dispbuf[0]=0; /*有安鍵時,小數(shù)點不亮*/
dispbuf[1]=tab[ptr]; /*新的按鍵值存入dispbuf[1],最低位*/
} /*返回上一層程式*/
/****************************************************/
void open(void) /*開門比較密碼副程式*/
{char c; /*宣告變數(shù)*/
FLAG1=1; /*設(shè)開門標號為1*/
for(c=1;c<6;c++) /*比較六個密碼*/
{if(dispbuf[c]!=bufdata[c]) /*顯示值(按鍵值disbuf[])與密碼TAB[]比較是否相等*/
FLAG1=0;
if(FLAG1==0) /*FLAG1=0 表示不相等*/
break; /*跳出此循環(huán)*/
}
if(FLAG1==1) /*如FLAG1=1 表示密碼相等,令電鎖P2.0置0動作*/
{ /*密碼正確*/
dispbuf[8]=0x09; /*蜂鳴器設(shè)定開/二次分頻*/
dispbuf[0]=0x01; /*小數(shù)點到最高位位*/
P3_6=0; /*P3.6置0,使綠色下載指示燈亮(喇叭響)*/
TMOD=0x11;
TR1=1; /**/
IE=0x8a; /*8是允許中斷,a是TIMER0,TIMER1中斷致能位*/
send_to_Led_a(); /*串行發(fā)送到DTLED-6副程式*/
while(FLAG5==0) /*等待設(shè)置死循環(huán)*/
{
scan(); /*呼叫鍵盤掃描副程式有按FLAG0會為1*/
if(FLAG0==1)
{
temp_setclock(); /*判斷有按鍵輸入否?*/
}
}
if(FLAG4==0)
save_clocks(); /*按顯示時間更改時鐘*/
}
else P3_6=1; /*密碼錯,P3.6置1,關(guān)閉綠色下載指示燈滅(喇叭不響)*/
} /*返回上一層程式*/
/******************************************************/
void clear(void) /*清除顯示器dispbuf[]為00副程式*/
{char c; /*宣告變數(shù)*/
for(c=1;c<7;c++) /*將00存入顯示陣列dispbuf[]*/
{dispbuf[c]=0x00;
}
} /*返回上一層程式*/
/******************************************************/
void Wr1302(void) /*寫時鐘芯片DS1302*/
{char i,j,ts0,conb,conbyt;
conb=0x80;
ts0=conb;
//
for(j=0;j<3;j++) /*寫秒,分,時三次循環(huán)*/
{clk=RST=0; /*DS1302系統(tǒng)初始化*/
nop;nop;
RST=1;
for(i=0;i<8;i++) /*寫控制字到DS1302*/
{clk=0; /*清時鐘*/
if(conb&0x01)
DINOUT=1;
else DINOUT=0;
clk=1; /*時鐘上升沿,發(fā)送數(shù)據(jù)有效*/
conb=conb>>1;
nop;
}
clk=0; /*清時鐘*/
conb=ts0+2+j*2;
conbyt=clocktmp[j]&0x7f;
for(i=0;i<8;i++) /*寫設(shè)定值到DS1302*/
{clk=0; /*清時鐘*/
if(conbyt&0x01)
DINOUT=1;
else DINOUT=0;
clk=1; /*時鐘上升沿,發(fā)送數(shù)據(jù)有效*/
conbyt=conbyt>>1;
nop;
}
delay(5);
RST=0;
nop;
}
}
/*返回主程式*/
/******************************************************/
void Rd1302st() /*啟動時鐘芯片振蕩器*/
{
char i,ts0,conb,conbyt;
Rd1302();
conbyt=clocktmp[0]&0x7f;
conb=0x80;
ts0=conb;
clk=RST=0; /*DS1302系統(tǒng)初始化*/
nop;nop;
RST=1;
for(i=0;i<8;i++) /*寫控制字到DS1302*/
{ clk=0; /*清時鐘*/
if(conb&0x01)
DINOUT=1;
else DINOUT=0;
clk=1; /*時鐘上升沿,發(fā)送數(shù)據(jù)有效*/
conb=conb>>1;
nop;
}
clk=0; /*清時鐘*/
for(i=0;i<8;i++) /*寫控制字到DS1302*/
{ clk=0; /*清時鐘*/
if(conbyt&0x01)
DINOUT=1;
else DINOUT=0;
clk=1; /*時鐘上升沿,發(fā)送數(shù)據(jù)有效*/
conbyt=conbyt>>1;
nop;
}
delay(5);
RST=0;
nop;
} /*返回主程式*/
/******************************************************/
void Rd1302() /*讀時鐘芯片DS1302*/
{
char i,j,ts0,conb;
conb=0x81;
clocktmp[0]=0;
clocktmp[1]=0;
clocktmp[2]=0;
ts0=conb;
for(j=0;j<3;j++)
{
clk=RST=0; /*DS1302系統(tǒng)初始化*/
nop;nop;
RST=1;
for(i=0;i<8;i++) /*寫控制字到DS1302*/
{
clk=0; /*清時鐘*/
if(conb&0x01)
DINOUT=1;
else DINOUT=0;
clk=1; /*時鐘上升沿,發(fā)送數(shù)據(jù)有效*/
conb=conb>>1;
nop;
}
conb=ts0=ts0+2;
clk=0;
for(i=0;i<7;i++) /*讀時鐘芯片的時分秒單元*/
{
if(DINOUT==1)
clocktmp[j]=clocktmp[j]|0x80;
else clocktmp[j]=clocktmp[j]&0x7f;
clk=1;
clocktmp[j]=clocktmp[j]>>1; /*接收暫存單元*/
nop;
clk=0; /*時鐘下降沿,接收數(shù)據(jù)有效*/
}
delay(5);
RST=0;
delay(10);
}
dispbuf[1]=clocktmp[0]&0x0f; /*轉(zhuǎn)換秒分時顯示單元*/
dispbuf[2]=clocktmp[0]>>4&0x07;
dispbuf[3]=clocktmp[1]&0x0f;
dispbuf[4]=clocktmp[1]>>4&0x07;
dispbuf[5]=clocktmp[2]&0x0f;
dispbuf[6]=clocktmp[2]>>4&0x03;
nop;
} /*返回主程式*/
//**************************************************************
void read24c02() /*讀24c02的存儲值*/
{uchar i;
TRcvAddress(0xa0,0,&bufdata[0],7);
for(i=0;i<6;i++)
{dispbuf[i]=bufdata[i];
}
} /*返回上一層程式*/
/******************************************************/
void write24c02() /*寫24c02的存儲值*/
{
TSendAddress(0xa0,0,dispbuf,7); /* 向有子地址器件寫入6字節(jié)數(shù)據(jù)函數(shù) */
}
//**************************************************************
void send_to_Comm1(void) /*宣告串口serial發(fā)送副程式*/
{
uchar i=0;//huzm
/* uchar sec,min,hour;
sec=((dispbuf[2]<<4)&0xf0)|(dispbuf[1]&0x0f);
min=((dispbuf[4]<<4)&0xf0)|(dispbuf[3]&0x0f);
hour=((dispbuf[6]<<4)&0xf0)|(dispbuf[5]&0x0f);
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -