找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

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

查看数: 15080 | 评论数: 37 | 收藏 9
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2014-11-26 10:25

正文摘要:

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

回复

ID:156220 发表于 2019-7-13 09:24
这个资料不错误,
ID:214314 发表于 2019-7-12 22:04
不要74HC04可以吗?
ID:243884 发表于 2017-12-1 22:09
K可以,下载了
ID:68429 发表于 2017-9-22 21:14
是不是1302还得加上电阻
ID:68429 发表于 2017-9-22 21:13
做成功了 但是一直显示00:00不会走动 是不是1302数据口没加上拉电阻
ID:35873 发表于 2017-6-14 02:29
这个好  只可惜没币下载了
ID:209955 发表于 2017-6-10 21:50
感谢楼主分享,下载学习学习
ID:140183 发表于 2017-6-10 06:56
太好啦。谢谢!!!!!!!!
ID:168133 发表于 2017-6-9 22:58
楼主HC04是 用三极管吗?我用8550和没用数码管都是g显示(8中间的那个—)
ID:99130 发表于 2017-5-4 11:16
chweji123 发表于 2017-5-3 13:50
在模拟仿真HC04来代替三极管,在实际电路中要用三极管的,1302你装电池了吗

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

你没发现前面有一个句号吗?没懂我的意思就不要乱说
ID:99130 发表于 2017-5-4 11:14
wc86110 发表于 2017-2-22 09:34
首次听说时钟快慢还和反相器有关,不知道是因为不了解元器件还是有意而为

我这是说的两件事,请不要混为一谈。
ID:89286 发表于 2017-5-3 15:38
thanks for sharing
ID:65179 发表于 2017-5-3 13:50
越快乐越堕落 发表于 2017-2-21 23:31
我用4069替代HC04可以。但是走得太快,48秒就进一分钟,是为什么???而且1302断电不走时。。。

在模拟仿真HC04来代替三极管,在实际电路中要用三极管的,1302你装电池了吗
ID:96682 发表于 2017-2-22 09:34
越快乐越堕落 发表于 2017-2-21 23:31
我用4069替代HC04可以。但是走得太快,48秒就进一分钟,是为什么???而且1302断电不走时。。。

首次听说时钟快慢还和反相器有关,不知道是因为不了解元器件还是有意而为
ID:99130 发表于 2017-2-21 23:31
我用4069替代HC04可以。但是走得太快,48秒就进一分钟,是为什么???而且1302断电不走时。。。
ID:99130 发表于 2017-2-21 18:02
不知道是楼主资料的问题还是我的问题,我用CD4069和74HC14替换74HC04都不行。不知道能不能替换
ID:99130 发表于 2017-2-21 11:44
楼主74HC04可以用CD4069代替对吗
ID:87149 发表于 2016-11-24 16:34

下载下来学习学习               
ID:140489 发表于 2016-9-28 16:22
下载下来学习学习
ID:125357 发表于 2016-6-6 01:24

谢谢楼主分享。
ID:104414 发表于 2016-6-6 01:18
楼主好厉害                                 
ID:79034 发表于 2015-9-11 19:01
下来看看,学习学习。
下载完回帖是好习惯。。
ID:89183 发表于 2015-9-8 14:40
很好学习了
ID:80251 发表于 2015-5-17 14:14
谢谢!!!
ID:56948 发表于 2015-5-17 12:56
/谢谢楼主分享~!
ID:59158 发表于 2015-4-4 16:52
不错,好思维
ID:67678 发表于 2015-2-14 19:31
谢谢楼主分享。
ID:65179 发表于 2014-12-1 13:28
不用谢,大家一起来学吗
ID:69736 发表于 2014-12-1 10:19
谢谢楼主分享~!
ID:69736 发表于 2014-12-1 10:19
谢谢楼主分享~!
ID:69664 发表于 2014-11-30 11:23
楼主好人
ID:67395 发表于 2014-11-30 11:19
楼主好人
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. }
复制代码


ID:65179 发表于 2014-11-27 07:50
等等,我有时间把程序发上来
ID:69466 发表于 2014-11-26 12:32
程序呀!
ID:1 发表于 2014-11-26 12:26
有程序吗

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

Powered by 单片机教程网

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