台灣自行車用品製造廠論壇

標題: 單片機壆習——用ds1302制作一個精密電子鍾,按鍵調節 [打印本頁]

作者: admin    時間: 2018-6-13 11:48
標題: 單片機壆習——用ds1302制作一個精密電子鍾,按鍵調節
void write_byte(uchar dat)//寫入一個字節
{
uchar i;
ACC=dat;
for(i=8;i>0;i--)
{
ds1302_io=acc0;
ds1302_sclk=1;
ds1302_sclk=0;
ACC=ACC>>1;
}
}
uchar read_byte() //讀出一個字節
{
uchar i;
for(i=8;i>0;i--)
{
ACC=ACC>>1;
acc7=ds1302_io;
ds1302_sclk=1;
ds1302_sclk=0;
}
return(ACC);
}
return(temp);
}
void set_ds1302(uchar *pClock)//設寘ds1302的時間
{
uchar i;
uchar add=0x80;
EA=0;
s_write(0x8e,0x00);
for(i=7;i>0;i--)
{
s_write(add,*pClock);
pClock++;
add+=2;
}
s_write(0x8e,0x80);
EA=1;
}
void rw_ds1302() //讀寫ds1302
{
EA=0;
sec=s_read(0x81);
write_time(8,sec);
write_com(0x80+0x40+9);
min=s_read(0x83);
write_time(5,min);
write_com(0x80+0x40+6);
hour=s_read(0x85);
write_time(2,hour);
write_com(0x80+0x40+3);
week=s_read(0x8b);
write_xingqi(week);
write_com(0x80+0x0d);
day=s_read(0x87);
write_riqi(8,day);
write_com(0x80+9);
month=s_read(0x89);
write_riqi(5,month);
write_com(0x80+6);
year=s_read(0x8d);
write_riqi(2,year);
write_com(0x80+3);
EA=1;
}
void write_com(uchar com) //寫命令子函數
{
lcde=0;
lcdrw=0;
lcdrs=0;
delay(1);
lcde=1;
delay(1);
P0=com;
delay(1);
lcde=0;
}
void write_data(uchar dat)//寫數据子函數
{
lcde=0;
lcdrw=0,宜蘭親子民宿包棟;
lcdrs=1;
delay(1);
lcde=1;
delay(1);
P0=dat;
delay(1);
lcde=0;
}
void init()
{
s_write(0x90,0xa5);
set_ds1302(time);
delay(5);
lcde=0; //LCD1602初始化
le=0;
leden=0;
write_com(0x38);
delay(100);
write_com(0x38);
delay(50);
write_com(0x38);
delay(10);
write_com(0x08);
write_com(0x01);
write_com(0x0c);
write_com(0x80);
題目:用ds1302制作一個精密的電子時鍾,且實現按鍵調節時間
for(num=0;num0;j--)
for(i=250;i>0;i--) ;
}
}
}

#include
#include
#define uchar unsigned char
#define uint unsigned int
#define DEC2BCD(X) ((X/10) //用於將十進制轉成BCD碼的宏
#define BCD2DEC(X) (((X&0x70)>>4)*10 + (X&0x0F)) //用於將BCD碼轉成十進制的宏
void write_com(uchar com);
void write_data(uchar dat);
void init();
void write_time(uchar add,uchar dat);
void write_riqi(uchar add,uchar dat);
void write_xingqi(uchar dat);
void write_byte(uchar dat);
uchar read_byte();
void s_write(uchar add,uchar dat);
void s_write(uchar add,uchar dat);
uchar s_read(uchar add);
void set_ds1302(uchar *pClock);
void rw_ds1302();
void keyscan();
void main()//main函數
{
s_write(0x8e,0x80);
init();
P0=0xff;
while(1)
{
keyscan();
if(flag==0){
rw_ds1302();
}




歡迎光臨 台灣自行車用品製造廠論壇 (http://www.aolight.com.tw/) Powered by Discuz! X3.3