永发信息网

DS1302向单片机提供完整的一个时间信息要几个字节?

答案:4  悬赏:40  手机版
解决时间 2021-12-25 10:09
  • 提问者网友:心如荒岛囚我终老
  • 2021-12-25 05:22
DS1302的原理已经知道,但请问如果要向单片机类似AT89C52提供完整的一次时间信息(即从年到秒都要)需要几个字节?

望高手回答。
最佳答案
  • 五星知识达人网友:爱难随人意
  • 2021-12-25 05:53
你看看DataSheet。它的寄存器从 一个字节存一个内容。
那么 年 月 日 时分秒 需要6个字节的时间信息
全部回答
  • 1楼网友:低血压的长颈鹿
  • 2021-12-25 08:34
一楼说的是对的,应该是六个字节,传输一次,需要传输一个字节,这一个字节包含一个时间信息,可以是年,也可是秒,年的话不是4位,是两位,最大99,所以全部信息应该是6个字节的,一楼是对的。
  • 2楼网友:轮獄道
  • 2021-12-25 07:59
#include #define uchar unsigned char #define uint unsigned int #define keyboard p2 #define locationcs p1 #define dispseg p0 unsigned char code segcode[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x40}; // 共阴段码 unsigned char code location[] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f}; // 共阴位选码 uchar index = 0; // 显示缓冲区指针 uchar hour = 0; // 小时变量 uchar min = 0; // 分钟变量 uchar sec = 0; // 秒钟变量 uint timer = 0; // 中断次数计数变量 uchar dispbuf[] = {0, 0, 0x40, 0, 0, 0x40, 0, 0}; // 8个数码管对应的显示缓冲区,显示格式:时-分-秒 uchar keycode; // 按键码高位 uint delaykey; // 按键延时变量 void init(); void dispbufupdate(); void disposekeys(); void main(void) { init(); // 初始化 while(1) { if(keycode != 0) // 如果有按键码就处理按键 { disposekeys(); keycode = 0; // 处理完按键码清零 } } } void dispbufupdate() { dispbuf[0] = segcode[sec % 10]; // 秒个位 dispbuf[1] = segcode[sec / 10]; // 秒十位 dispbuf[3] = segcode[min % 10]; dispbuf[4] = segcode[min / 10]; dispbuf[6] = segcode[hour % 10]; dispbuf[7] = segcode[hour / 10]; } void disposekeys() { switch(keycode) { case 0x77: hour++; if(hour == 24)hour = 0; break; case 0x7b: if(hour == 0) hour = 24; hour--; break; case 0xb7: min++; if(min == 60) min = 0; break; case 0xbb: if(min == 0) min = 60; min--; break; default: break; } delaykey = 300; // 延时变量赋值,300次定时中断后(300/1200 = 0.25秒)如果不松键则会连续产生键值,时间变量会连续加或连续减,直到松键 } void init() { tmod = 0x01; // 定义定时器0为16位定时器 th0 = -3; // 11059200 = 12*256*3*1200,晶振12分频后是:921600机器周期/秒, // 设置定时器每3*256个机器周期中断1次,中断1200次就是一秒钟。 // tl0因初值为0,加到256=0,相当于自动重装了,所以不用定义了,既节约了时间又走时准确。 et0 = 1; // 允许t0中断 ea = 1; // 开总中断 tr0 = 1; // 启动t0 dispbufupdate(); // 显示初始值 } void intt0() interrupt 1 { th0 = -3; // 重装定时器初值 locationcs = 0xff; // 清位选消隐 dispseg = dispbuf[index]; // 输出显示内容 locationcs = location[index++]; // 选择显示位置 index &= 7; // 等效于if(index == 8)index = 0; 循环指向8个显示位置 if(delaykey == 0) // 上次中断没检测到按键则需扫描按键 { keyboard = 0x0f; if(keyboard != 0x0f) // 若有按键发生,则 keyboard 低4位不全为1 { delaykey = 6; // 设置按键消颤延时时间,6/1200 = 5毫秒 } } else { delaykey--; // 延时时间未到,延时变量减一 if(delaykey == 0) // 按键延时时间到,可以取键值了 { keyboard = 0x0f; if(keyboard != 0x0f) // 若延时后仍检测到按键,则为有效按键 { keycode = keyboard; // 取按键“行”地址 keyboard = 0xf0; // 取按键“列”地址 keycode |= keyboard;// 按键“行”“列”地址相或 = 有效键值 } } } timer++; // 中断次数计数 if(timer == 1200) // 1200次为1秒 { timer = 0; sec++; if(sec == 60) // 时间进位处理 { min++; sec = 0; if(min == 60) { hour++; min = 0; if(hour == 24) { hour = 0; } } } dispbufupdate(); } }
  • 3楼网友:十鸦
  • 2021-12-25 06:45
年月日时分秒每个2字节 星期1字节 总共13字节
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯