找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1477|回复: 0
收起左侧

51单片机数码管无线调时万年历程序

[复制链接]
ID:490992 发表于 2019-4-21 17:27 | 显示全部楼层 |阅读模式
51数码管无线调时万年历

单片机源程序如下:
  1. #include "STC15Wxx.h"
  2. #include <intrins.h>
  3. #include "string.h"
  4. //#include "sys/mcuinit.h"

  5. #include "sys/delay.h"
  6. #include "enc28j60/enc28j60.h"
  7. #include "fu_ip/fu_config.h"
  8. #include "fu_ip/fu_send.h"
  9. /*TCP UDP NTP协议*/

  10. #include "DS3232/DS3232.H"

  11. #include "led/led.h"
  12. #include "code/currency.h"
  13. #include "code/wireless.h"
  14. #include "code/network.h"
  15. #include "code/school.h"
  16. #include "led/led.h"
  17. #include "key/key.h"
  18. #include "main.h"







  19. /************年月日定义************/
  20. unsigned int year=2017;                        //年
  21. unsigned char mon=7;
  22. unsigned char day=12;
  23. unsigned char hour=17;
  24. unsigned char min=10;
  25. unsigned char sec=10;
  26. unsigned char _state;        //亮灯状态
  27. unsigned char week;                //星期
  28. /*************************************/
  29. unsigned char  receiveData;                //北斗串口接受的数据
  30. unsigned char  RX2_Buffer;                //无线串口接受数据标志
  31. bit B_TX2_Busy;                                //串口2标志
  32. bit B_TX1_Busy;                                //串口1标志
  33. bit B_1ms;                                                //1毫秒标记位
  34. unsigned int  count_1ms;                                //1毫秒计数
  35. unsigned int  light_time=0;                        //亮灯时间
  36. unsigned char xdata key_event;                        //按键事件
  37. unsigned char keyevent_add =0;                                        //按键事件
  38. unsigned char getevent = 0;                                        //获取按键

  39. unsigned char  do_success=0; //接受成功之后的亮灯标志

  40. unsigned char st;

  41. unsigned char  cmd3[7]= {0xc0,0x20,0x15,0x50,0x98,0x00};



  42. void PrintString3(unsigned char *puts);        //发送一个字符串

  43. /**********函数********************/
  44. void init();
  45. void geiDS3232TIMES();
  46. void PrintString1(unsigned char *puts);
  47. /**********************************/
  48. void main(){
  49.         init();
  50.         AUX=1;                                                                                        //AUX 先上电
  51.         //WX_POWER=0;                                //开启无线   无线上电
  52.         init_DS3231(0x1C);                          //初始化   守时芯片
  53.         //delayms(200);
  54.         if(Get_YEAR()==0)Set_time(12,0,0,17,1,1);
  55.         getevent=0;
  56.         keyevent_add=0;
  57.         PrintString3(cmd3);       
  58.         while(1){
  59.                         if(B_1ms){                                //1毫秒到
  60.                                         B_1ms=0;
  61.                                         if(beginwire==1)lcawire++;
  62.                                         if(beginnet==1)lcanet++;
  63.                                         if(count_1ms>980){                //1秒到了
  64.                                                 count_1ms=0;
  65.                                                  if(do_success !=0)light_time++;
  66.                                                 if(keyevent_add==1)sec++;
  67.                                                 //sec++;
  68.                                                 if(NETSORT==2){                                                                                //1秒一刷  
  69.                                                                 memcpy(DATA,"",1);
  70.                                                                 Send_UDP_Data_Bag(1);
  71.                                                         }
  72.                                                         press_time();                                                                                                                                        //按键时长
  73.                                                        
  74.                                                 }
  75.                         }
  76.                 press_key();                                //按键
  77.                 change_mode();                                                                                                                                                                        //改变模式
  78.                 DateTest();               
  79.                 WDT_CONTR |=0x10;                                                                                                                                                                                 //喂狗
  80.                 if(keyevent_add==0 && getevent !=6)geiDS3232TIMES();                                                                                                                                                                //实时读取守时芯片时间
  81.                 sendbyte_H(year,mon,day,hour,min,sec);                                        //显示程序         
  82.         }
  83. }

  84. //初始化
  85. void init(){
  86.         P0M0=0X00;
  87.         P0M1=0X00;
  88.         P4M0=0X00;
  89.         P4M1=0X00;
  90.         P2M0 = 0X00;
  91.         P2M1 = 0X00;
  92.         P1M0 = 0;
  93.         P1M1 = 0;
  94.         P3M1 = 0;        P3M0 = 0;        //设置为准双向口
  95.         P5M0 = 0X00;P5M1 = 0X00;
  96. //        AUX = 1;                                                //AUX高电平 进入命令模式 7-21
  97.         AUXR |= 0x80;                                                                                                                                        //设置为1T
  98.         TMOD = 0x00;                                                                            //计数器 16位自动重装模式
  99.         EX1=0;                                //禁止外部中断 0  1
  100.         EX0=0;
  101.   TL0 = (65536-MAIN_Fosc/1000);                 //1T模式  速度为12T模式的12倍
  102.   TH0 = (65536-MAIN_Fosc/1000) >> 8;
  103.         TF0 = 0;                                                                                                                                                //计数器中断
  104.         ET0 = 1;        //Timer0 interrupt enable
  105.         TR0 = 1;        //Tiner0 run                                                                                        //串口一
  106.         PT0 = 1; //设置中断优先级  提升精确度

  107.         // 串口4
  108.        

  109.         P_SW2 = 0x00;                                //串口2在 P1.0 P1.1
  110.         AUXR &= ~(1<<4);        //Timer stop
  111.         AUXR &= ~(1<<3);        //Timer2 set As Timer
  112.         AUXR |=  (1<<2);        //Timer2 set as 1T mode
  113.         T2H = (65536UL - (MAIN_Fosc / 4) / 9600)/ 256;
  114.         T2L = (65536UL - (MAIN_Fosc / 4) / 9600)% 256;
  115.         IE2  &= ~(1<<2);        //禁止中断
  116.         AUXR |=  (1<<4);        //Timer run enable
  117.         S2CON &= ~(1<<7);        // 8位数据, 1位起始位, 1位停止位, 无校验
  118.         IE2   |= 1;                        //允许中断
  119.         S2CON ^= 0xef ;
  120.         S2CON =~S2CON;                //不允许接受
  121.         EA = 1;                //打开总中断
  122.        
  123.         WDT_CONTR=0x07;                 //        设置看门狗位 256分屏
  124.         WDT_CONTR |= 0x20; //启动看们狗

  125. }

  126. /*-----内部中断 计时器1------*/
  127. void init_time0 (void) interrupt 1 using 1  {
  128.                 B_1ms =1;                                        //1毫秒标记位
  129.                 count_1ms++;

  130. }
  131. /*-----内部中断 计时器2------*/
  132. /*   $GNRMC,084032.007,A,2813.0983,N,11253.1384,E,0.39,0.00,270916,,,A* 7B     */
  133. void init_time1(void) interrupt 4 using 1 {
  134. if(RI)
  135.         {
  136.                 RI = 0;
  137.                 receiveData = SBUF;
  138.                 if(get_times<4)BDTIME=1;
  139.         }
  140.         if(TI)
  141.         {
  142.                 TI = 0;
  143.                 B_TX1_Busy = 0;
  144.         }
  145. }
  146. void PrintString1(unsigned char *puts)        //发送一个字符串
  147. {
  148.     for (; *puts != 0;        puts++)           //遇到停止符0结束
  149.         {
  150.                 SBUF = *puts;
  151.                 B_TX1_Busy = 1;
  152.                 while(B_TX1_Busy);
  153.         }
  154. }
  155. /**********************************************************************/
  156. /******************        串口2中断     ******************************/
  157. /* ?4@2015$GNZDA,004827.000,14,10,2016,08,48*0119000173 */
  158. /**********************************************************************/
  159. void UART2_int (void) interrupt 8 using 2
  160. {
  161.         if((S2CON & 1) != 0)
  162.         {
  163.                 S2CON &= ~1;        //Clear Rx flag
  164.                 RX2_Buffer= S2BUF;
  165.                 WX_FLAG=1;
  166.                        
  167.         }

  168.         if((S2CON & 2) != 0)
  169. ……………………

  170. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
51数码管无线调时万年历.zip (597.96 KB, 下载次数: 9)
图片.png
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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