智能电子钟应用电子专业综合课程设计 精品Word文档下载推荐.docx

上传人:b****4 文档编号:18006004 上传时间:2022-12-12 格式:DOCX 页数:90 大小:259.05KB
下载 相关 举报
智能电子钟应用电子专业综合课程设计 精品Word文档下载推荐.docx_第1页
第1页 / 共90页
智能电子钟应用电子专业综合课程设计 精品Word文档下载推荐.docx_第2页
第2页 / 共90页
智能电子钟应用电子专业综合课程设计 精品Word文档下载推荐.docx_第3页
第3页 / 共90页
智能电子钟应用电子专业综合课程设计 精品Word文档下载推荐.docx_第4页
第4页 / 共90页
智能电子钟应用电子专业综合课程设计 精品Word文档下载推荐.docx_第5页
第5页 / 共90页
点击查看更多>>
下载资源
资源描述

智能电子钟应用电子专业综合课程设计 精品Word文档下载推荐.docx

《智能电子钟应用电子专业综合课程设计 精品Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《智能电子钟应用电子专业综合课程设计 精品Word文档下载推荐.docx(90页珍藏版)》请在冰豆网上搜索。

智能电子钟应用电子专业综合课程设计 精品Word文档下载推荐.docx

完整C程序源代码

/**************************************************************************************

*主程序:

顶层程序*

*显示默认功能:

时间日期显示;

*

*调用子程序;

*

**

***************************************************************************************/

#include<

intrins.h>

#include"

zimo.h"

//字模程序;

nokia5110.h"

//5110驱动程序;

ds1302.h"

//ds1302驱动程序;

key.h"

//按键扫描程序;

printf.h"

//显示函数;

power.h"

//电源模块;

main.h"

//引脚定义;

delay.h"

//延时函数;

macroandconst.h"

//数据类型宏定义;

ADC.H"

//ADC电压测量

ds18b20.h"

//温度模块;

voidmain()

{

system_inint();

//系统初始化;

//Set_RTC();

while

(1)

{

checkclock();

caidan();

//菜单显示;

if(menue==0)

{

if(ok==1)

LCD_clear();

//清屏幕

while(menue==0)//由此进入时钟功能

ok=0;

logo();

Read_RTC();

//读取时钟;

data_change();

//时钟数据处理

tiaozheng_flag();

date_time();

//显示年月日时分秒;

week();

//星期处理;

set_date_time();

//设置改变时间和日期;

powervcc();

}

LCD_clear();

elseif(menue==1)//由此进入温度检测功能

{

while(menue==1)

temperatuercheck();

elseif(menue==2)//由此进入电压测量功能

while(menue==2)

power();

//电量检测

elseif(menue==3)//由此进入闹钟功能

while(menue==3)

clock();

else{LCD_clear();

}

voidextern0()interrupt0/*外部中断0中断函数定义;

*/

key();

*子程序:

底层程序*

*功能:

时间日期数据处理;

*

**

stc12c5a60s2.h"

sbitSCK=P0^2;

//DS1302时钟;

sbitSDA=P0^1;

//DS1302数据;

sbitRST=P0^0;

//DS1302复位;

ucharl_tmpDate[]={0,0,0,1,1,1,13};

//秒分时日月周年08-05-1512:

00:

00

ucharl_tmpdisplay[13];

codeucharWrite_rtc_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};

//秒分时日月周年最低位读写位

codeucharRead_RTC_address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};

/******************************************************************/

/*写一个字节*/

voidWrite_Ds1302_Byte(unsignedchartemp)

{

unsignedchari;

for(i=0;

i<

8;

i++)//循环8次写入数据

SCK=0;

SDA=temp&

0x01;

//每次传输低字节

temp>

>

=1;

//右移一位

SCK=1;

}

/*写入DS1302*/

voidWrite_Ds1302(unsignedcharaddress,unsignedchardat)

RST=0;

_nop_();

SCK=0;

RST=1;

_nop_();

//启动

Write_Ds1302_Byte(address);

//发送地址

Write_Ds1302_Byte(dat);

//发送数据

//恢复

/*读出DS1302数据*/

unsignedcharRead_Ds1302(ucharaddress)

unsignedchari,temp=0x00;

for(i=0;

i++)//循环8次读取数据

{

if(SDA)

{

temp|=0x80;

}//每次传输低字节

temp>

SCK=1;

SCK=0;

}

//以下为DS1302复位的稳定时间

RST=0;

SDA=0;

SDA=1;

return(temp);

//返回

/*读时钟数据*/

voidRead_RTC(void)//读取日历

unsignedchari,*p;

p=Read_RTC_address;

//地址传递

for(i=0;

7;

i++)//分7次读取秒分时日月周年

l_tmpDate[i]=Read_Ds1302(*p);

p++;

/*设定时钟数据*/

voidSet_RTC(void)//设定日历

uchari,*p,tmp;

i++)

{//BCD处理

tmp=l_tmpDate[i]/10;

l_tmpDate[i]=l_tmpDate[i]%10;

l_tmpDate[i]=l_tmpDate[i]+tmp*16;

}

Write_Ds1302(0x8E,0X00);

//关闭写保护;

p=Write_rtc_address;

//传地址

for(i=0;

i++)//7次写入秒分时日月周年

{

Write_Ds1302(*p,l_tmpDate[i]);

p++;

Write_Ds1302(0x8E,0x80);

//打开写保护;

底层程序*

按键处理,键值显示;

eeprom.h"

ucharset=0;

//按键选择标志位;

charkey_flag=0;

//按键加减标志位;

ucharmenue=0;

//菜单选择标志位;

ucharok=0;

//确认标志位;

charmiao,fen,shi,ri,yue,zhou,nian;

/*时间日期数值标志位;

ucharclocktable[5];

//分,时,星期;

charhour=7;

charminute=30;

charweek2=1;

voidDelay10ms()//@11.0592MHz

unsignedchari,j;

i=108;

j=145;

do

while(--j);

}while(--i);

voidkey()

EA=0;

/*判断选择按键是否按下;

如果按下了当松开的时候让背光打开;

set++;

if(keyswitch==0)

{

Delay10ms();

if(keyswitch==0)

{

Delay10ms();

while(keyswitch==0);

LCD_BLA=1;

if(set>

8)set=0;

set++;

}

}

/*up和down按键的检测;

加减标志位*/

if(keyup==0)

{Delay10ms();

if(keyup==0)

{

LCD_BLA=1;

Delay10ms();

while(keyup==0);

key_flag++;

if(keydown==0)

if(keydown==0)

while(keydown==0);

key_flag--;

if(keymenue==0)

if(keymenue==0)//菜单选择标志位;

{

while(keymenue==0);

LCD_BLA=1;

menue++;

if(menue>

3)menue=0;

}if(keyok==0)

if(keyok==0)//确认标志位;

while(keyok==0);

ok++;

if(ok>

1)ok=0;

set=0;

LCD_BLA=0;

TR0=0;

if(set>

=2)TR0=0;

EA=1;

voidset_date_time()

if(set==2)

//while(keyup==0|keydown==0);

miao=l_tmpdisplay[10]*10+l_tmpdisplay[11];

miao=miao+key_flag;

if((key_flag<

0)&

(miao==0))miao=59;

if(miao>

59)miao=0;

miao=miao%10+(miao/10)*16;

Write_Ds1302(0x8E,0x00);

Write_Ds1302(0x80,miao);

Write_Ds1302(0x8E,0x80);

if(set==3)

{

//while(keyup==0||keydown==0);

fen=l_tmpdisplay[8]*10+l_tmpdisplay[9];

fen=fen+key_flag;

if(fen>

59)

fen=0;

if((key_flag<

&

(fen<

0))

fen=59;

fen=fen%10+(fen/10)*16;

Write_Ds1302(0x8E,0x00);

Write_Ds1302(0x82,fen);

if(set==4)

shi=l_tmpdisplay[6]*10+l_tmpdisplay[7];

shi=shi+key_flag;

if(shi>

23)shi=0;

(shi<

0))shi=23;

shi=shi%10+(shi/10)*16;

Write_Ds1302(0x84,shi);

if(set==5)

ri=l_tmpdisplay[4]*10+l_tmpdisplay[5];

ri=ri+key_flag;

if(ri>

31)ri=1;

(ri<

1))ri=31;

ri=ri%10+(ri/10)*16;

Write_Ds1302(0x86,ri);

if(set==6)

//while(keyup==0||keydown==0);

yue=l_tmpdisplay[2]*10+l_tmpdisplay[3];

yue=yue+key_flag;

if(yue>

12)yue=1;

(yue<

1))yue=12;

yue=yue%10+(yue/10)*16;

Write_Ds1302(0x88,yue);

if(set==7)

zhou=l_tmpdisplay[12];

zhou=zhou+key_flag;

if(zhou>

7)zhou=1;

(zhou<

1))zhou=7;

zhou=zhou%10+(zhou/10)*16;

Write_Ds1302(0x8A,zhou);

if(set==8)

nian=l_tmpdisplay[0]*10+l_tmpdisplay[1]+key_flag;

;

if(nian>

79)nian=0;

(nian<

0))nian=79;

nian=nian%10+(nian/10)*16;

Write_Ds1302(0x8C,nian);

key_flag=0;

voidcaidan()

ucharcounter;

ucharfunction;

/*光标显示位置控制*/

if(menue==0)

LCD_write_hanzi(0,4,10);

Delay1ms(120);

LCD_write_hanzi(0,0,3);

LCD_write_hanzi(0,2,10);

LCD_write_hanzi(4,0,10

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

当前位置:首页 > 求职职场 > 简历

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

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