永发信息网

求普中科技51单片机开发板的闹钟代码

答案:2  悬赏:20  手机版
解决时间 2021-04-28 17:12
求普中科技51单片机开发板的闹钟代码
最佳答案
有什么具体要求?
全部回答

#include
#include"ds1302.h"

//--定义使用的IO--//
#define GPIO_DIG P0
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
//--定义全局变量--//
unsigned char code DIG_CODE[17]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码
unsigned char DisplayData[8];
//用来存放要显示的8位数的值
//--声明全局变量--//
void DigDisplay();

void main()
{
Ds1302Init();
while(1)
{
Ds1302ReadTime();
DisplayData[0] = DIG_CODE[TIME[2]/16];//时
DisplayData[1] = DIG_CODE[TIME[2]&0x0f]; 
DisplayData[2] = 0x40;
DisplayData[3] = DIG_CODE[TIME[1]/16];//分
DisplayData[4] = DIG_CODE[TIME[1]&0x0f];
DisplayData[5] = 0x40;
DisplayData[6] = DIG_CODE[TIME[0]/16];//秒
DisplayData[7] = DIG_CODE[TIME[0]&0x0f];
DigDisplay();
}

}

void DigDisplay()
{
unsigned char i;
unsigned int j;
for(i=0;i<8;i++)
{
switch(i)  //位选,选择点亮的数码管,
{
case(0):
LSA=0;LSB=0;LSC=0; break;//显示第0位
case(1):
LSA=1;LSB=0;LSC=0; break;//显示第1位
case(2):
LSA=0;LSB=1;LSC=0; break;//显示第2位
case(3):
LSA=1;LSB=1;LSC=0; break;//显示第3位
case(4):
LSA=0;LSB=0;LSC=1; break;//显示第4位
case(5):
LSA=1;LSB=0;LSC=1; break;//显示第5位
case(6):
LSA=0;LSB=1;LSC=1; break;//显示第6位
case(7):
LSA=1;LSB=1;LSC=1; break;//显示第7位
}
GPIO_DIG=DisplayData[i];//发送段码
j=50; //扫描间隔时间设定
while(j--);
GPIO_DIG=0x00;//消隐
}
}
#include"ds1302.h"
//---DS1302写入和读取时分秒的地址命令---//
//---秒分时日月周年 最低位读写位;-------//
uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d}; 
uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};
//---DS1302时钟初始化2013年1月1日星期二12点00分00秒。---//
//---存储顺序是秒分时日月周年,存储格式是用BCD码---//
uchar TIME[7] = {0, 0, 0x12, 0x01, 0x01, 0x02, 0x13};

void Ds1302Write(uchar addr, uchar dat)
{
uchar n;
RST = 0;
_nop_();
SCLK = 0;//先将SCLK置低电平。
_nop_();
RST = 1; //然后将RST(CE)置高电平。
_nop_();
for (n=0; n<8; n++)//开始传送八位地址命令
{
DSIO = addr & 0x01;//数据从低位开始传送
addr >>= 1;
SCLK = 1;//数据在上升沿时,DS1302读取数据
_nop_();
SCLK = 0;
_nop_();
}
for (n=0; n<8; n++)//写入8位数据
{
DSIO = dat & 0x01;
dat >>= 1;
SCLK = 1;//数据在上升沿时,DS1302读取数据
_nop_();
SCLK = 0;
_nop_();
}
 
RST = 0;//传送数据结束
_nop_();
}

uchar Ds1302Read(uchar addr)
{
uchar n,dat,dat1;
RST = 0;
_nop_();
SCLK = 0;//先将SCLK置低电平。
_nop_();
RST = 1;//然后将RST(CE)置高电平。
_nop_();
for(n=0; n<8; n++)//开始传送八位地址命令
{
DSIO = addr & 0x01;//数据从低位开始传送
addr >>= 1;
SCLK = 1;//数据在上升沿时,DS1302读取数据
_nop_();
SCLK = 0;//DS1302下降沿时,放置数据
_nop_();
}
_nop_();
for(n=0; n<8; n++)//读取8位数据
{
dat1 = DSIO;//从最低位开始接收
dat = (dat>>1) | (dat1<<7);
SCLK = 1;
_nop_();
SCLK = 0;//DS1302下降沿时,放置数据
_nop_();
}
RST = 0;
_nop_(); //以下为DS1302复位的稳定时间,必须的。
SCLK = 1;
_nop_();
DSIO = 0;
_nop_();
DSIO = 1;
_nop_();
return dat;
}

void Ds1302Init()
{
uchar n;
Ds1302Write(0x8E,0x00); //禁止写保护,就是关闭写保护功能
for (n=0; n<7; n++)//写入7个字节的时钟信号:分秒时日月周年
{
Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]);
}
Ds1302Write(0x8E,0x80); //打开写保护功能
}

void Ds1302ReadTime()
{
uchar n;
for (n=0; n<7; n++)//读取7个字节的时钟信号:分秒时日月周年
{
TIME[n] = Ds1302Read(READ_RTC_ADDR[n]);
}
}

#ifndef __DS1302_H_
#define __DS1302_H_
//---包含头文件---//
#include
#include
//---重定义关键词---//
#ifndef uchar
#define uchar unsigned char
#endif
#ifndef uint 
#define uint unsigned int
#endif
//---定义ds1302使用的IO口---//
sbit DSIO=P3^4;
sbit RST=P3^5;
sbit SCLK=P3^6;
//---定义全局函数---//
void Ds1302Write(uchar addr, uchar dat);
uchar Ds1302Read(uchar addr);
void Ds1302Init();
void Ds1302ReadTime();
//---加入全局变量--//
extern uchar TIME[7]; //加入全局变量
#endif
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
配一付700度的隐形眼镜大概需要多少钱?需要
大海上有一艘很大的舰艇,本来的定员是六十人
联想S600 支持通讯拉黑名单么?
好的羊奶粉有哪些牌子,好喝的羊奶粉品牌有哪
这样子一个月能减20斤吗?
建行龙卡大学生信用卡没激活要扣年费吗?
为什么一开机就弹出很多删除过的东西?
天津灌汤包金星园丁店这个地址在什么地方,我
最爱的人做最对不起你的事,你会怎么样?
神鬼传奇工会护送任务怎么做?
那么是什么意思,实况中,什么叫“架空妖人”
坏蛋是怎样炼成的二,在哪里能下到全集???
我网卡 卡怎么办啊
什么时间抢的到车位啊?
孔雀庄园地址有知道的么?有点事想过去
推荐资讯
为什么我舔加空间网络音乐的时候,说是网络出
如何找回已经忘记密保问题密保邮箱的QQ号
玩穿越火线谁最厉害
鹿晗的粉丝应援口号,鹿晗的应援口号来几发!
培根语录友情,培根的名言
维利康工厂直营店我想知道这个在什么地方
今年高考录取分数线多少
求人物超美型,好看的动漫
米拉熊地址在哪,我要去那里办事
什么是约瑟夫环?要讲的简单易懂。
我国地理环境有哪些基本特征
关于《阿凡达》游戏PSP版可不可以联机对抗?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?