硬件部分
基于51单片机、 ds1302时钟芯片、 ds18b20温度芯片、 以及1602液晶显示的 实时时间 和 实时温度显示 。同时可通过按键 设置 年、月、日、时、分、星期。并且可以设置闹钟 当闹钟时间到时 蜂鸣器持续发出 滴..声 同时led灯不停闪烁 且在一分钟内没有按指定停止按键 闹钟将自动停止 。。。














软件部分
#include
#define uchar unsigned char
#define uint unsigned int
sbit spk=P1^7;
sbit led=P1^5;
sbit DQ=P1^0;
sbit RS=P2^4;
sbit RW=P2^5;
sbit EN=P2^6;
sbit key1=P2^0;
sbit key2=P2^1;
sbit key3=P2^2;
sbit key4=P2^3;
sbit IO=P3^6;
sbit RST=P3^7;
sbit SCLK=P3^5;
uchar code table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
int nian,xing,yue,ri,shi,fen,miao;
uchar num,temp,c,d,time[7],a,b,aa,bb,ns,ng,ys,yg,rs,rg,ss,sg,fs,fg,ms,mg,flag;
/*******************1602************************/
void delay(int z)
{
int x,y;
for(x=z;x>0;x--)
for(y=100;y>0;y--);
}
void write_com(uchar com) //写命令
{
RS=0;
P0=com;
delay(5);
EN=1;
delay(5);
EN=0;
}
void write_data(uchar date) //写数据
{
RS=1;
P0=date;
delay(5);
EN=1;
delay(5);
EN=0;
}
void init() //初始化
{
RW=0;
EN=0;
write_com(0x38); //显示模式设置
write_com(0x0c); //开显示 不显示光标 不闪
write_com(0x06); //写一个字符 地址指针 光标 加一 整屏不移动
write_com(0x01); //显示清零
write_com(0x80 0x04);
write_data('2');
write_com(0x80 0x05);
write_data('0');
write_com(0x80 0x00);
write_data('c');
write_com(0x80 0x01);
write_data('a');
write_com(0x80 0x02);
write_data('i');
write_com(0x80 0x4e);
write_data(0xdf);
write_com(0x80 0x4f);
write_data('C');
write_com(0x80 0x4b);
write_data(0x2e); //显示"。"
}
/**************DS18B20****************/
void delay1(unsigned int t) //延时函数
{
while(t--);
}
void init1() //初始化
{
uchar n=0;
DQ=1; //DQ复位
delay1(8);
DQ=0; //主机将DQ拉低
delay1(80); //大于480us的延时
DQ=1;
delay1(5); //延时15~60us
n=DQ;
delay1(5); //若n=0初始成功 n=1初始失败(可设置返回值查看n是否为1)
}
void write_byte(uchar dat) //写入一个字节
{
uint i;
for(i=0;i<8;i )
{
DQ=0;
DQ=dat