資源簡介
基于ds1302的可調時鐘程序,已通過硬件調試!時鐘可調,并帶有簡單的鬧鐘功能,通過1602顯示,有proteus的仿真!

代碼片段和文件信息
#include
#include
#include
#include???????//DS1302驅動程序
#include??????//LCD1302驅動程序
?
//==========================
#define?uchar?unsigned?char
#define?uint?unsigned?int
//==========================
sbit?k1=P1^3;
sbit?k2=P1^1;
sbit?k3=P1^5;
sbit?beep=P3^7;
?
uchar?key1;
uchar?tab_time[8]={0010001001};????//時間
uchar?tab_ymdw[12]={200211001102120};???//年月日星期
uchar?tab_num[]=“0123456789:/?“;
uchar?tab_week[21]=“MonTeuWedThuFriSatSun“;
uchar?tab_ap[]=“AMPM“;
uchar?tab_t[]=“T:“tab_d[]=“D:“?alarm_time[]={0157};
//--------------------------
//-------?函數聲明?--------
void?lcd_disp();
void?trans();
void?key();
void?delay(uint);
void?display_set(uchar?uchar?uchar?);
void?music();
?void?display_char1(uchar?uchar?);
??void??display_char2(uchar?uchar?);
?
//==========================
//------?主函數?-----------
void?main()
{?
ds1302_init();????????//DS1302初始化
write_command(0x01);????????//LCD清屏
initial_lcd();?
delay(10);//LCD1602初始化
while(1)
???{???
????ds1302();??
????key();
???
????trans();
if(!key1)
????lcd_disp();
?
if(tab_1302[0]==alarm_time[0]&&tab_1302[1]==alarm_time[1]&&tab_1302[2]==alarm_time[2])
music();???
???}
}
//=============顯示函數============
???void?display_char2(uchar?adruchar?dat)
{???
write_command(0x80+0x40+adr);
write_data(dat);
}
void?display_char1(uchar?adruchar?dat)
{???
write_command(0x80+adr);
write_data(dat);
}
//=============音樂播放===========================
???void?music()
{??uint?ulnp=20;
while(p--)
{
??for(??ul=0;ul<150;ul++)
??{
???for(??n=0;n<30;n++);??
???beep=~beep;
??}
delay(200);
??for(ul=0;ul<150;ul++)
??{
???for(n=0;n<30;n++);??
???beep=~beep;?
??}
delay(800);
}
}
//==================設定顯示函數=========================
?void?display_set(uchar?puchar?adruchar?dat)
{
uchar?shigeij;
shi=dat/10;
ge=dat%10;//分離date的十位和個位數
if(p==1&&adr==13)
{write_command(?0xc0+13);?
????for(i=0;i<3;i++)
?????{???????????//星期
???????j=ge;???????????//星期
?????write_data(tab_week[(j-1)*3+i]);
???????}
???}
????
else??if(!p)
???write_command(0x80+adr);
else
???write_command(0xc0+adr);
write_data(?0x30+shi);
????write_data(?0x30+ge); ?
}??
//-----------------?數據轉換函數???---------------------------
void?trans()
{???
tab_time[0]=tab_1302[2]/10;???//小時十位????
tab_time[1]=tab_1302[2]%10;???//小時個位
tab_time[3]=tab_1302[1]/10;???//分十位
tab_time[4]=tab_1302[1]%10;???//分個位
tab_time[6]=tab_1302[0]/10;???//秒十位
tab_time[7]=tab_1302[0]%10;???//秒個位
tab_ymdw[2]=tab_1302[6]/10;???//年十位
tab_ymdw[3]=tab_1302[6]%10;???//年個位
tab_ymdw[5]=tab_1302[4]/10;???//月十位
tab_ymdw[6]=tab_1302[4]%10;???//月個位
tab_ymdw[8]=tab_1302[3]/10;???//日十位
tab_ymdw[9]=tab_1302[3]%10;???//日個位
tab_ymdw[11]=tab_1302[5];?????//星期?
}
?
void?lcd_disp()
{
??uchar?ij?;?????????//LCD1602寫命令函數從第一行開始顯
//------------------------?
???
?????for(i=0;i<2;i++)
?????displ
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????3506??2010-06-09?15:24??可調時鐘鬧鐘\ds1302.h
?????文件??????91553??2010-06-18?06:29??可調時鐘鬧鐘\DS1302可調時鐘.DSN
?????文件???????1650??2010-06-18?06:29??可調時鐘鬧鐘\DS1302可調時鐘.PWI
?????文件??????91566??2010-06-18?06:27??可調時鐘鬧鐘\Last?Loaded?DS1302可調時鐘.DBK
?????文件???????1665??2010-06-09?15:49??可調時鐘鬧鐘\LCD_1602A.h
?????文件??????25440??2010-06-18?06:28??可調時鐘鬧鐘\可調時鐘
?????文件??????10024??2010-06-18?06:28??可調時鐘鬧鐘\可調時鐘.c
?????文件???????6342??2010-06-18?06:28??可調時鐘鬧鐘\可調時鐘.hex
?????文件?????????48??2010-06-18?06:28??可調時鐘鬧鐘\可調時鐘.lnp
?????文件??????18599??2010-06-18?06:28??可調時鐘鬧鐘\可調時鐘.LST
?????文件??????30262??2010-06-18?06:28??可調時鐘鬧鐘\可調時鐘.M51
?????文件??????30568??2010-06-18?06:28??可調時鐘鬧鐘\可調時鐘.OBJ
?????文件???????1311??2010-06-18?06:29??可調時鐘鬧鐘\可調時鐘.Opt
?????文件????????378??2010-06-18?06:29??可調時鐘鬧鐘\可調時鐘.plg
?????文件???????2126??2010-06-09?16:27??可調時鐘鬧鐘\可調時鐘.Uv2
????.......??????1312??2010-06-11?07:06??可調時鐘鬧鐘\可調時鐘_Opt.Bak
?????文件??????????0??2010-06-09?15:20??可調時鐘鬧鐘\可調時鐘_Uv2.Bak
?????目錄??????????0??2010-06-18?06:29??可調時鐘鬧鐘
-----------?---------??----------?-----??----
???????????????316350????????????????????18
評論
共有 條評論