初学单片机万能模板51单片机C语言程序Word格式文档下载.docx
《初学单片机万能模板51单片机C语言程序Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《初学单片机万能模板51单片机C语言程序Word格式文档下载.docx(24页珍藏版)》请在冰豆网上搜索。
charnian=13,yue=3,ri=20,shi=20,fen,miao,
t1,num2,num3,date=3,A1;
bitflag;
inttemp;
floatf_temp;
voidweek(date);
voidWrite_1302(ucharaddress,uchardat);
bitRST_DS18B20();
voidWBIT_DS18B20(bitdata_bit);
bitRBIT_DS18B20(void);
voidWBYTE_DS18B20(uchardata_byte);
ucharRBYTE_DS18B20(void);
voidSTART_DS18B20(void);
uintREAD_TEM(void);
voidDelay_15us(uinttemp)//延时函数。
公式:
(15*temp+15)us
{
for(temp;
temp>
0;
temp--)
{
_nop_();
}
_nop_();
}
voiddelay(ucharx)
uchary,z;
for(y=x;
y>
y--)
for(z=110;
z>
z--);
}
voidwrite_com(ucharcom)//1602写指令
RS=0;
RW=0;
delay
(1);
P3=com;
EN=0;
EN=1;
voidwrite_date(uchardate)//1602写数据
RS=1;
P3=date;
voidinit()//初始化
{
write_com(0x38);
//显示模式设置16*2显示,5*7点阵,8位数据接口
delay(5);
write_com(0x0c);
//显示开显示.显示光标,不闪烁00001110
write_com(0x06);
//写一个字符后地址指针+1
write_com(0x01);
//清零
write_com(0x80);
miao=miao/10*16+miao%10;
fen=fen/10*16+fen%10;
shi=shi/10*16+shi%10;
ri=ri/10*16+ri%10;
yue=yue/10*16+yue%10;
nian=nian/10*16+nian%10;
voidwrite_sfm(ucharadd,chardate)//时分秒显示
charshi,ge;
shi=date/16;
ge=date%16;
write_com(0xc0+add);
write_date(0x30+shi);
write_date(0x30+ge);
voidwrite_nyr(ucharadd,chardate)//年月日显示
write_com(0x80+add);
voidWrite_1302(ucharaddress,uchardat)//1302写数据
uchari;
CE=0;
SCLK=0;
CE=1;
for(i=0;
i<
8;
i++)//循环8次写入地址数据
{
SCLK=0;
SDA=address&
0x01;
//每次传输低字节
address>
>
=1;
//右移一位
SCLK=1;
}
i++)//循环8次写入数据
SDA=dat&
dat>
//右移一位DSCLK=1
CE=0;
ucharRead_1302(ucharaddress)//1302读数据
uchari,temp=0x00;
SDA=1;
i++)//循环8次写入地址数据
if(SDA)
temp|=0x80;
//每次传输低字节
SCLK=0;
temp>
for(i=0;
7;
i++)//循环8次读取数据
{
if(SDA==1)
temp|=0x80;
//每次传输低字节
temp>
SCLK=1;
SDA=0;
returntemp;
//返回
voidDS1302_initW()//初始化时间设置(写)
Write_1302(0x8e,0x00);
//写保护关
Write_1302(0x80,miao);
//秒
Write_1302(0x82,fen);
//分
Write_1302(0x84,shi);
//时
Write_1302(0x86,ri);
//日
Write_1302(0x88,yue);
//月
Write_1302(0x8a,date);
//周
Write_1302(0x8c,nian);
//年
Write_1302(0x8e,0x80);
//写保护开
voidDS1302_initR()//初始化时间设置(读)
miao=Read_1302(0x81);
//读秒数据
fen=Read_1302(0x83);
//读分钟数据
shi=Read_1302(0x85);
//读小时数据
date=Read_1302(0x8b);
//读星期数据
ri=Read_1302(0x87);
//读日数据
yue=Read_1302(0x89);
//读月数据
nian=Read_1302(0x8d);
//读年数据
voiddisplay()//显示函数
write_com(0x80+0x07);
write_date('
-'
);
write_com(0x80+0x04);
write_com(0xc0+0x02);
:
'
write_com(0xc0+0x05);
write_com(0x80+0x00);
write_date(0x30+2);
write_date(0x30);
DS1302_initR();
write_nyr(2,nian);
//送液晶显示
write_nyr(5,yue);
write_nyr(8,ri);
write_sfm(0,shi);
write_sfm(3,fen);
write_sfm(6,miao);
week(date);
}
voidweek(date)//星期函数
write_com(0x80+12);
if(date==1)
for(num3=0;
num3<
3;
num3++)
write_date(a[num3]);
delay
(2);
}
if(date==2)
for(num3=4;
if(date==3)
for(num3=8;
11;
if(date==4)
for(num3=12;
15;
}
if(date==5)
for(num3=16;
19;
if(date==6)
for(num3=20;
23;
}
if(date==7)
for(num3=24;
27;
bitRST_DS18B20()//DS18B20复位
bitret=1;
DQ=0;
Delay_15us(39);
DQ=1;
Delay_15us(4);
ret=DQ;
Delay_15us(27);
return(ret);
voidWBIT_DS18B20(bitdata_bit)//写位
Delay_15us(0);
DQ=data_bit;