嵌入式电子闹钟时钟课程设计.docx
- 文档编号:2241203
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:18
- 大小:108.93KB
嵌入式电子闹钟时钟课程设计.docx
《嵌入式电子闹钟时钟课程设计.docx》由会员分享,可在线阅读,更多相关《嵌入式电子闹钟时钟课程设计.docx(18页珍藏版)》请在冰豆网上搜索。
嵌入式电子闹钟时钟课程设计
#include
#include
#defineucharunsignedchar//宏定义
#defineuintunsignedint
//位定义
sbitrs=P2^5;//液晶位定义
sbitlcden=P2^7;
sbits1=P2^0;//时间功能切换按键
sbits2=P2^1;//按键加
sbits3=P2^3;//按键减
sbits4=P2^4;//闹钟功能切换键
sbitrst=P1^5;//ds1302引脚定义
sbitio=P1^6;
sbitsclk=P1^7;
sbitbeep=P3^0;//蜂鸣器
ucharnum,count,shi,fen,miao,s1num,s2num,
year,month,day,week,flag,flag1,year1,month1,
day1,week1,shi1,fen1,miao1,year2,month2,
day2,week2,shi2,fen2,miao2,year5,month5,
day5,week5,shi5,fen5,miao5,wk,ashi,afen;//参数定义
ucharcodetable[]="20--";//液晶固定显示
ucharcodetable1[]=":
:
00:
00";
/*
uchartime_dat[7]={12,1,6,6,12,59,59};//年周月日时分秒
ucharwrite_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};
ucharread_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};
*/
voidwrite_com(ucharcom);//液晶写指令函数
voidwrite_data(uchardate);//液晶写数据函数
voidwrite_ds1302(ucharadd,uchardat);//ds1302芯片写指令函数
voidset_rtc();//ds1302时间设置函数
voidtime_pros();//ds1302进制转换函数
voidread_rtc();//ds1302读时间函数
voidalarm();//闹钟函数
voiddelay(uintz)//延时函数
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidinit()//初始化
{
lcden=0;
flag=0;
flag1=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);//液晶固定显示,第一行
for(num=0;num<14;num++)
{
write_data(table[num]);
delay(5);
}
write_com(0x80+0x40);//液晶显示第二行
for(num=0;num<20;num++)
{
write_data(table1[num]);
delay(5);
}
}
voidwrite_com(ucharcom)//1602液晶写指令
{
rs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidwrite_data(uchardate)//1602液晶写写数据
{
rs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidwrite_sfm(ucharadd,uchardate)//时分秒
{
ucharshi3,ge;
shi3=date/10;
ge=date%10;
write_com(0x80+0x40+add);
write_data(0x30+shi3);
write_data(0x30+ge);
}
voidwrite_nyr(ucharad,uchardate)//年月日
{
ucharshi4,ge2;
shi4=date/10;
ge2=date%10;
write_com(0x80+ad);
write_data(0x30+shi4);
write_data(0x30+ge2);
}
voidwrite_week(ucharwk)//星期按西方星期设置星期天为第一天
{
write_com(0x80+11);
switch(wk)
{
case1:
write_data('S');
delay(5);
write_data('U');
delay(5);
write_data('N');
break;
case2:
write_data('M');
delay(5);
write_data('O');
delay(5);
write_data('N');
break;
case3:
write_data('T');
delay(5);
write_data('U');
delay(5);
write_data('E');
break;
case4:
write_data('W');
delay(5);
write_data('E');
delay(5);
write_data('D');
break;
case5:
write_data('T');
delay(5);
write_data('H');
delay(5);
write_data('U');
break;
case6:
write_data('F');
delay(5);
write_data('R');
delay(5);
write_data('T');
break;
case7:
write_data('S');
delay(5);
write_data('A');
delay(5);
write_data('T');
break;
}
}
voidkeyscan()//按键函数
{
if(s1==0)
{
delay(5);
if(s1==0)
{
write_com(0x0f);
s1num++;//记录按键次数
flag=1;
flag1=1;
while(!
s1);
switch(s1num)//光标闪烁点定位
{
case1:
write_com(0x80+0x40+6);//秒
break;
case2:
write_com(0x80+0x40+3);//分
break;
case3:
write_com(0x80+0x40+0);//时
break;
case4:
write_com(0x80+11);//星期
break;
case5:
write_com(0x80+8);//日
break;
case6:
write_com(0x80+5);//月
break;
case7:
write_com(0x80+2);//年
break;
case8:
s1num=0;
write_com(0x0c);//设置开显示光标不显示关闭时间设置
set_rtc();
flag=0;
break;
}
}
}
if(s1num!
=0)//按键加减
{
if(s2==0)//加按键函数
{
delay(10);
if(s2==0)
{
while(!
s2);
switch(s1num)//根据功能键相应次数做出调节
{
case1:
miao++;//秒加
if(miao==60)
miao=0;
write_sfm(6,miao);
write_com(0x80+0x40+6);
break;
case2:
fen++;//分加
if(fen==60)
fen=0;
write_sfm(3,fen);
write_com(0x80+0x40+3);
break;
case3:
shi++;//时加
if(shi==24)
shi=0;
write_sfm(0,shi);
write_com(0x80+0x40+0);
break;
case4:
week++;//星期加
if(week==8)
week=1;
write_week(week);
write_com(0x80+11);
break;
case5:
day++;//日加
if(day==32)
day=1;
write_nyr(8,day);
write_com(0x80+8);
break;
case6:
month++;//月加
if(month==13)
month=1;
write_nyr(5,month);
write_com(0x80+5);
break;
case7:
year++;//年加
if(year==100)
year=0;
write_nyr(2,year);
write_com(0x80+2);
break;
}
}
}
if(s3==0)//减按键函数同上
{
delay(10);
if(s3==0)
{
while(!
s3);
switch(s1num)//根据功能键相应次数做出调节
{
case1:
miao--;
if(miao==-1)
miao=59;
write_sfm(6,miao);
write_com(0x80+0x40+6);
break;
case2:
fen--;
if(fen==-1)
fen=59;
write_sfm(3,fen);
write_com(0x80+0x40+3);
break;
case3:
shi--;
if(shi==-1)
shi=23;
write_sfm(0,shi);
write_com(0x80+0x40+0);
break;
case4:
week--;
if(week==-1)
week=7;
write_week(week);
write_com(0x80+11);
break;
case5:
day--;
if(day==-1)
day=31;
write_nyr(8,day);
write_com(0x80+8);
break;
case6:
month--;
if(month==-1)
month=12;
write_nyr(5,month);
write_com(0x80+5);
break;
case7:
year--;
if(year==-1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 电子 闹钟 时钟 课程设计