找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 12709|回复: 37
打印 上一主题 下一主题
收起左侧

新人来几张ds1302+c51 4位数码管时钟仿真图片

  [复制链接]
跳转到指定楼层
楼主


完整程序源码和仿真文件在5楼下载.

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏9 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2014-11-26 12:26 来自手机 | 只看该作者
有程序吗
回复

使用道具 举报

板凳
ID:69466 发表于 2014-11-26 12:32 | 只看该作者
程序呀!
回复

使用道具 举报

地板
ID:65179 发表于 2014-11-27 07:50 | 只看该作者
等等,我有时间把程序发上来
回复

使用道具 举报

5#
ID:65179 发表于 2014-11-28 15:46 | 只看该作者
ds1302 c52 4位数码管时钟年月日周可调 proteus仿真.rar (87.45 KB, 下载次数: 241)

  1. #include <at89x52.h>
  2. #include <DS1302.h>
  3. #define uchar unsigned char
  4. /********************************************************/
  5. unsigned char code shumg[]={
  6. 0xc0,0xf9,0xa4,0xb0,
  7. 0x99,0x92,0x82,0xf8,
  8. 0x80,0x90,0xff};
  9. /********************************************************/
  10. sbit led1=P3^4;                                   //时间指示灯
  11. sbit led2=P3^5;                                   //年月指示灯
  12. sbit led3=P3^7;                                   //日周指示灯
  13. sbit led=P1^7;                                   //冒号闪烁
  14. char miao_num;                                   //冒号标志
  15. /********************************************************/
  16. unsigned char Time[]={0,0,0,0};//用来储存,时间
  17. unsigned char Dime[]={0,0,0,0};//用来储存,年月
  18. unsigned char Bime[]={0,0,0,0};//用来储存,日期
  19. unsigned char flag;                       //键盘入口
  20. /********************************************************/
  21. SYSTEMTIME  time1;   
  22. /********************************************************/
  23. void keyscan();                       //按键扫描程序
  24. void mao_hao();                                         //冒号声明
  25. /********************************************************/
  26. void delay(unsigned char i)      //延时子程序  
  27. {
  28.   unsigned char j;
  29.   while((i--)!=0)
  30.   {
  31.     for(j=123;j>0;j--);
  32.   }
  33. }
  34. /********************************************************/
  35. void t0_init()                        //定时50ms一个中断
  36. {
  37.   TMOD=0x11;                                                  //总中断初始化
  38.   TH0=0x3c;                                          //定时50ms一个中断
  39.   TL0=0xb0;                                          //定时50ms一个中断
  40.   EA=1;                                                                  //开启总中断
  41.   ET0=1;                                                       
  42.   TR0=1;                                                          //开启定时器0
  43. }
  44. /********************************************************/
  45. unsigned char button_time(n,x,y)        //时钟调整子程序
  46. unsigned char n,x,y;
  47. {
  48. if(P1_5==0)                                                        //加
  49.   {
  50.   delay(50);
  51. if(P1_5==0)
  52. {
  53. n++;
  54. if(n==x)
  55.   n=0;
  56. while(P1_5==0);
  57.    }
  58. }
  59. /********************************************************/
  60. if(P1_6==0)                                                //减
  61.     {
  62.    delay(50);
  63. if(P1_6==0)
  64.     {
  65. if(n==0)
  66.    n=y;
  67. else
  68.     n--;                                               
  69.   while(P1_6==0);
  70.     }
  71. }
  72. return n;                                                   //函数返回
  73. }
  74. /********************************************************/
  75. void display(shi10,shi1,fen10,fen1)//显示子程序
  76. {
  77.   P2=0xfe;
  78.   P0=shumg[shi10];   //显示时的十位
  79.   delay(1);                        //延时
  80.   P0=0xff;                        //消隐
  81.   P2=0xff;                         //消隐

  82.   P2=0xfd;
  83.   P0=shumg[shi1];        //显示时的个位
  84.   delay(1);                        //延时
  85.   P2=0xff;                        //消隐
  86.   P0=0xff;                        //消隐                                                         
  87.   
  88.   P2=0xfb;
  89.   P0=shumg[fen10];  //显示分的十位
  90.   delay(1);                        //延时
  91.   P2=0xff;                        //消隐
  92.   P0=0xff;                        //消隐
  93.   
  94.   P2=0xf7;
  95.   P0=shumg[fen1];        //显示分的个位
  96.   delay(1);                        //延时
  97.   P2=0xff;                        //消隐
  98.   P0=0xff;                    //消隐
  99. }
  100. /********************************************************/
  101. void main()                                                        //主程序
  102. {  
  103.    Initial_DS1302();                                 //初始化DS1302这个时钟芯片,   
  104.    t0_init();                                                 //中断初始化
  105.    while(1)                                                         //大循环   
  106.    {                                                                 
  107.    mao_hao();                                                 //冒号初始化
  108.           keyscan();                                         //键盘初始化

  109.   DS1302_GetTime(&time1);                       //读取时间参数            
  110.   
  111.   Bime[3]=(time1.Week)%10;                   //把时的个位数据存入Bime[3]
  112.   Bime[2]=(time1.Week)/10;                         //把时的个位数据存入Bime[2]
  113.   Bime[1]=(time1.Day)%10;                       //把时的个位数据存入Bime[1]
  114.   Bime[0]=(time1.Day)/10;                     //把时的个位数据存入Bime[0]
  115.   
  116.   Dime[3]=(time1.Month)%10;                   //把时的个位数据存入Dime[3]
  117.   Dime[2]=(time1.Month)/10;                         //把时的个位数据存入Dime[2]
  118.   Dime[1]=(time1.Year)%10;                   //把时的个位数据存入Dime[1]
  119.   Dime[0]=(time1.Year)/10;                         //把时的个位数据存入Dime[0]
  120.   
  121.   Time[3]=(time1.Minute)%10;                 //把分的个位数据存入Time[3]
  122.   Time[2]=(time1.Minute)/10;                 //把分的十位数据存入Time[2]
  123.   Time[1]=(time1.Hour)%10;                   //把时的个位数据存入Time[1]
  124.   Time[0]=(time1.Hour)/10;                         //把时的十位数据存入Time[0]
  125. }
  126. }
  127. /*******************************************************/
  128. void keyscan()                                //按键扫描程序
  129. {
  130.     if(P1_3==0)                                    //切换程序
  131.         {
  132.          delay(50);
  133.         if(P1_3==0)
  134.            {
  135.            TR0=0;                                                        //有按键按下关闭定时器0
  136.                 miao_num=0;                                         //冒号常亮
  137.                  flag++;
  138.                 if(flag>2)                                                //翻页年月日周按两次后启动定时器
  139.                         {
  140.                  flag=0;
  141.                    TR0=1;                                                //启动定时器0
  142.                         }
  143.                 }
  144.         while(P1_3==0);
  145.         }
  146. /*******************************************************/
  147.         if(P1_4==0)                                    //设置程序
  148.         {
  149.          delay(50);
  150.         if(P1_4==0)
  151.            {
  152.           TR0=0;                                                        //有按键按下关闭定时器0
  153.            miao_num=0;                                                //冒号常亮
  154.                 flag++;                                                       
  155.             if(flag>2)                                                //按两次后启动定时器
  156.            {
  157.            TR0=1;                                                        //启动定时器0
  158.                 }
  159.           if(flag>4)                                                //按四次后关闭定时器
  160.            {
  161.            TR0=0;                                                        //关闭定时器0
  162.                 miao_num=0;                                                //冒号常亮
  163.                 }
  164.         if(flag>8)                                                        //显示多少位和翻页按八次启动定时器
  165.                         {
  166.                  flag=0;
  167.                   TR0=1;                                                //启动定时器0
  168.                         }
  169.                 }
  170.         while(P1_4==0);
  171.         }
  172. switch(flag)
  173.         {
  174. /*******************************************************/
  175.                        
  176.         case 0:display(Time[0],Time[1],Time[2],Time[3]);                //调用子函数display,把存入数组time的数据给显示出来
  177.                         led1=0;
  178.                         led3=1;
  179.                         break;
  180.         case 1:display(Dime[0],Dime[1],Dime[2],Dime[3]);                //调用子函数display,把存入数组Dime的数据给显示出来
  181.                         led1=1;
  182.                         led2=0;
  183.                         break;
  184.         case 2:display(Bime[0],Bime[1],Bime[2],Bime[3]);                //调用子函数display,把存入数组Bime的数据给显示出来
  185.                         led2=1;
  186.                         led3=0;
  187.                         break;
  188. /*******************************************************/       
  189.         case 3:time1.Hour=button_time(time1.Hour,24,23);                //调整时                          
  190.                         DS1302_SetTime(0x84,time1.Hour);
  191.                         display(Time[0],Time[1],10,10);
  192.                         led1=0;
  193.                         led3=1;
  194.                         break;

  195.     case 4:time1.Minute=button_time(time1.Minute,60,59);        //调整分                            
  196.                         DS1302_SetTime(0x82,time1.Minute);
  197.                         display(10,10,Time[2],Time[3]);
  198.                         led1=0;
  199.                         led3=1;
  200.                         break;
  201. /*******************************************************/
  202.                
  203.         case 5:time1.Year=button_time(time1.Year,100,99);                //调整年                            
  204.                         DS1302_SetTime(0x8c,time1.Year);
  205.                         display(Dime[0],Dime[1],10,10);
  206.                         led1=1;
  207.                         led2=0;
  208.                         break;
  209.        
  210.         case 6:time1.Month=button_time(time1.Month,13,12);                //调整月                          
  211.                         DS1302_SetTime(0x88,time1.Month);
  212.                         display(10,10,Dime[2],Dime[3]);
  213.                         led1=1;
  214.                         led2=0;
  215.                         break;
  216. /********************************************************/       
  217.                                          
  218.            case 7:time1.Day=button_time(time1.Day,32,31);                        //调整日
  219.                         DS1302_SetTime(0x86,time1.Day);
  220.                         display(Bime[0],Bime[1],10,10);
  221.                         led2=1;
  222.                         led3=0;
  223.                         break;
  224.        
  225.         case 8:time1.Week=button_time(time1.Week,8,7);                        //调整周
  226.                         DS1302_SetTime(0x8a,time1.Week);
  227.                         display(10,10,Bime[2],Bime[3]);
  228.                         led2=1;
  229.                         led3=0;
  230.                         break;
  231.     }
  232. }
  233. /*******************************************************/
  234. void t0_timer() interrupt 1                                //冒号中断赋值
  235. {
  236.       TH0=0x3c;
  237.       TL0=0xb0;
  238.       miao_num++;
  239. }
  240. /*******************************************************/
  241. void mao_hao()                                        //冒号子程序
  242. {
  243. if(miao_num>=20)
  244.    {
  245.    miao_num=0;
  246.    }
  247.    if(miao_num<10)
  248.      led=0;
  249.          if(miao_num>=10)
  250.           led=1;
  251. }
复制代码


回复

使用道具 举报

6#
ID:67395 发表于 2014-11-30 11:19 | 只看该作者
楼主好人
回复

使用道具 举报

7#
ID:69664 发表于 2014-11-30 11:23 | 只看该作者
楼主好人
回复

使用道具 举报

8#
ID:69736 发表于 2014-12-1 10:19 | 只看该作者
谢谢楼主分享~!
回复

使用道具 举报

9#
ID:69736 发表于 2014-12-1 10:19 | 只看该作者
谢谢楼主分享~!
回复

使用道具 举报

10#
ID:65179 发表于 2014-12-1 13:28 | 只看该作者
不用谢,大家一起来学吗
回复

使用道具 举报

11#
ID:67678 发表于 2015-2-14 19:31 | 只看该作者
谢谢楼主分享。
回复

使用道具 举报

12#
ID:59158 发表于 2015-4-4 16:52 来自手机 | 只看该作者
不错,好思维
回复

使用道具 举报

13#
ID:56948 发表于 2015-5-17 12:56 来自手机 | 只看该作者
/谢谢楼主分享~!
回复

使用道具 举报

14#
ID:80251 发表于 2015-5-17 14:14 | 只看该作者
谢谢!!!
回复

使用道具 举报

15#
ID:89183 发表于 2015-9-8 14:40 | 只看该作者
很好学习了
回复

使用道具 举报

16#
ID:79034 发表于 2015-9-11 19:01 | 只看该作者
下来看看,学习学习。
下载完回帖是好习惯。。
回复

使用道具 举报

17#
ID:104414 发表于 2016-6-6 01:18 | 只看该作者
楼主好厉害                                 
回复

使用道具 举报

18#
ID:125357 发表于 2016-6-6 01:24 | 只看该作者

谢谢楼主分享。
回复

使用道具 举报

19#
ID:140489 发表于 2016-9-28 16:22 | 只看该作者
下载下来学习学习
回复

使用道具 举报

20#
ID:87149 发表于 2016-11-24 16:34 | 只看该作者

下载下来学习学习               
回复

使用道具 举报

21#
ID:99130 发表于 2017-2-21 11:44 | 只看该作者
楼主74HC04可以用CD4069代替对吗
回复

使用道具 举报

22#
ID:99130 发表于 2017-2-21 18:02 | 只看该作者
不知道是楼主资料的问题还是我的问题,我用CD4069和74HC14替换74HC04都不行。不知道能不能替换
回复

使用道具 举报

23#
ID:99130 发表于 2017-2-21 23:31 | 只看该作者
我用4069替代HC04可以。但是走得太快,48秒就进一分钟,是为什么???而且1302断电不走时。。。
回复

使用道具 举报

24#
ID:96682 发表于 2017-2-22 09:34 | 只看该作者
越快乐越堕落 发表于 2017-2-21 23:31
我用4069替代HC04可以。但是走得太快,48秒就进一分钟,是为什么???而且1302断电不走时。。。

首次听说时钟快慢还和反相器有关,不知道是因为不了解元器件还是有意而为
回复

使用道具 举报

25#
ID:65179 发表于 2017-5-3 13:50 | 只看该作者
越快乐越堕落 发表于 2017-2-21 23:31
我用4069替代HC04可以。但是走得太快,48秒就进一分钟,是为什么???而且1302断电不走时。。。

在模拟仿真HC04来代替三极管,在实际电路中要用三极管的,1302你装电池了吗
回复

使用道具 举报

26#
ID:89286 发表于 2017-5-3 15:38 | 只看该作者
thanks for sharing
回复

使用道具 举报

27#
ID:99130 发表于 2017-5-4 11:14 | 只看该作者
wc86110 发表于 2017-2-22 09:34
首次听说时钟快慢还和反相器有关,不知道是因为不了解元器件还是有意而为

我这是说的两件事,请不要混为一谈。
回复

使用道具 举报

28#
ID:99130 发表于 2017-5-4 11:15 | 只看该作者
wc86110 发表于 2017-2-22 09:34
首次听说时钟快慢还和反相器有关,不知道是因为不了解元器件还是有意而为

你没发现前面有一个句号吗?没懂我的意思就不要乱说
回复

使用道具 举报

29#
ID:99130 发表于 2017-5-4 11:16 | 只看该作者
chweji123 发表于 2017-5-3 13:50
在模拟仿真HC04来代替三极管,在实际电路中要用三极管的,1302你装电池了吗

装了。。。。。。。。
回复

使用道具 举报

30#
ID:168133 发表于 2017-6-9 22:58 | 只看该作者
楼主HC04是 用三极管吗?我用8550和没用数码管都是g显示(8中间的那个—)
回复

使用道具 举报

31#
ID:140183 发表于 2017-6-10 06:56 | 只看该作者
太好啦。谢谢!!!!!!!!
回复

使用道具 举报

32#
ID:209955 发表于 2017-6-10 21:50 | 只看该作者
感谢楼主分享,下载学习学习
回复

使用道具 举报

33#
ID:35873 发表于 2017-6-14 02:29 | 只看该作者
这个好  只可惜没币下载了
回复

使用道具 举报

34#
ID:68429 发表于 2017-9-22 21:13 | 只看该作者
做成功了 但是一直显示00:00不会走动 是不是1302数据口没加上拉电阻
回复

使用道具 举报

35#
ID:68429 发表于 2017-9-22 21:14 | 只看该作者
是不是1302还得加上电阻
回复

使用道具 举报

36#
ID:243884 发表于 2017-12-1 22:09 | 只看该作者
K可以,下载了
回复

使用道具 举报

37#
ID:214314 发表于 2019-7-12 22:04 | 只看该作者
不要74HC04可以吗?
回复

使用道具 举报

38#
ID:156220 发表于 2019-7-13 09:24 | 只看该作者
这个资料不错误,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表