51单片机DS1302数字时钟
时间:2019-03-19
本文章向大家介绍51单片机DS1302数字时钟,主要包括51单片机DS1302数字时钟使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit RST = P1^0;
sbit IO = P1^1;
sbit SCLK = P1^2;
sbit HC595_SER = P2^7; //b 8 d c e e f 8 f e
sbit HC595_RCLK = P2^5; //11 8 13 12 14 14 16 8 16 14
sbit HC595_SRCLK = P2^6; //1011 1000 1101 1100 1110 1110 1111 1000 1111 1110
//unsigned char code led_dian[]={0xbF,0x86,0xdB,0xcF,0xe6,0xeD,0xfD,0x87,0xfF,0xeF};
unsigned char code led_duan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsigned char hour,hour1,hour2;
unsigned char min,min1,min2;
unsigned char sec,sec1,sec2;
uchar code digital[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
void Delay_Ms(uchar q)
{
uchar p;
while(q--)
{
for(p=0;p<113;p++);
}
}
//数据发送子程序
void send_595(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
if(dat&0x80)
HC595_SER = 1;
else
HC595_SER = 0;
HC595_SRCLK = 0;
HC595_SRCLK = 1;
dat = dat<<1;
}
}
//
void write_byte(uchar date)
{
uchar i;
SCLK = 0;
for(i=0;i<8;i++)
{
SCLK = 0;
IO = date & 0x01;
SCLK = 1;
date >>= 1;
}
}
//
void write_ds1302(uchar addr,uchar date)
{
uchar num;
RST = 0;
SCLK = 0;
RST = 1;
write_byte(addr);
num = (date/10<<4)|(date%10);
write_byte(num);
RST = 0;
SCLK = 1;
}
//
uchar read_byte()
{
uchar i;
uchar dat = 0x00;
for(i=0;i<8;i++)
{
SCLK = 0;
dat >>= 1;
if(IO)
{
dat |= 0X80;
}
SCLK = 1;
SCLK = 0;
}
return dat;
}
//
uchar read_ds1302(uchar addr)
{
uchar dat;
uchar dat1;
uchar dat2;
RST = 0;
SCLK = 0;
RST = 1;
write_byte(addr);
dat = read_byte();
RST = 0;
SCLK = 1;
dat1 = dat/16;
dat2 = dat%16;
dat = dat1*10+dat2; //转换为10进制
return dat;
}
//
void init_ds1302() //偶数
{
write_ds1302(0x8e,0x00);
write_ds1302(0x84,23); //时
write_ds1302(0x82,59); //分
write_ds1302(0x80,50); //秒
write_ds1302(0x8e,0x80);
}
//
void get_time() //奇数
{
write_ds1302(0x8e,0x00);
hour = read_ds1302(0x85); //时
min = read_ds1302(0x83); //分
sec = read_ds1302(0x81); //秒
write_ds1302(0x8e,0x80);
}
void main()
{
init_ds1302();
Delay_Ms(5);
while(1)
{
get_time();
hour1 = hour/10;
hour2 = hour%10;
min1 = min/10;
min2 = min%10;
sec1 = sec/10;
sec2 = sec%10;
send_595(0xfe);
send_595(led_duan[hour1]);
HC595_RCLK = 0;
HC595_RCLK = 1;
send_595(0xfd);
send_595(led_duan[hour2]);
HC595_RCLK = 0;
HC595_RCLK = 1;
send_595(0xfb);
send_595(0x40);
HC595_RCLK = 0;
HC595_RCLK = 1;
send_595(0xf7);
send_595(led_duan[min1]);
HC595_RCLK = 0;
HC595_RCLK = 1;
send_595(0xef);
send_595(led_duan[min2]);
HC595_RCLK = 0;
HC595_RCLK = 1;
send_595(0xdf);
send_595(0x40);
HC595_RCLK = 0;
HC595_RCLK = 1;
send_595(0xbf);
send_595(led_duan[sec1]);
HC595_RCLK = 0;
HC595_RCLK = 1;
send_595(0x7f);
send_595(led_duan[sec2]);
HC595_RCLK = 0;
HC595_RCLK = 1;
}
}
- zabbix中配置dg的监控(r6笔记第62天)
- Apache ActiveMQ 远程代码执行漏洞 (CVE-2016-3088)分析
- mysql5.5与mysq 5.6中禁用innodb引擎的方法
- 缓慢的update语句性能分析(r6笔记第61天)
- 一个dg警告发现的硬件问题 (r6笔记第60天)
- mysql几种存储引擎介绍
- Java基础-21(02)总结字符流,IO流编码问题,实用案例必做一遍
- DeDeCMS v5.7 密码修改漏洞分析
- Java基础-20(01)总结,递归,IO流
- 一个Oracle bug的手工修复(r6笔记第59天)
- 由drop datafile导致的oracle bug(r6笔记第56天)
- Java中static关键字的作用
- Java基础-20(02)总结,递归,IO流
- Hive四种数据导入方式
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 详解 mysql int 类型的长度值问题
- 常见排序算法及golang 实现
- CentOS 8 安装Git及基本配置
- 创建远程仓库,如何将本地项目上传到GitLab
- mysql索引原理,看这篇就够啦
- TypeScript 设计模式之抽象工厂
- vim插件的安装(NERDTree)
- php7的zval相关介绍
- Zend_string与写时复制
- php的引用类型底层解析
- Roslyn 解决 dotnet core 应用进程间引用找不到 runtimeconfig 依赖文件
- dotnet 在 UOS 国产系统上安装 dotnet sdk 的方法
- 清空Redis集群所有节点的数据工具
- php数组hashtable的巧妙设计
- php运行生命周期--模块初始化php_module_startup