找回密码
 立即注册

QQ登录

只需一步,快速开始

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

16X64LED点阵翻页时钟设计 原理图,单片机源码都有

  [复制链接]
跳转到指定楼层
楼主
ID:140725 发表于 2017-3-4 03:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
点阵时钟的视频效果:


用16X64LED点阵实现翻页的电子时钟实物图:

16X64点阵翻页时钟的原理图(附件里面有清晰版的pdf文件)









16*64点阵的单片机源程序:
  1. /***********************************************************            
  2. 名称:16*64点阵单红翻页时钟
  3. 单片机: STC89C52
  4. 晶振:22.1184M
  5. 显示屏: 16*64点阵,标准的08接口,OE高电平有效
  6. ***********************************************************/
  7. ///////////////////////////////////////////////////////////////////////////////////////////////////
  8. #include <REGX52.H>
  9. #include "DS1302.h"
  10. #include "DS18B20.h"
  11. #include "font.h"
  12. #include "lunar.h"

  13. ///////////////////////////////////////////////////////////////////////////////////////////////////
  14. #define ORANGE   0
  15. #define GREEN    1
  16. #define RED      2

  17. ///////////////////////////////////////////////////////////////////////////////////////////////////
  18. #define H_PORT P0       //ABCD P0
  19. sbit RData         =         P0^4;
  20. sbit OE=P0^5;        
  21. sbit L_STB         =         P0^6;
  22. sbit L_CLK        =         P0^7;        
  23. sbit GData  =   P3^4;

  24. sbit key_adj=P3^0;                                                                  
  25. sbit key_add=P3^1;
  26. sbit key_dec=P3^6;
  27. sbit key_esc=P3^7;

  28. #include "port.h"

  29. #define FESTIVAL_MAX 9                        //定义农历节日数
  30. #define KEY_VAL 5               //定义按键手感

  31. #define set_row(row) {H_PORT=(row&0x0f);}

  32. ///////////////////////////////////////////////////////////////////////////////////////////////////

  33. SYSTEMTIME CurrentTime;

  34. unsigned char status=0;                        //按键状态
  35. unsigned char disp_mode=0;                //显示状态  
  36. unsigned char offset=0;                           //移动显示用的变量
  37. unsigned char disrow=0;                        //当前扫描行
  38. unsigned char k=0;                                //往buff中填的字
  39. unsigned int  t_counter=0,stop_counter=0,stop_time=0;
  40. unsigned char f1=18,f2=18,f3=18,f4=18,f5=18,f6=18;  //18就不会出现刚开始全部翻页的情况了.
  41. bit switch_flag=0,stop_bit=0;
  42. bit one_sec_flag=0,half_sec_flag;
  43. bit nongli_flag=0,nongli_change_flag=0,festival_flag=0;
  44. unsigned char temp_time[6];     //翻页钟用到

  45. unsigned char color = 0;

  46. bit add_flag=0;
  47. bit dec_flag=0;
  48. bit adj_flag=0;
  49. bit esc_flag=0;

  50. unsigned char ka=0,kb=0,kc=0,kd=0;  //按键用

  51. ///////////////////////////////////////////////////////////////////////////////////////////////////


  52. unsigned char date[]=
  53. {
  54.         10,10,10,10,10,10,10,10,                 //开头8个空格
  55.         2,0,                                                         //21世纪
  56.         1,2,                                                         //年数据        No.10,11
  57.         49,50,                                                        //“年”
  58.         0,1,                                                        //月数据         No.14,15
  59.         51,52,                                                        //“月”
  60.         0,1,                                                        //日数据        No.18,19
  61.         53,54,                                                        //“日”
  62.         
  63.         10,                                                 //空格
  64.         
  65.         55,56,57,58,                                        //“星期”
  66.         53,54,                                                        //星期几        No.27,28
  67.         
  68.         10,                                                                //空格
  69.         
  70.         0,0,                                                          //小时数据         No.30,31
  71.         11,                                                        // :                  No.32
  72.         0,0,                                                          //分钟数据         No.33,34
  73.         11,                                                            // :                No.35
  74.         0,0,                                                           //秒数据         No.36,37
  75.         
  76.         10,                                                                //空格
  77.         
  78.         10,10,10,12,10,13,14,                    //温度                 No.39,40,41,43
  79.                                        
  80.     10,10,10,10,10,10,10,10,        //MAX       No.53                                                                          
  81. };

  82. ///////////////////////////////////////////////////////////////////////////////////////////////////

  83. unsigned char code mode[4]={0,1,7,8}; //几种显示模式的排列,依次为
  84.                                      //0:流动显示年月日+固定一段时间翻页钟
  85.                                      //1:翻页钟
  86.                                      //7:全部流动显示
  87.                                      //8:温度

  88. unsigned char code moon_date[48]=
  89. {
  90.     10,10,10,10,10,10,10,10,                 //开头8个空格
  91.     10,10,                          //No.8,9
  92.     10,10,                          //No.10,11
  93.     49,50,                          //“年”
  94.     10,10,                          //No.14,15
  95.     10,10,                          //No.16,17
  96.     51,52,                          //“月”
  97.     10,10,                          //No.20,21
  98.     10,10,                          //No.22,23
  99.     10,10,10,10,10,10,10,10,                 //开头8个空格
  100.     10,10,10,10,10,10,10,10,                 //开头8个空格
  101.     10,10,10,10,10,10,10,10,       //MAX No.47
  102. };


  103. unsigned char code init_date[]=
  104. {
  105.         10,10,10,10,10,10,10,10,                 //开头8个空格
  106.         2,0,                                                         //21世纪
  107.         1,2,                                                         //年数据        No.10,11
  108.         49,50,                                                        //“年”
  109.         0,1,                                                        //月数据         No.14,15
  110.         51,52,                                                        //“月”
  111.         0,1,                                                        //日数据        No.18,19
  112.         53,54,                                                        //“日”
  113.         
  114.         10,                                                 //空格
  115.         
  116.         55,56,57,58,                                        //“星期”
  117.         53,54,                                                        //星期几        No.27,28
  118.         
  119.         10,                                                                //空格
  120.         
  121.         0,0,                                                          //小时数据         No.30,31
  122.         11,                                                        // :                 No.32
  123.         0,0,                                                          //分钟数据         No.33,34
  124.         11,                                                            // :                No.35
  125.         0,0,                                                           //秒数据         No.36,37
  126.         
  127.         10,                                                                //空格
  128.         
  129.         10,10,10,12,10,13,14,                            //温度                 No.39,40,41,43
  130.                                        
  131.     10,10,10,10,10,10,10,10,       //MAX       No.53         
  132. };

  133. unsigned char code week_data[]={0,25,27,29,31,33,35,53};  //一二三四五六日
  134. unsigned char code moon_data1[]={45,43,47,29};        //初十廿卅

  135. ///////////////////////////////////////////////////////////////////////////////////////////////////

  136. void delay_nms(unsigned int count);
  137. void Timer_init(void);
  138. void time_to_buff_all(void);
  139. void update_buff(void);
  140. void key_scan(void);
  141. void display(unsigned char mode);
  142. void shutter_clock(void);


  143. ///////////////////////////////////////////////////////////////////////////////////////////////////

  144. void main(void)
  145. {
  146.         Initial_DS1302();
  147.         time_to_buff_all();
  148.     ReadTemperature(&date,39);        
  149.         Timer_init();

  150.         while(1)
  151.         {
  152.         update_buff();
  153.         
  154.                  for(disrow=0;disrow<16;disrow++)                  //disrow,当前扫描的行
  155.                 {               
  156. //////////////////////////////////////////               
  157.                         display(disp_mode);
  158.                         OE=0;                     //关显示屏
  159.                         L_STB=1;               
  160.                         L_STB=0;
  161.                         set_row(disrow);//行138的输出.依次点亮1~16行.                                 
  162.                            OE=1;                         //开显示屏
  163.                         delay_nms(1);   //此处延时,可以省略,               
  164. //////////////////////////////////////////////////////////
  165.                 }        
  166.                 if(stop_counter>stop_time)
  167.                 {
  168.                         disp_mode=0;
  169.                         offset++;
  170.                         stop_counter=0;
  171.                         stop_bit=0;
  172.                 }
  173.         if(stop_bit==0) offset++;
  174.                 if(disp_mode==1)
  175.                 {
  176.                         if(f1<200) f1++;
  177.                         if(f2<200) f2++;
  178.                         if(f3<200) f3++;
  179.                         if(f4<200) f4++;
  180.                         if(f5<200) f5++;
  181.                         if(f6<200) f6++;
  182.                 }
  183.                 if(nongli_flag==0) key_scan();  //显示农历时调整会出现错误,图省力屏蔽了
  184.         }
  185. }
  186. ///////////////////////////////////////////////////////////////////////////////////////////////////
  187. void Timer_init(void)                                
  188. {
  189.         EA=0;
  190.     ET0=1;      //开定时器中断   
  191.     TMOD=0x01;        //定时器0模式1
  192.     // TH0=0x3c;              //24M晶振 25ms中断
  193.     // TL0=0xb0;
  194.         TH0=0x4c;   //22.1148M晶振 25ms中断
  195.     TL0=0x07;
  196.     TR0=1;                //开定时器运行
  197.     EA=1;        
  198. }
  199. ///////////////////////////////////////////////////////////////////////////////////////////////////
  200. void T0_ISR(void) interrupt 1 using 3        //定时器中断
  201. {        
  202.    // TH0=0x3c;              //24M晶振 25ms中断
  203.    // TL0=0xb0;
  204.         TH0=0x4c;   //22.1148M晶振 25ms中断
  205.     TL0=0x07;
  206.         t_counter++;
  207.     if(t_counter==20) half_sec_flag=1;
  208.     if(t_counter==40) {t_counter=0;one_sec_flag=1;}
  209.         if(stop_bit==1) stop_counter++;
  210.    
  211.     if(ka!=0)
  212.         {   
  213.         ka--;
  214.         if(ka==0 && key_add==0) add_flag=1;
  215.     }         
  216.         else if(key_add==0)ka=KEY_VAL;
  217.    
  218.     if(kb!=0)
  219.         {   
  220.         kb--;
  221.         if(kb==0 && key_dec==0) dec_flag=1;
  222.     }         
  223.         else if(key_dec==0)kb=KEY_VAL;
  224.    
  225.     if(kc!=0)
  226.         {   
  227.         kc--;
  228.         if(kc==0 && key_adj==0) adj_flag=1;
  229.     }         
  230.         else if(key_adj==0)kc=KEY_VAL;
  231.    
  232.     if(kd!=0)
  233.         {   
  234.         kd--;
  235.         if(kd==0 && key_esc==0) esc_flag=1;
  236.     }         
  237.         else if(key_esc==0)kd=KEY_VAL;   
  238. }

  239. ///////////////////////////////////////////////////////////////////////////////////////////////////

  240. void update_buff(void)
  241. {
  242.     unsigned char i;
  243.     if(nongli_change_flag==1)
  244.     {
  245.         if(nongli_flag==1)
  246.         {
  247.             for(i=0;i<46;i++)
  248.                 date[i]=moon_date[i];
  249.                
  250.             DS1302_GetTime_ALL(&CurrentTime);
  251.                         festival_flag = GetSolar(CurrentTime.Year,CurrentTime.Month,CurrentTime.Day,&date,26);
  252.             DS1302_GetTime_ALL(&CurrentTime);
  253.                         Color(&color,CurrentTime.Hour);
  254.             getLunar(&CurrentTime);

  255.             date[8]= (CurrentTime.Year+100-84)%10*2+61;   //从"甲"开始
  256.             date[9]= (CurrentTime.Year+100-84)%10*2+62;
  257.             date[10]=(CurrentTime.Year+100-84)%12*2+81;   //从"子"开始
  258.             date[11]=(CurrentTime.Year+100-84)%12*2+82;  
  259.                         
  260.             if(CurrentTime.Month<11)    //不显示为“零一月”
  261.             {   
  262.                                 if(CurrentTime.Month==1)
  263.                                 {
  264.                                         date[14]=59;                //"正"
  265.                                         date[15]=60;
  266.                                 }
  267.                                 else if(CurrentTime.Month==10)
  268.                 {
  269.                     date[14]=43;                //"十"
  270.                                         date[15]=44;
  271.                 }
  272.                 else
  273.                                 {
  274.                                         date[14]=CurrentTime.Month%10*2+23;     //月个位
  275.                                         date[15]=CurrentTime.Month%10*2+24;     //
  276.                                 }
  277.                 date[16]=51;
  278.                 date[17]=52;                            //"月"
  279.             
  280.                 switch(CurrentTime.Day)
  281.                 {
  282.                     case 10:
  283.                     date[18]=45;                        //"初"
  284.                     date[19]=46;
  285.                     date[20]=43;                        //"十"
  286.                     date[21]=44;
  287.                     break;
  288.                     
  289.                     case 20:
  290.                     date[18]=27;                        //"廿"
  291.                     date[19]=28;
  292.                     date[20]=43;                        //"十"
  293.                     date[21]=44;
  294.                     break;
  295.                     
  296.                     case 30:
  297.                     date[18]=29;                        //"卅"
  298.                     date[19]=30;
  299.                     date[20]=43;                        //"十"
  300.                     date[21]=44;
  301.                     break;                    
  302.                     
  303.                     default:                                 
  304.                     date[18]=moon_data1[CurrentTime.Day/10];     //日十位
  305.                     date[19]=moon_data1[CurrentTime.Day/10]+1;   //
  306.                     date[20]=CurrentTime.Day%10*2+23;     //日个位
  307.                     date[21]=CurrentTime.Day%10*2+24;     //
  308.                     break;
  309.                 }
  310.                 date[22]=10;
  311.                 date[23]=10;
  312.             }
  313.             else
  314.             {
  315.                 date[14]=43;                          //"十"
  316.                 date[15]=44;                          //           
  317.                 date[16]=CurrentTime.Month%10*2+23;   //月个位
  318.                 date[17]=CurrentTime.Month%10*2+24;   //  
  319.                 switch(CurrentTime.Day)
  320.                 {
  321.                     case 10:
  322.                     date[20]=45;                        //"初"
  323.                     date[21]=46;
  324.                     date[22]=43;                        //"十"
  325.                     date[23]=44;
  326.                     break;
  327.                     
  328.                     case 20:
  329.                     date[20]=27;                        //"廿"
  330.                     date[21]=28;
  331.                     date[22]=43;                        //"十"
  332.                     date[23]=44;
  333.                     break;
  334.                     
  335.                     case 30:
  336.                     date[20]=29;                        //"卅"
  337.                     date[21]=30;
  338.                     date[22]=43;                        //"十"
  339.                     date[23]=44;
  340.                     break;                    
  341.                     
  342.                     default:                                 
  343.                     date[20]=moon_data1[CurrentTime.Day/10];     //日十位
  344.                     date[21]=moon_data1[CurrentTime.Day/10]+1;   //
  345.                     date[22]=CurrentTime.Day%10*2+23;     //日个位
  346.                     date[23]=CurrentTime.Day%10*2+24;     //
  347.                     break;
  348.                 }
  349.             }
  350.             nongli_change_flag=0;
  351.         }
  352.         else
  353.         {
  354.             for(i=0;i<48;i++)
  355.                 date[i]=init_date[i];   
  356.                
  357.             time_to_buff_all();
  358.             nongli_change_flag=0;   
  359.         }
  360.     }   
  361.    
  362.         if(half_sec_flag==1&&nongli_flag==0)     //0.5S
  363.         {   
  364.         half_sec_flag=0;

  365.         time_to_buff_all();
  366.                 switch(status)
  367.                 {
  368.                         case 0:
  369.                         break;
  370.                         case 1:
  371.                         date[10]=15,date[11]=15;
  372.                         break;
  373.                         case 2:
  374.                         date[14]=15,date[15]=15;
  375.                         break;
  376.                         case 3:
  377.                         date[18]=15,date[19]=15;
  378.                         break;
  379.                         case 4:
  380.                         date[27]=15,date[28]=15;
  381.                         break;
  382.                         case 5:
  383.                         date[30]=15,date[31]=15;
  384.                         break;
  385.                         case 6:
  386.                         date[33]=15,date[34]=15;
  387.                         break;
  388.                         case 7:
  389.                         date[36]=15,date[37]=15;
  390.                         break;               
  391.             default:
  392.             break;
  393.                 }        
  394.         }                 
  395.         if(one_sec_flag==1&&nongli_flag==0)      //1.0S
  396.         {   
  397.                 one_sec_flag=0;
  398.         
  399.         if((disp_mode==8||k==0)&&nongli_flag==0) ReadTemperature(&date,39);

  400.                 date[32]=11;
  401.         date[35]=11;
  402.                 time_to_buff_all();
  403.         }
  404. }

  405. ///////////////////////////////////////////////////////////////////////////////////////////////////
  406. void display(unsigned char mode)                //送显示数据
  407. {
  408.         unsigned char i;
  409.         switch(mode)
  410.         {
  411.                 case 0:                    //流动暂停显示
  412.                 if(switch_flag==1)        {k=0;switch_flag=0;}
  413.                 for(i=0;i<8;i++)                  //送往8个4094的数据.
  414.                         SendByte(color,a[date[k+i]][disrow]);        
  415.                     Send2Byte(color,a[date[k+8]][disrow],offset);
  416.                 if(offset==8)
  417.                 {
  418.                         offset=0;k++;
  419.                         if(k==30&&nongli_flag==0) {stop_bit=1,stop_time=900,disp_mode=1;}        //到了时间的时候停一下。
  420.                         if(k==39&&nongli_flag==0) {stop_bit=1,stop_time=100;}        //温度也停一下下。
  421.                         if(k>45&&nongli_flag==0)
  422.             {
  423.                 k=0;
  424.                 nongli_flag=~nongli_flag;
  425.                 nongli_change_flag=1;
  426.             }
  427.             if(k>24&&festival_flag==0&&nongli_flag==1)
  428.             {
  429.                 k=0;
  430.                 nongli_flag=~nongli_flag;
  431.                 nongli_change_flag=1;
  432.             }
  433.                         else if(k>30&&festival_flag==1&&nongli_flag==1)
  434.                         {
  435.                 k=0;
  436.                 nongli_flag=~nongli_flag;
  437.                 nongli_change_flag=1;
  438.             }
  439.                 }
  440.                 break;
  441.                      
  442.         case 7:             //全部流动显示
  443.         if(switch_flag==1)        {k=0;switch_flag=0;}
  444.                 for(i=0;i<8;i++)                  //送往8个4094的数据.
  445.                         SendByte(color,a[date[k+i]][disrow]);        
  446.                     Send2Byte(color,a[date[k+8]][disrow],offset);
  447.                 if(offset==8)
  448.                 {
  449.                         offset=0;k++;
  450.                         if(nongli_flag==0&&k>45)
  451.             {
  452.                 k=0;
  453.                 nongli_flag=~nongli_flag;
  454.                 nongli_change_flag=1;
  455.             }
  456.             if(k>24&&festival_flag==0&&nongli_flag==1)
  457.             {
  458.                 k=0;
  459.                 nongli_flag=~nongli_flag;
  460.                 nongli_change_flag=1;
  461.             }
  462.                         else if(k>30&&festival_flag==1&&nongli_flag==1)
  463.                         {
  464.                 k=0;
  465.                 nongli_flag=~nongli_flag;
  466.                 nongli_change_flag=1;
  467.             }
  468.                 }
  469.         break;
  470.       
  471.         case 8:         //固定显示温度
  472.         for(i=0;i<8;i++)                  //送往8个4094的数据.
  473.                         SendByte(color,a[date[39+i]][disrow]);        
  474.         break;        
  475.         
  476.                 case 1:                        //翻页钟显示
  477.                 shutter_clock();
  478.                 break;
  479.                
  480.                 case 2:                                           //显示时间
  481.                 if(switch_flag==1)        {/*k=23;*/switch_flag=0;}
  482.                 if(k<30)
  483.                 {
  484.                         for(i=0;i<8;i++)                  //送往8个4094的数据.
  485.                                 SendByte(color,a[date[k+i]][disrow]);        
  486.                             Send2Byte(color,a[date[k+8]][disrow],offset);
  487.                         if(offset==8)
  488.                         {
  489.                                 offset=0;k++;
  490.                         }
  491.                 }
  492.                 if(k==30)
  493.                 {
  494.                         for(i=0;i<8;i++)                  //送往8个4094的数据.
  495.                                 SendByte(color,a[date[30+i]][disrow]);        
  496.                 }
  497.                 break;
  498.                         
  499.                 case 3:                                           //显示年               
  500.                 if(switch_flag==1)        {k=0;switch_flag=0;}
  501.                 if(k<10)
  502.                 {
  503.                         for(i=0;i<8;i++)                  //送往8个4094的数据.
  504.                                 SendByte(color,a[date[k+i]][disrow]);        
  505.                             Send2Byte(color,a[date[k+8]][disrow],offset);
  506.                         if(offset==8)
  507.                         {
  508.                                 offset=0;k++;
  509.                         }
  510.                 }
  511.                 if(k==10)
  512.                 {
  513.                         for(i=0;i<8;i++)                  //送往8个4094的数据.
  514.                                 SendByte(color,a[date[10+i]][disrow]);        
  515.                 }
  516.                 break;
  517.                
  518.                 case 4:                                           //显示月
  519.                 if(switch_flag==1)        {k=10;switch_flag=0;}
  520.                 if(k<14)
  521.                 {
  522.                         for(i=0;i<8;i++)                  //送往8个4094的数据.
  523.                                 SendByte(color,a[date[k+i]][disrow]);        
  524.                             Send2Byte(color,a[date[k+8]][disrow],offset);
  525.                         if(offset==8)
  526.                         {
  527.                                 offset=0;k++;
  528.                         }
  529.                 }
  530.                 if(k==14)
  531.                 {
  532.                         for(i=0;i<8;i++)                  //送往8个4094的数据.
  533.                                 SendByte(color,a[date[14+i]][disrow]);        
  534.                 }
  535.                 break;
  536.                
  537.                 case 5:                                           //显示日
  538.                 if(switch_flag==1)        {k=14;switch_flag=0;}               
  539.                 if(k<18)
  540.                 {
  541.                         for(i=0;i<8;i++)                  //送往8个4094的数据.
  542.                                 SendByte(color,a[date[k+i]][disrow]);        
  543.                             Send2Byte(color,a[date[k+8]][disrow],offset);
  544.                         if(offset==8)
  545.                         {
  546.                                 offset=0;k++;
  547.                         }
  548.                 }
  549.                 if(k==18)
  550.                 {
  551.                         for(i=0;i<8;i++)                  //送往8个4094的数据.
  552.                                 SendByte(color,a[date[18+i]][disrow]);        
  553.                 }
  554.                 break;

  555.                 case 6:                                           //显示星期
  556.                 if(switch_flag==1)        {k=18;switch_flag=0;}
  557.                 if(k<23)
  558.                 {
  559.                         for(i=0;i<8;i++)                  //送往8个4094的数据.
  560.                                 SendByte(color,a[date[k+i]][disrow]);        
  561.                             Send2Byte(color,a[date[k+8]][disrow],offset);
  562.                         if(offset==8)
  563.                         {
  564.                                 offset=0;k++;
  565.                         }
  566.                 }
  567.                 if(k==23)
  568.                 {
  569.                         for(i=0;i<8;i++)                  //送往8个4094的数据.
  570.                                 SendByte(color,a[date[23+i]][disrow]);        
  571.                 }
  572.                 break;

  573.                 default:
  574.                 break;               
  575.         }               
  576. }

  577. /////////////////////////////////////////////////////////////////////////////
  578. void shutter_clock(void)                                //翻页钟
  579. {
  580.                 if(date[30]!=temp_time[0]) f1=0;                                                                //时十位
  581.                 if(f1<17)
  582.                 {
  583.                         if(date[30]==0) SendByte(color,a[17][disrow+f1]);
  584.                         else SendByte(color,a[date[30]-1][disrow+f1]);
  585.                 }
  586.                 else SendByte(color,a[date[30]][disrow]);               
  587.                
  588.                 if(date[31]!=temp_time[1]) f2=0;                                                                //时个位
  589.                 if(f2<17)
  590.                 {
  591.                         if(date[31]==0) SendByte(color,a[19][disrow+f2]);
  592.                         else SendByte(color,a[date[31]-1][disrow+f2]);
  593.                 }
  594.                 else SendByte(color,a[date[31]][disrow]);
  595.         
  596.                 SendByte(color,a[date[32]][disrow]);                                                            //冒号
  597.                
  598.                 if(date[33]!=temp_time[2]) f3=0;                                                                //分十位
  599.                 if(f3<17)
  600.                 {
  601.                         if(date[33]==0) SendByte(color,a[21][disrow+f3]);
  602.                         else SendByte(color,a[date[33]-1][disrow+f3]);
  603.                 }
  604.                 else SendByte(color,a[date[33]][disrow]);               
  605.                
  606.                 if(date[34]!=temp_time[3]) f4=0;                                                                //分个位
  607.                 if(f4<17)
  608.                 {
  609.                         if(date[34]==0) SendByte(color,a[23][disrow+f4]);
  610.                         else SendByte(color,a[date[34]-1][disrow+f4]);
  611.                 }
  612.                 else SendByte(color,a[date[34]][disrow]);
  613.                
  614.                 SendByte(color,a[date[35]][disrow]);                                                            //冒号
  615.                
  616.                 if(date[36]!=temp_time[4]) f5=0;                                                                //秒十位
  617.                 if(f5<17)
  618.                 {
  619.                         if(date[36]==0) SendByte(color,a[21][disrow+f5]);
  620.                         else SendByte(color,a[date[36]-1][disrow+f5]);
  621.                 }
  622.                 else SendByte(color,a[date[36]][disrow]);
  623.                
  624.                 if(date[37]!=temp_time[5]) f6=0;                                                                //秒个位
  625.                 if(f6<17)
  626.                 {
  627.                         if(date[37]==0) SendByte(color,a[23][disrow+f6]);
  628.                         else SendByte(color,a[date[37]-1][disrow+f6]);
  629.                 }
  630.                 else SendByte(color,a[date[37]][disrow]);               
  631. }        
  632. ///////////////////////////////////////////////////////////////////////////////////////////////////
  633. void delay_nms(unsigned int count)                //软件延时
  634. {
  635.         unsigned int i,j;
  636.         for(i=0;i<count;i++)
  637.                 for(j=0;j<45;j++);                                  //120 改成45看看
  638. }

  639. ///////////////////////////////////////////////////////////////////////////////////////////////////
  640. void time_to_buff_all(void)                                //读取全部时间
  641. {
  642.         DS1302_GetTime_ALL(&CurrentTime);
  643.    
  644.    
  645.     temp_time[0]=date[30];
  646.         temp_time[1]=date[31];
  647.         temp_time[2]=date[33];
  648.         temp_time[3]=date[34];
  649.         temp_time[4]=date[36];
  650.         temp_time[5]=date[37];

  651.     Color(&color,CurrentTime.Hour);
  652.    
  653.            date[30]=CurrentTime.Hour/10;                //小时
  654.            date[31]=CurrentTime.Hour%10;                   //小时
  655.            date[33]=CurrentTime.Minute/10;                 //分钟
  656.            date[34]=CurrentTime.Minute%10;                  //分钟
  657.            date[36]=CurrentTime.Second/10;                  //秒
  658.            date[37]=CurrentTime.Second%10;                  //秒         
  659.         
  660.            date[10]=CurrentTime.Year/10;                //年
  661.            date[11]=CurrentTime.Year%10;                //年
  662.            date[14]=CurrentTime.Month/10;                //月
  663.            date[15]=CurrentTime.Month%10;                //月
  664.            date[18]=CurrentTime.Day/10;                      //日
  665.            date[19]=CurrentTime.Day%10;                      //日
  666.     date[27]=week_data[CurrentTime.Week];  //星期
  667.     date[28]=week_data[CurrentTime.Week]+1;//星期
  668.    
  669. }

  670. ///////////////////////////////////////////////////////////////////////////////////////////////////

  671. void key_scan(void)                                                //扫描按键
  672. {
  673.     static unsigned char mode_counter=0;
  674.         if(adj_flag==1)
  675.         {
  676.             adj_flag=0;

  677.             stop_bit=0;
  678.                         offset=0;
  679.                         switch_flag=1;
  680.                         status++;
  681.                         if(status>7) status=1;
  682.                         time_to_buff_all();

  683.         }               
  684.         if(esc_flag==1)
  685.         {
  686.             esc_flag=0;

  687.             stop_bit=0;
  688.                         disp_mode=0;                        //退出时方式为流动显示
  689.                         k=0;
  690.                         offset=0;
  691.                         status=0;
  692.                         time_to_buff_all();
  693.         }

  694.         
  695.         switch(status)
  696.         {
  697.                 case 0:                          //显示模式调整
  698.                 if(add_flag==1)
  699.                 {
  700.             add_flag=0;
  701.                 stop_bit=0;
  702.                                 offset=0;
  703.                                 switch_flag=1;
  704.                 mode_counter++;
  705.                                 if(mode_counter>3) mode_counter=0;
  706.                 disp_mode=mode[mode_counter];

  707.                 }
  708.                 if(dec_flag==1)
  709.                 {
  710.             dec_flag=0;
  711.                                 offset=0;
  712.                 stop_bit=0;
  713.                                 switch_flag=1;
  714.                                 if(mode_counter==0) mode_counter=3;
  715.                 else mode_counter--;
  716.                 disp_mode=mode[mode_counter];
  717.                 }               
  718.                 break;               
  719.                                 
  720.                 case 1:                        //年调整
  721.                 disp_mode=3;
  722.                 if(add_flag==1)
  723.                 {
  724.             add_flag=0;
  725.                                 CurrentTime.Year++;
  726.                                 if(CurrentTime.Year>99) CurrentTime.Year=0;
  727.                                 DS1302_SetTime(DS1302_YEAR,(CurrentTime.Year));
  728.                 }
  729.                 if(dec_flag==1)
  730.                 {
  731.             dec_flag=0;
  732.                                 if(CurrentTime.Year>0) CurrentTime.Year--;
  733.                                 if(CurrentTime.Year==0) CurrentTime.Year=99;
  734.                                 DS1302_SetTime(DS1302_YEAR,(CurrentTime.Year));
  735.                 }
  736.                 break;

  737.                   case 2:                        //月调整



  738. …………余下代码请下载附件…………
复制代码




评分

参与人数 3黑币 +18 收起 理由
slhslhhao + 8 共享资料的黑币奖励!
qjzyx + 5 赞一个!
ytteria0001 + 5

查看全部评分

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

使用道具 举报

沙发
ID:69536 发表于 2017-3-4 11:44 | 只看该作者
1302 总不准,希望早日看到高手上DS3231
回复

使用道具 举报

板凳
ID:166459 发表于 2017-3-4 11:49 | 只看该作者
太好了,51黑有你更精彩

评分

参与人数 1黑币 +5 收起 理由
Monsieur + 5 很给力!

查看全部评分

回复

使用道具 举报

地板
ID:168123 发表于 2017-3-4 15:39 | 只看该作者
单片机的那块电路板是怎么画的

评分

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

查看全部评分

回复

使用道具 举报

5#
ID:120990 发表于 2017-3-10 17:56 | 只看该作者
楼主程序那下载啊
回复

使用道具 举报

6#
ID:146910 发表于 2017-10-23 20:18 | 只看该作者
楼主程序那下载啊

评分

参与人数 1黑币 +5 收起 理由
Monsieur + 5 很给力!

查看全部评分

回复

使用道具 举报

7#
ID:61140 发表于 2017-12-29 14:18 | 只看该作者
楼主程序那下载啊

评分

参与人数 1黑币 +5 收起 理由
Monsieur + 5 很给力!

查看全部评分

回复

使用道具 举报

8#
ID:145007 发表于 2017-12-29 18:27 | 只看该作者
好,这个好玩啊
回复

使用道具 举报

9#
ID:250820 发表于 2018-1-12 23:40 | 只看该作者
我有DS3231的

评分

参与人数 1黑币 +5 收起 理由
Monsieur + 5 很给力!

查看全部评分

回复

使用道具 举报

10#
ID:87193 发表于 2018-1-18 17:03 | 只看该作者
是不是忘了附件了

评分

参与人数 1黑币 +5 收起 理由
Monsieur + 5 很给力!

查看全部评分

回复

使用道具 举报

11#
ID:277627 发表于 2018-1-19 09:49 | 只看该作者
支持一下

评分

参与人数 1黑币 +2 收起 理由
Monsieur + 2 很给力!

查看全部评分

回复

使用道具 举报

12#
ID:217894 发表于 2018-1-25 13:54 | 只看该作者
学习学习
回复

使用道具 举报

13#
ID:286954 发表于 2018-3-2 15:24 | 只看该作者
可以下载吗?
回复

使用道具 举报

14#
ID:286954 发表于 2018-3-2 15:24 | 只看该作者
学习一下
回复

使用道具 举报

15#
ID:89764 发表于 2018-3-14 11:35 | 只看该作者
学一下 点阵显示,谢谢
回复

使用道具 举报

16#
ID:25213 发表于 2018-4-8 20:52 | 只看该作者
楼主程序那下载啊
回复

使用道具 举报

17#
ID:139071 发表于 2018-4-11 10:55 | 只看该作者
无敌给力。。
回复

使用道具 举报

18#
ID:25213 发表于 2018-4-17 21:15 | 只看该作者

楼主程序那下载啊
回复

使用道具 举报

19#
ID:159748 发表于 2018-5-26 12:37 | 只看该作者
主程序那下载啊~謝謝
回复

使用道具 举报

20#
ID:225598 发表于 2018-6-21 18:08 | 只看该作者
没看到在哪下啊
回复

使用道具 举报

21#
ID:31030 发表于 2018-6-21 19:02 | 只看该作者
太好了,51黑有你更精彩
回复

使用道具 举报

22#
ID:356610 发表于 2018-6-22 15:07 | 只看该作者
学习了,楼主厉害
回复

使用道具 举报

23#
ID:364764 发表于 2018-7-31 09:16 | 只看该作者
谢谢。参考一下,不错
回复

使用道具 举报

24#
ID:364764 发表于 2018-7-31 09:16 | 只看该作者
非常感谢,不错用来玩玩。。
回复

使用道具 举报

25#
ID:381782 发表于 2018-8-10 17:51 | 只看该作者
楼主如何下载呢?
回复

使用道具 举报

26#
ID:55815 发表于 2018-8-15 23:22 | 只看该作者
谢谢 好好学习
回复

使用道具 举报

27#
ID:98880 发表于 2018-8-18 09:57 | 只看该作者
这个是一乐家的点阵屏。
回复

使用道具 举报

28#
ID:98880 发表于 2018-8-18 09:57 | 只看该作者
有全部原理图吗?
回复

使用道具 举报

29#
ID:386442 发表于 2018-8-18 12:22 来自手机 | 只看该作者
附件在哪里呢
回复

使用道具 举报

30#
ID:201395 发表于 2018-9-6 11:59 | 只看该作者
附件在哪咧
回复

使用道具 举报

31#
ID:79631 发表于 2018-9-7 15:15 | 只看该作者
302 总不准,希望早日看到高手上DS3231
回复

使用道具 举报

32#
ID:137345 发表于 2018-9-8 10:02 | 只看该作者
学习。。。
回复

使用道具 举报

33#
ID:12348 发表于 2018-12-4 01:06 | 只看该作者
lemon0210 发表于 2018-1-18 17:03
是不是忘了附件了

有图有源码,还要啥附件,学习方法和思路
回复

使用道具 举报

34#
ID:75224 发表于 2019-3-7 14:35 | 只看该作者
原理图呢
回复

使用道具 举报

35#
ID:23303 发表于 2019-6-20 08:07 | 只看该作者
学习一下,请楼主多帮助
回复

使用道具 举报

36#
ID:374570 发表于 2019-6-20 20:29 | 只看该作者
学习学习再学习
回复

使用道具 举报

37#
ID:374570 发表于 2019-6-20 20:34 | 只看该作者
学习学习再学习!
回复

使用道具 举报

38#
ID:374570 发表于 2019-6-21 01:37 | 只看该作者
附件在哪儿?
回复

使用道具 举报

39#
ID:91721 发表于 2019-6-25 11:36 | 只看该作者
太好了,51黑有你更精彩
回复

使用道具 举报

40#
ID:171746 发表于 2019-6-25 13:39 | 只看该作者
在哪下啊?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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