这个实验利用DS1302做一个实时时钟.详情见附件
平台:FDR51 开发板
主代码:
#include <reg52.h>
#include "ds1302.h"
#include "key.h"
#define LEDPORT P0
/*-------------数码管显示函数--------------------
参数:number 要显示的数字
参数:pos 要显示的位置(从左到右为1--4)
返回值:无
------------------------------------------------*/
void display(unsigned char number,unsigned char pos)//数码管显示函数
{
unsigned char temp; //临时变量
if(number<10 && pos<5 && pos>0) //确定数据合法
{
temp=(number<<4)&0xf0; //获得要显示的数据
temp+=1<<(pos-1); //送位置位
LEDPORT=temp; ////送显示数据,开始显示
}
}
void display_hour_and_minute(unsigned char count,unsigned char i)
{
if(i==0)
{
if(count>=10)
{
display(count/10,1);
delayms(1);
display(count%10,2);
}
else display(count%10,1);
}
else
{
if(count>=10)
{
display(count/10,3);
delayms(1);
display(count%10,4);
}
else display(count%10,4);
}
delayms(1);
}
void display_year_and_weak(unsigned char count,unsigned char i)
{
if(i==0)
{
display(2,1);
delayms(1);
display(0,2);
delayms(1);
display(count/10,3);
delayms(1);
}
display(count%10,4);
delayms(1);
}
void main()
{
unsigned int j="2000";
write_1302_time(times);
KEY=1;
while(1)
{
read_1302_time(times);
keyread();
while(KEY==1 && j--) //显示分秒
{
display_hour_and_minute(times[0],1);
display_hour_and_minute(times[1],0);
}
while(KEY==2 && j--) //显示星期和小时
{
display_hour_and_minute(times[2],1);
display_hour_and_minute(times[5],0);
}
while(KEY==3 && j--) //显示月和日
{
display_hour_and_minute(times[3],1);
display_hour_and_minute(times[4],0);
}
while(KEY==4 && j--) //显示年号
{
display_year_and_weak(times[6],0);
delayms(1);
}
j=50;
}
}
用户183085 2009-5-19 10:29