ds1302时钟芯片程序
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P3^3;
sbit rw=P3^4;
sbit en=P3^5;
sbit bflag=P2^7;
sbit reset=P3^0;
sbit sclk=P3^1;
sbit io=P3^2;
uchar str1[]="date of today is:";
//uchar str2[]="i will kill you lj";
uchar init[]={0x00,0x00,0x21,0x21,0x10,0x01,0x04};//秒,分,时,日,月,星期,年
//
void delay()
{
uchar j;
for(j=250;j>0;j--);
}
//-------------------液晶模块-----------------//
void en_toggle()
{
en=0;
//_nop_();
delay();
en=1;
delay();
// _nop_();
en=0;
} //注意必须加延时,否则会出问题的
void is_ready()
{
P2=0x00;//设置为输入口
rs=0;
rw=1;
en=1;
while(bflag);
en=0;
}
void write_cmd(uchar cmd)
{
is_ready();
rs=0;
rw=0;
P2=cmd;
en_toggle();
}
void write_data(uchar indata)
{
is_ready();
rs=1;
rw=0;
P2=indata;
en_toggle();
_nop_();
}
void write_str(uchar addr,uchar *p)
{
uchar i;
write_cmd(addr);
while(p[i]!='\0')
{write_data(p[i]);
i++;
}
}
void write_position(uchar row,uchar col)
{uchar p;
if(row==1)
{p=0x80+col-1;
write_cmd(p);}
else
{p=0xc0+col-1;
write_cmd(p);
}
}
void init_lcd()
{
write_cmd(0x38);
write_cmd(0x0c);
write_cmd(0x06);
write_cmd(0x01);//清屏幕
delay();
}
//------------液晶模块结束---------------------
//-----------ds1302模块开始-------------------
//注意点:sclk的上升沿输入数据,sclk的下跳沿输出数据
//读写时都是从第0位开始
void write_byte(uchar inbyte)
{
uchar i;
for(i=8;i>0;i--)
{
sclk=0;
if(inbyte&0x01)
io=1;
else
io=0;
sclk=1;
_nop_();
inbyte=inbyte>>1;
}
}
uchar read_byte() //sclk的下跳沿读数据
{
uchar i,temp=0;
io=1; //设置为输入口
for(i=7;i>0;i--)
{
sclk=0;
if(io==1)
temp=temp|0x80;
else
temp=temp&0x7f;
sclk=1;
temp=temp>>1;
}
//sclk=0;
return (temp);
}
//----------往ds1302的某个地址写入数据-------------
void write_ds1302(uchar cmd,uchar indata)
{
reset=1;
write_byte(cmd);
write_byte(indata);
reset=0;
sclk=0;
}
//----------读ds1302某地址的的数据-----------------
uchar read_ds1302(uchar addr)
{
uchar backdata;
reset=1;
write_byte(addr);
backdata=read_byte();//先写地址,然后读数据
reset=0;
//sclk=0;
return (backdata);
}
//------------设置初始时间-------------------
void set_ds1302(uchar addr,uchar *p,uchar n)//写入n个数据
{
write_ds1302(0x8e,0x00);//写控制字,允许写操作
for(;n>0;n--)
{
write_ds1302(addr,*p);
p++;
addr=addr+2;
}
write_ds1302(0x8e,0x80);//写保护,不允许写
}
//----------- 读取当前时间-------------------
void read_nowtime(uchar addr,uchar *p,uchar n)
{
for(;n>0;n--)
{
*p=read_ds1302(addr);
p+
你可能喜欢
- 单片机数字温度计设计
- 数字温度计课程设计 单片机
- 单片机电子时钟课程设计报告
- 单片机数字电压表设计
- ds1302中文资料
- LCD1602
- LCD12864
- DS18B20中文资料
- 单片机课程设计—四位数字温度计的设计22页
- 基于单片机的数字温度计设计24页
- 基于单片机的数字温度计课程设计41页
- 基于单片机的数字温度计的设计毕设论文17页
- 基于MSP430F427单片机高精度智能语音数字温度计的设计4页
- 基于AT89S2051单片机的单总线数字温度计设计3页
- 单片机课程设计—四位数字温度计的设计22页
- 基于单片机的数字温度计课程设计41页
- 基于单片机的数字温度计课程设计23页
- 单片机课程设计 基于数字温度传感器的数字温度计报告32页
- 基于单片机的数字显示温度计课程设计13页
- 单片机原理及系统课程设计报告:基于89C51单片机的数字温度计设计16页
- 单片机电子时钟课程设计设计报告26页
- 单片机课程设计报告--电子时钟11页
- 《单片机原理及应用》电子时钟课程设计报告11页
- 单片机电子时钟课程设计报告--牛宏亮12页
- 单片机电子时钟课程设计实验报告9页
- 基于单片机AT89C51控制的电子时钟课程设计报告6页
- 黄楠楠单片机课程设计数字电压表12页
- 用单片机设计数字电压表43页
- 基于单片机的数字电压表的设计33页
- 数字电压表的单片机设计(C语言编程)20页
- 单片机原理课设任务书-简易数字电压表的设计1页
- 基于51单片机的数字电压表仿真设计3页
- ds1302中文资料3页
- ds1302中文资料14页
- ds1302中文资料2页
- ds1302中文资料4页
- ds1302中文资料[1]14页
- ds1302中文资料10页
- LCD1602数据手册5页
- LCD1602中文资料6页
- LCD 1602,12864 编程与PROTEUS仿真11页
- LCD1602汉字显示讲解7页
- LCD1602液晶显示实验15页
- LCD1602介绍13页
- 单片机外围存储及LCD1286440页
- LCD 1602,12864 编程与PROTEUS仿真11页
- LCD12864绘图之KS0108(4)6页
- LCD12864绘图之KS0108(3)6页
- LCD12864绘图之KS0108(2)7页
- LCD12864绘图之KS0108(1)1页
- DS18B20中文资料15页
- 时钟芯片DS18B20中文资料4页
- DS18B20中文资料9页
- DS18B20中文全套资料,木有时序啊13页
- DS18B20中文资料22页
- DS18B20 中文资料13页


