获取更多资源,请关注微信公众号:嵌入式基地

获取项目资源:公众号后台回复:单片机仿真

基于Proteus学习单片机系列(一)——点亮LED

基于Proteus学习单片机系列(二)——驱动数码管

基于Proteus学习单片机系列(三)——按键

基于Proteus学习单片机系列(四)——中断

基于Proteus学习单片机系列(五)——定时器实现电子表

基于Proteus学习单片机系列(六)——I2C总线AT24C04

基于Proteus学习单片机系列(七)——实时时钟DS1302

基于Proteus学习单片机系列(八)——AD转换及其应用--TLC549

基于Proteus学习单片机系列(九)——DA转换及其应用--TLC5615

基于Proteus学习单片机系列(十)——LCD1602

基于Proteus学习单片机系列(十一)——LCD12864

项目下载

点击下载

1.电路图

2.程序

只在这里贴出主函数,其余的请点击上面(点击下载)进行下载,实在太麻烦。

主函数

#include<reg51.h>
#include<ds1302.c>unsigned char flash;
unsigned char cp1,cp2,cp3;                                                  //定义变量
sbit P1_0 = P1^0;
code unsigned char seven_seg[13] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff,0x7f};         //数字0~9的显示方法
code unsigned char scan[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};        //位选数组
bit conv;void send(unsigned int x,unsigned int y)                                   //x表示位选,y表示段选
{P1_0 = 0;P1_0 = 1;P0 = scan[x];P1_0 = 0;                                                               //P1.0端口高电平允许存储,P1.0为低电平保存存储P0 = seven_seg[y];
}
void time0_isr(void) interrupt 1                                            //利用中断对数码管上显示的数据进行刷新
{TH0 = (65536 - 2000) / 256;                                              //TH0重置函数TL0 = (65536 - 2000) % 256;                                              //TL0重置函数cp1++;if(cp1 >= 250)                                                           //0.5秒{cp1 = 0;flash = ~flash;                                                        //产生闪烁变量cp2++;if(cp2 >= 5){  cp2 = 0;conv = ~conv;                                              //产生交替显示变量  }   }if(conv == 1){P0 = 0xff;switch(cp3){case 0: send(0,sec % 10);break;                             //显示秒个位case 1: send(1,sec / 10);break;                              //显示秒十位case 2:  if(flash)send(2,11);                                //不显示else send(2,10);break;                             //显示 -case 3: send(3,min % 10);break;                               //显示分个位case 4:  send(4,min / 10);break;                             //显示分十位case 5:  if(flash)send(5,11);                                //不显示else send(5,10);break;                             //显示 -case 6:   send(6,hour % 10);break;                            //显示小时个位case 7: send(7,hour / 10);break;                            //显示小时十位        }}else{ P0 = 0xff;                                                     //消隐switch(cp3){case 0: send(0,date % 10);break;                                //显示天个位case 1:  send(1,date / 10);break;                                //显示天十位case 2:  send(2,month % 10);break;                               //显示月个位,case 3: send(3,month / 10);break;                               //显示月十位case 4:  send(4,year % 10);break;                                //显示年个位case 5:  send(5,year / 10);break;                                //显示年十位case 6:  send(6,0);break;                                        //显示0case 7:    send(7,2);break;                                        //显示2}}  cp3++;if(cp3 >= 8)cp3 = 0;
}
void timer0_init(void)                                                      //Timer0初始化
{                                                                           //方式一TMOD = 0x01;                                                          //TH0 预置,65536十六进制低8位。TH0 = (65536 - 2000) / 256;                                               //TL0 预置,65536十六进制低8位。TL0 = (65536 - 2000) % 256;TR0 = 1;                                                             //定时器T0开ET0 = 1;                                                               //溢出中断控制位T0开EA  = 1;                                                               //总开关打开
}
void main(void)
{unsigned char i = 46;                                         //举例,比如要调整时间,分钟设定为46分i = DEC_BCD_conv(i);timer0_init();write_ds1302_add_dat(0x8e,0x00);                              //写操作,可以对DS1302调整write_ds1302_add_dat(0x80,0x30);                                //写秒,30秒write_ds1302_add_dat(0x82,i);                                    //写分,46分write_ds1302_add_dat(0x84,0x12);                             //写时,12时write_ds1302_add_dat(0x86,0x28);                             //写日,28日write_ds1302_add_dat(0x88,0x05);                             //写月,5月 write_ds1302_add_dat(0x8a,0x03);                             //写星期,星期三write_ds1302_add_dat(0x8c,0x12);                                //写年,(20)12年write_ds1302_add_dat(0x8e,0x80);                               //写保护while(1){get_ds1302_time();}
}

基于Proteus学习单片机系列(七)——实时时钟DS1302相关推荐

  1. 基于Proteus学习单片机系列(二)——驱动数码管

    获取更多资源,请关注微信公众号:嵌入式基地 获取项目资源:公众号后台回复:单片机仿真 基于Proteus学习单片机系列(一)--点亮LED 基于Proteus学习单片机系列(二)--驱动数码管 基于P ...

  2. 基于Proteus学习单片机系列(六)——I2C总线AT24C04

    获取更多资源,请关注微信公众号:嵌入式基地 获取项目资源:公众号后台回复:单片机仿真 基于Proteus学习单片机系列(一)--点亮LED 基于Proteus学习单片机系列(二)--驱动数码管 基于P ...

  3. 基于Proteus学习单片机系列(七)——AD转换及其应用--ADC0832

    获取更多资源,请关注微信公众号:嵌入式基地 获取项目资源:公众号后台回复:单片机仿真 项目下载 点击下载 1.电路图 2.程序 只在这里贴出主函数,其余的请点击上面(点击下载)进行下载,实在太麻烦. ...

  4. 【STC单片机学习】第十四课:SPI通信-实时时钟DS1302

    [朱老师课程总结 侵删] 第一部分.章节目录 1.14.1.RTC有关的背景知识 1.14.2.原理图和接线 1.14.3.数据手册带读 1.14.4.时序图的读法1​ 1.14.5.编程实践1 1. ...

  5. 你今天怎么这么好看——基于深度学习的大型现场实时美颜

    Photo from BoredPanda 美颜是当下直播甚至是所有形式对外展示的一个必备条件.手机端的美颜就像私人化妆师,能够帮助我们实现各种心仪的效果. 而大型娱乐节目一般都是提前进行录制,然后进 ...

  6. 实时时钟DS1302实验

    实时时钟DS1302实验 实验现象 通过DS1302的读取获取年,月,日,星期,时,分,秒的值,然后串口显示在PC上 通过4个按键设定当前的时间 按键1(设置):按一下进入设置状态,在按下退出设置状态 ...

  7. Arduino 实时时钟DS1302模块

    Arduino 实时时钟DS1302模块 DS1302模块 开发板选择Arduino uno板子 所使用的库:国内镜像地址:https://codechina.csdn.net/mirrors/msp ...

  8. STM32基于固件库学习笔记(11)RTC实时时钟

    实时时钟(RTC) 小容量产品是指闪存存储器容量在16K至32K字节之间的STM32F101xx.STM32F102xx和STM32F103xx微控制器. 中容量产品是指闪存存储器容量在64K至128 ...

  9. arduino uno r3单片机封装图_Arduino提高篇22—实时时钟DS1302

    关注.星标公众号,不错过精彩内容 编辑:Tony 来源:公众号TonyCode 很多电子爱好者都热衷制作电子时钟来练手,这些时钟会使用数码管.点阵屏.LCD液晶屏.OLED屏.TFT屏等显示模块,所使 ...

最新文章

  1. 混合app用百分比还是rem_一次搞懂前端所有CSS长度单位,px、em、rem、rpx、%....
  2. easy ui datagrid 中getSelections方法只能获取一行数据
  3. 韩流音乐爱好者的福音!SM娱乐牵手腾讯音乐
  4. 将JavaScript和VBScript添加到您的.NET Apps
  5. mysql 命令 字符集_MySQL的字符集操作命令总结
  6. 解析:如何在 ASP.NET 中下载文件
  7. Linux(centos)中rpm命令的运用
  8. 阿里笔试题:求两个子序列的最大连续子序列
  9. 大学心理学课本_大学心理学专业用的是什么教材 名字叫什么
  10. 基统计的方法对进行多因子的探索性数据分析
  11. 2022IEOC全国赛专业组获奖及晋级成绩公布 全球赛期待继续辉煌
  12. leetcode 39. Combination Sume (medium)
  13. android 魅族定位权限,魅族Flyme5.2的权限问题
  14. linux 内功修炼之一 cpu
  15. Excel 相同名称或ID的 内容 合并起来 同列不同内容剃加
  16. Centos7.2/3/4/5镜像(1511,1611,1708,1804),附Centos官网镜像,旧版全镜像链接及仓库下载地址
  17. 真正补肾黑芝麻秘传做法
  18. 数学四大思想八大方法_中考数学专题五,四种数学思想方法,第3个比较难掌握...
  19. PB EXCEL导入
  20. android自动化测试案例全过程详解,Robot Framework+adb实现Android设备自动化测试案例①——项目介绍...

热门文章

  1. 帝国Cms7.5后台getshell | (CVE-2018-18086)漏洞复现
  2. #GNS3,wireshark,CRT的安装
  3. LSF - 提交GUI应用到LSF无法运行,报错Failed to connect to socket /tmp/dbus-xxxxxxxxx: Connection refused
  4. 【医疗人工智能论文】使用深度强化学习的腹腔镜机器人辅助训练
  5. minecraft编程java_第一章 minecraft编程mod
  6. 旅游地图制作_手把手教你用旅游神器App:谷歌地图
  7. 可以播放音乐的微信小程序源码(仿Apple音乐)
  8. 大学生选课抢课如何提高选中概率
  9. 我对于外包开发的看法
  10. 聊聊ClickHouse中的低基数LowCardinality类型