嵌入式电子闹钟时钟课程设计Word文档下载推荐.docx

上传人:b****6 文档编号:17514476 上传时间:2022-12-06 格式:DOCX 页数:19 大小:108.94KB
下载 相关 举报
嵌入式电子闹钟时钟课程设计Word文档下载推荐.docx_第1页
第1页 / 共19页
嵌入式电子闹钟时钟课程设计Word文档下载推荐.docx_第2页
第2页 / 共19页
嵌入式电子闹钟时钟课程设计Word文档下载推荐.docx_第3页
第3页 / 共19页
嵌入式电子闹钟时钟课程设计Word文档下载推荐.docx_第4页
第4页 / 共19页
嵌入式电子闹钟时钟课程设计Word文档下载推荐.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

嵌入式电子闹钟时钟课程设计Word文档下载推荐.docx

《嵌入式电子闹钟时钟课程设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《嵌入式电子闹钟时钟课程设计Word文档下载推荐.docx(19页珍藏版)》请在冰豆网上搜索。

嵌入式电子闹钟时钟课程设计Word文档下载推荐.docx

/*

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>

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);

//液晶显示第二行

20;

num++)

write_data(table1[num]);

voidwrite_com(ucharcom)//1602液晶写指令

rs=0;

P0=com;

lcden=1;

voidwrite_data(uchardate)//1602液晶写写数据

rs=1;

P0=date;

 

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'

);

U'

N'

break;

case2:

M'

O'

case3:

T'

E'

case4:

W'

D'

case5:

H'

case6:

F'

R'

case7:

A'

}

voidkeyscan()//按键函数

if(s1==0)

write_com(0x0f);

s1num++;

//记录按键次数

flag=1;

flag1=1;

while(!

s1);

switch(s1num)//光标闪烁点定位

write_com(0x80+0x40+6);

//秒

write_com(0x80+0x40+3);

//分

write_com(0x80+0x40+0);

//时

write_com(0x80+11);

//星期

write_com(0x80+8);

//日

write_com(0x80+5);

//月

write_com(0x80+2);

//年

case8:

s1num=0;

//设置开显示光标不显示关闭时间设置

set_rtc();

if(s1num!

=0)//按键加减

if(s2==0)//加按键函数

delay(10);

if(s2==0)

s2);

switch(s1num)//根据功能键相应次数做出调节

miao++;

//秒加

if(miao==60)

miao=0;

write_sfm(6,miao);

write_com(0x80+0x40+6);

fen++;

//分加

if(fen==60)

fen=0;

write_sfm(3,fen);

write_com(0x80+0x40+3);

shi++;

//时加

if(shi==24)

shi=0;

write_sfm(0,shi);

write_com(0x80+0x40+0);

week++;

//星期加

if(week==8)

week=1;

write_week(week);

day++;

//日加

if(day==32)

day=1;

write_nyr(8,day);

write_com(0x80+8);

month++;

//月加

if(month==13)

month=1;

write_nyr(5,month);

write_com(0x80+5);

year++;

//年加

if(year==100)

year=0;

write_nyr(2,year);

write_com(0x80+2);

if(s3==0)//减按键函数同上

if(s3==0)

s3);

miao--;

if(miao==-1)

miao=59;

fen--;

if(fen==-1)

fen=59;

shi--;

if(shi==-1)

shi=23;

week--;

if(week==-1)

week=7;

day--;

if(day==-1)

day=31;

month--;

if(month==-1)

month=12;

year--;

if(year==-1)

year=99;

if(s4==0)//闹钟按键

if(s4==0)

//光标闪烁

s2num++;

s4);

switch(s2num)//光标闪烁点定位

write_com(0x80+0x40+13);

write_com(0x80+0x40+10);

write_com(0x0c);

//关闭闹钟设置

s2num=0;

if(s2num!

=0)//闹钟设置

if(s2==0)//闹钟加

switch(s2num)//根据功能键相应次数做出调节

afen++;

if(afen==60)

afen=0;

write_sfm(13,afen);

write_com(0x80+0x40+13);

ashi++;

if(ashi==24)

ashi=0;

write_sfm(10,ashi);

write_com(0x80+0x40+10);

if(s3==0)//闹钟减

afen--;

if(afen==-1)

afen=59;

ashi--;

if(ashi==-1)

ashi=23;

voidwirte_ds1302_byte(uchardat)//ds1302字节写

uchari;

for(i=0;

i<

8;

i++)

sclk=0;

io=dat&

0x01;

dat=dat>

1;

sclk=1;

voidwrite_ds1302(ucharadd,uchardat)//ds1302写函数

rst=0;

_nop_();

//空操作

rst=1;

wirte_ds1302_byte(add);

wirte_ds1302_byte(dat);

io=1;

ucharread_ds1302(ucharadd)//ds1302读函数

uchari,value;

{

value=value>

if(io)

value=value|0x80;

returnvalue;

voidset_rtc()//ds1302时间设置

write_ds1302(0x8e,0x00);

//关写保护

year1=year/10;

//转换为十六进制

year=year%10;

year=year+year1*16;

write_ds1302(0x8c,year);

week1=week/10;

week=week%10;

week=week+week1*16;

write_ds1302(0x8a,week);

month1=month/10;

month=month%10;

month=month+month1*16;

write_ds1302(0x88,month);

day1=day/10;

day=day%10;

day=day+day1*16;

write_ds1302(0x86,day);

shi1=shi/10;

shi=shi%10;

shi=shi+shi1*16;

write_ds1302(0x84,shi);

fen1=fen/10;

fen=fen%10;

fen=fen+fen1*16;

write_ds1302(0x82,fen);

miao1=miao/10;

miao=miao%10;

miao=miao+miao1*16;

write_ds1302(0x80,miao);

write_ds1302(0x8e,0x80);

//开写保护

}

voidread_rtc()//从ds1302中读时间

year2=read_ds1302(0x8d);

week2=read_ds1302(0x8b);

month2=read_ds1302(0x89);

day2=read_ds1302(0x87);

shi2=read_ds1302(0x85);

fen2=read_ds1302(0x83);

miao2=read_ds1302(0x81);

voidtime_pros()//从ds1302中读出的时间转换为十进制

year5=year2/16;

year2=year2%16;

year2=year2+year5*10;

month5=month2/16;

month2=month2%16;

month2=month2+month5*10;

day5=day2/16;

day2=day2%16;

day2=day2+day5*10;

shi5=shi2/16;

shi2=shi2%16;

shi2=shi2+shi5*10;

fen5=fen2/16;

fen2=fen2%16;

fen2=fen2+fen5*10;

miao5=miao2/16;

miao2=miao2%16;

miao2=miao2+miao5*10;

voiddisplay()//显示函数

write_sfm(6,miao2);

write_sfm(3,fen2);

write_sfm(0,shi2);

write_week(week2);

write_nyr(8,day2);

write_nyr(5,month2);

write_nyr(2,year2);

if((ashi==shi2)&

&

(afen==fen2))

alarm();

voidalarm()//闹钟

beep=0;

delay(1000);

beep=1;

voidmain()//主函数

init();

//初始化

while

(1)

keyscan();

//按键函数

if(flag==0)

read_rtc();

time_pros();

display();

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 冶金矿山地质

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1