源程序代码Word文件下载.docx

上传人:b****6 文档编号:17713141 上传时间:2022-12-08 格式:DOCX 页数:22 大小:19.69KB
下载 相关 举报
源程序代码Word文件下载.docx_第1页
第1页 / 共22页
源程序代码Word文件下载.docx_第2页
第2页 / 共22页
源程序代码Word文件下载.docx_第3页
第3页 / 共22页
源程序代码Word文件下载.docx_第4页
第4页 / 共22页
源程序代码Word文件下载.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

源程序代码Word文件下载.docx

《源程序代码Word文件下载.docx》由会员分享,可在线阅读,更多相关《源程序代码Word文件下载.docx(22页珍藏版)》请在冰豆网上搜索。

源程序代码Word文件下载.docx

shi1=byte_read(0x2001);

open1=byte_read(0x2002);

a_a=byte_read(0x2058);

/**************开机自检eeprom初始化*****************/

voidinit_eeprom()

read_eeprom();

//先读

if(a_a!

=1)

//新的单片机初始单片机内问eeprom

{

fen1=3;

shi1=8;

open1=1;

a_a=1;

write_eeprom();

//保存数据

}

/***********************18b20初始化函数*****************************/

voidinit_18b20()

bitq;

dq=1;

//把总线拿高

delay_uint

(1);

//15us

dq=0;

//给复位脉冲

delay_uint(80);

//750us

//把总线拿高等待

delay_uint(10);

//110us

q=dq;

//读取18b20初始化信号

delay_uint(20);

//200us

//把总线拿高释放总线

/*************写18b20内的数据***************/

voidwrite_18b20(uchardat)

uchari;

for(i=0;

i<

8;

i++)

{//写数据是低位开始

dq=0;

//把总线拿低写时间隙开始

dq=dat&

0x01;

//向18b20总线写数据了

delay_uint(5);

//60us

dq=1;

//释放总线

dat>

>

=1;

/*************读取18b20内的数据***************/

ucharread_18b20()

uchari,value;

//把总线拿低读时间隙开始

value>

//读数据是低位开始

if(dq==1)//开始读写数据

value|=0x80;

//60us

读一个时间隙最少要保持60us的时间

}

returnvalue;

//返回数据

/*************读取温度的值读出来的是小数***************/

uintread_temp()

uintvalue;

ucharlow;

//在读取温度的时候如果中断的太频繁了,就应该把中断给关了,否则会影响到18b20的时序

init_18b20();

//初始化18b20

write_18b20(0xcc);

//跳过64位ROM

write_18b20(0x44);

//启动一次温度转换命令

delay_uint(50);

//500us

write_18b20(0xbe);

//发出读取暂存器命令

EA=0;

low=read_18b20();

//读温度低字节

value=read_18b20();

//读温度高字节

EA=1;

value<

<

=8;

//把温度的高位左移8位

value|=low;

//把读出的温度低位放到value的低八位中

value*=0.625;

//转换到温度值小数

//返回读出的温度带小数

/******************1ms延时函数*******************/

voiddelay_1ms(uintq)

uinti,j;

q;

for(j=0;

j<

120;

j++);

/******************写星期函数*******************/

voidwrite_week(ucharhang,ucharadd,ucharweek)//写星期函数

if(hang==1)

write_com(0x80+add);

else

write_com(0x80+0x40+add);

switch(week)

case1:

write_data('

M'

);

//星期数为1时,显示

write_data('

O'

N'

break;

case2:

T'

//星期数据为2时显示

U'

E'

case3:

W'

//星期数据为3时显示

D'

case4:

//星期数据为4是显示

H'

case5:

F'

//星期数据为5时显示

R'

I'

case6:

S'

//星期数据为6时显示

A'

case0:

//星期数据为7时显示

/*************时钟显示***************/

voidinit_1602_ds1302()

write_sfm2_ds1302(1,1,shi);

//显示时

write_sfm2_ds1302(1,4,fen);

//显示分

write_sfm2_ds1302(1,7,miao);

//显示秒

write_week(2,12,week);

//write_sfm1(1,14,week);

//显示星期

write_sfm3_18B20(1,11,temperature);

//显示温度

if(flag_nl==0)//显示阳历

write_sfm2_ds1302(2,2,nian);

//显示年

write_sfm2_ds1302(2,5,yue);

//显示月

write_sfm2_ds1302(2,8,ri);

//显示日

else//显示农历

write_sfm2_ds1302(2,2,n_nian);

write_sfm2_ds1302(2,5,n_yue);

write_sfm2_ds1302(2,8,n_ri);

//显示日

}

/*************定时器0初始化程序***************/

voidinit_time0()

//开总中断

TMOD=0X01;

//定时器0、工作方式1

ET0=1;

//开定时器0中断

TR0=1;

//允许定时器0定时

/*************闹钟报警函数***************/

voidmenu_dis()

staticucharmm,value;

if(flag_100ms==1)//100ms执行一次

flag_100ms=0;

if(open1==1)//如果闹钟打开

{

if((miao==0)&

&

(fen==fen1)&

(shi==shi1))

{

flag_beep_en=1;

//有报警打开蜂鸣器响的标志位

}

if(flag_beep_en==1)

//闹钟以被打开

{

clock_value++;

if(clock_value<

=30)

beep=~beep;

//蜂鸣器叫3秒

elseif(clock_value>

30)

{

beep=1;

//蜂鸣器停1秒

if(clock_value>

40)

{

clock_value=0;

}

}

//1分钟后自动关闭闹钟

value++;

if(value>

=10)

value=0;

mm++;

if(mm>

=60)

mm=0;

flag_beep_en=0;

beep=1;

}

}

}

/********************独立按键程序*****************/

ucharkey_can;

//按键值

voidkey()//独立按键程序

staticucharkey_new;

key_can=20;

//按键值还原

P3|=0x78;

//对应的按键IO口输出为1

if((P3&

0x78)!

=0x78)//按键按下

delay_1ms

(1);

//按键消抖动

if(((P3&

=0x78)&

(key_new==1))

{//确认是按键按下

key_new=0;

switch(P3&

0x78)

case0x70:

key_can=4;

break;

//得到按键值

case0x68:

key_can=3;

case0x58:

key_can=2;

case0x38:

key_can=1;

write_sfm2(1,0,key_can);

//显示按键值

}

else

key_new=1;

/**********************设置函数************************/

voidkey_with()

if(key_can==1)//设置键

menu_1++;

if(menu_1==1)//设置时间

menu_2=1;

write_string(1,0,"

--W:

"

write_string(2,0,"

20--"

}

if(menu_1==2)//设置闹钟

setclock"

Y00:

00"

if(menu_1>

2)//回到正常显示

menu_1=0;

write_guanbiao(1,2,0);

//关闭光标

init_1602_dis_csf();

//初始化液晶显示

if(key_can==2)//选择键

flag_200ms=1;

menu_2++;

if(menu_2>

7)

menu_2=1;

if(menu_1==2)//设置闹钟

3)

if(menu_1==1)

if(menu_2==1)//设置时

if(key_can==3)//加

shi+=0x01;

if((shi&

0x0f)>

=0x0a)

shi=(shi&

0xf0)+0x10;

if(shi>

=0x24)

shi=0;

if(key_can==4)//减

if(shi==0x00)

shi=0x24;

0x0f)==0x00)

shi=(shi|0x0a)-0x10;

shi--;

}

if(menu_2==2)//设置分

fen+=0x01;

if((fen&

fen=(fen&

if(fen>

=0x60)

fen=0;

if(key_can==4)//减

if(fen==0x00)

fen=0x5a;

fen=(fen|0x0a)-0x10;

fen--;

}

if(menu_2==3)//设置秒

miao+=0x01;

if((miao&

miao=(miao&

if(miao>

miao=0;

if(miao==0x00)

miao=0x5a;

miao=(miao|0x0a)-0x10;

miao--;

if(menu_2==4)//设置星期

week+=0x01;

if((week&

week=(week&

if(week>

=0x08)

week=1;

if(week==0x01)

week=0x08;

week=(week|0x0a)-0x10;

week--;

if(menu_2==5)//设置年

nian+=0x01;

if((nian&

nian=(nian&

if(nian>

=0x9a)

nian=1;

if(nian==0x01)

nian=0x9a;

nian=(nian|0x0a)-0x10;

nian--;

if(menu_2==6)//设置月

yue+=0x01;

if((yue&

yue=(yue&

if(yue>

=0x13)

yue=1;

if(yue==0x01)

yue=0x13;

yue=(yue|0x0a)-0x10;

yue--;

if(menu_2==7)//设置日

ri+=0x01;

if((ri&

ri=(ri&

if(ri>

=0x32)

ri=0;

if(ri==0x01)

ri=0x32;

if((ri&

ri=(ri|0x0a)-0x10;

ri--;

write_sfm2_ds1302(1,2,shi);

write_sfm2_ds1302(1,5,fen);

write_sfm2_ds1302(1,8,miao);

//显示秒

write_sfm1(1,14,week);

//显示星期

write_sfm2_ds1302(2,3,nian);

write_sfm2_ds1302(2,6,yue);

//显示月

write_sfm2_ds1302(2,9,ri);

//显示日

switch(menu_2)//光标显示

case1:

write_guanbiao(1,2,1);

case2:

write_guanbiao(1,5,1);

case3:

write_guanbiao(1,8,1);

case4:

write_guanbiao(1,14,1);

case5:

write_guanbiao(2,3,1);

case6:

write_guanbiao(2,6,1);

case7:

write_guanbiao(2,9,1);

write_time();

//把时间写进去

/***************设置闹钟*********************/

if(menu_1==2)

if(menu_2==1)//设置闹钟开关

if(key_can==3)

open1=1;

//闹钟开

if(key_can==4)

open1=0;

//闹钟关

if(menu_2==2)//设置闹钟时

shi1+=0x01;

if((shi1&

shi1=(shi1&

if(shi1

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

当前位置:首页 > PPT模板 > 简洁抽象

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

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