源程序代码Word文件下载.docx
- 文档编号:17713141
- 上传时间:2022-12-08
- 格式:DOCX
- 页数:22
- 大小:19.69KB
源程序代码Word文件下载.docx
《源程序代码Word文件下载.docx》由会员分享,可在线阅读,更多相关《源程序代码Word文件下载.docx(22页珍藏版)》请在冰豆网上搜索。
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文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 源程序 代码