资源简介
采用DS1302时钟芯片用1602液晶显示具有显示时间,日期,温度功能,支持多组闹铃
代码片段和文件信息
//*******Designed By FF********
#include
#define ui unsigned int
#define uc unsigned char
sbit clk=P1^0;// ds1302 端口
sbit io=P1^1;
sbit rst=P1^2;
sbit rs=P2^3;//1602液晶 端口
sbit en=P2^1;
sbit rw=P2^2;
sbit DQ=P2^0;//ds18b20 端口
sbit key1=P3^3; //按键定义
sbit key2=P3^2;
sbit key3=P3^1;
sbit key4=P3^0;
sbit feng=P1^4; //蜂鸣器控制端
uc code table[]= “20 - -“;
uc code table1[]=“ : : . c“;
uc shifenmiaoshi1shi2fen1fen2nianyuericountflagflag1;
uc abcdemnsnumnlingcount;
int t1t2;
float tt;
///////////////////**延时部分**////////////////////
void delay1(ui i) //us延时函数
{
while(i--);
}
void delay(ui z) //ms延时函数
{
ui xy;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
///////////////////**1602液晶**////////////////////
void write_1602(uc duc date)
{
rs=d; //d=0写命令 d=1写数据
P0=date;
delay(2);
en=1;
delay(2);
en=0;
}
void wadd_1602s(uc adduc date)//往lcd指定地址写两位数据
{
uc shige;
shi=date/10;
ge=date%10;
write_1602(0add);
write_1602(10x30+shi);
write_1602(10x30+ge);
}
void wadd_1602z(uc add1uc date1uc date2uc date3) // 指定地址写三位字符
{
write_1602(0add1);
write_1602(1date1);
write_1602(1date2);
write_1602(1date3);
}
void init_1602() //1602初始化
{
uc a;
rw=0;
write_1602(00x38);
write_1602(00x0c);
write_1602(00x06);
write_1602(00x01);
for(a=0;a<=7;a++)
{
write_1602(1table[a]);
}
write_1602(00x80+0x40);
for(a=0;a<=16;a++)
{
write_1602(1table1[a]);
}
}
////////////////////**ds1302时钟**////////////////////
void write_1302(uc date) //写数据
{
ui ik;
k=date;
for(i=0;i<8;i++)
{
io=k&0x01;
clk=1;
clk=0;
k=k>>1;
}
}
uc read_1302() //读数据
{
ui ik;
for(i=0;i<8;i++)
{
k=k>>1;
if(io==1)k=k+0x80;
clk=1;
clk=0;
}
return k;
}
void wadd_1302(uc adduc date) //指定地址写数据
{
rst=0;
clk=0;
rst=1;
write_1302(add);
write_1302(date);
clk=1;
rst=0;
}
uc radd_1302(uc add) //指定地址读数据
{
uc d;
rst=0;
clk=0;
rst=1;
write_1302(add|0x01);
d=read_1302();
clk=1;
rst=0;
return d;
}
////////////////////**18b20测温**//////////////////
void init_ds18b20() //18b20初始化函数
{
uc x=0;
DQ = 1; //DQ复位
delay1(8); //稍做延时
DQ = 0; //单片机将DQ拉低
delay1(80); //精确延时 大于 480us
DQ = 1; //拉高总线
delay1(10);
x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
delay1(5);
}
uc ReadOneChar() //读一个字节
{
uc i;
uc dat=0;
for (i=8;i>0;i--)
{
DQ = 0; // 给脉冲信号
dat>>=1;
DQ = 1; // 给脉冲信号
if(DQ)
dat|=0x80;
delay1(5);
}
return(dat);
}
void WriteOneChar(uc dat)//写一个字节
{
uc i;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
delay1(5);
DQ = 1;
dat>>=1;
}
delay1(5);
}
void ReadTem()//读取温度
{
init_ds18b20();
WriteOneCha
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 121710 2010-01-25 22:51 DS1302+1602液晶+测温(多组闹铃)\ds1302+测温+液晶显示.DSN
文件 0 2010-01-25 00:02 DS1302+1602液晶+测温(多组闹铃)\keil\1302_Uv2.Bak
文件 29968 2010-01-28 01:04 DS1302+1602液晶+测温(多组闹铃)\keil\1302
文件 14780 2010-01-28 01:04 DS1302+1602液晶+测温(多组闹铃)\keil\1302.c
文件 9942 2010-01-28 01:04 DS1302+1602液晶+测温(多组闹铃)\keil\1302.hex
文件 31220 2010-01-28 01:04 DS1302+1602液晶+测温(多组闹铃)\keil\1302.LST
文件 40938 2010-01-28 01:04 DS1302+1602液晶+测温(多组闹铃)\keil\1302.M51
文件 34899 2010-01-28 01:04 DS1302+1602液晶+测温(多组闹铃)\keil\1302.OBJ
文件 1005 2010-01-28 01:04 DS1302+1602液晶+测温(多组闹铃)\keil\1302.Opt
文件 508 2010-01-28 01:04 DS1302+1602液晶+测温(多组闹铃)\keil\1302.plg
文件 1979 2010-01-25 00:09 DS1302+1602液晶+测温(多组闹铃)\keil\1302.Uv2
文件 1015 2010-01-25 00:09 DS1302+1602液晶+测温(多组闹铃)\keil\1302_Opt.Bak
目录 0 2010-01-28 01:06 DS1302+1602液晶+测温(多组闹铃)\keil
目录 0 2010-01-28 01:06 DS1302+1602液晶+测温(多组闹铃)
----------- --------- ---------- ----- ----
287964 14
- 上一篇:JPG图片伪装器,任意文件伪装为图片
- 下一篇:正弦波信号发生器的设计
评论
共有 条评论