时钟芯片DS1302程序案例
/*
该程序主要实现如下的功能:
从DS1302的秒寄存器中,读出秒的数值;
将秒的数值用两个数码管显示出来。
*/
#include
#define uchar unsigned char
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbit RST=P1^2;
sbit DATA=P1^1;
sbit SCLK=P1^0;
//延时n us函数
void Delayus(uchar n)
{
uchar i;
for(i=0;i { ; } } //往DS1302写入数据 void WriteDs1302(uchar dat) { uchar i; SCLK=0; Delayus(2); for(i=0;i<8;i++) { DATA=dat&0x01; Delayus(2); SCLK=1; Delayus(2); SCLK=0; dat>>=1; Delayus(2); } } // 往DS1302中写入命令及数据 void WriteSetDs1302(uchar cmd,uchar dat) { RST=0; SCLK=0; RST=1; Delayus(2); WriteDs1302(cmd); WriteDs1302(dat); SCLK=1; RST=0; } //从DS1302中读出一个字节 uchar ReadDs1302() { uchar dat,i; Delayus(2); //SCLK=1; Delayus(2); for(i=0;i<8;i++) { dat>>=1; if(DATA==1) { dat|=0x80; } SCLK=1; Delayus(2); SCLK=0; Delayus(2); } return dat; } //从DS1302的特定的寄存器中,读出数据 uchar ReadSetDs1302(uchar cmd) { uchar dat; RST=0; SCLK=0; RST=1; WriteDs1302(cmd); dat=ReadDs1302(); SCLK=1; RST=0; return dat; } //显示函数 void Dispaly(uchar dat) { P0=table[dat]; } //DS1302初始化函数 void Ds1302Init() { WriteSetDs1302(0x8e,0x00);//去除写保护 WriteSetDs1302(0x80,0x05);//往秒寄存器中写入数据 WriteSetDs1302(0x8e,0x80);//开启写保护 } //1ms的延迟函数 void delay1ms() { unsigned char i,j; for(i=0;i<10;i++) for(j=0;j<33;j++) ; } // n ms 的延时函数 void Delayms(uchar n) { uchar i; for(i=0;i { delay1ms(); } } //主函数 void main() { uchar sec,num1,num2; Ds1302Init(); P2=0Xfc; while(1) { sec=ReadSetDs1302(0x81); //从DS1302的秒寄存器中读出秒值 num1=(sec&0x70)>>4; //分离出秒值的十位数 num2=sec&0x0f; //分离出秒值的个位数 P2=0xfd; Dispaly(num1); Delayms(5); P2=0xfe; Dispaly(num2); Delayms(5); } } 同理,可读出分、时,月、年等时间信息,并显示出来。
时钟芯片DS1302程序案 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)