【TI 技术资料分享】+基于单片机MSP430的DS1302的时钟芯片编...

2019-07-30 18:25发布

基于单片机MSP430的DS1302的时钟芯片编程,实现时钟显示 基于单片机MSP430的DS1302的时钟芯片编程,实现时钟显示.zip (77.71 KB, 下载次数: 20) 2015-3-10 17:16 上传 点击文件名下载附件
  1. /****************************************************
  2. 程序功能:在1602液晶上显示一个数字日历,可以通过
  3.           四个按键来设置各种参数
  4. -----------------------------------------------------
  5. 拨码开关设置:将LCD位、KEY位拨至ON,其余拨至OFF
  6. 测试说明:(1)按K1键进入设置模式并可以选择更改参
  7.                数的位置,
  8.           (2)按K2键单方向增加数值
  9.           (3)按K3键放弃当前修改回到工作模式
  10.           (4)按K4键保存当前数值回到工作模式
  11.            实际按键观察测试。
  12. ******************************************************/
  13. #include <msp430x14x.h>
  14. #include "cry1602.h"
  15. #include "cry1602.C"
  16. #include "DS1302.h"
  17. #include "DS1302.C"
  18. #include "Key.c"

  19. //顺序:秒,分,时,日,月,星期,年;格式:BCD
  20. uchar times[7];
  21. //液晶显示数字编码
  22. uchar shuzi[] = {"0123456789"};
  23. //游标位置变量
  24. uchar PP = 0;
  25. //是否处于修改状态标志,1--是,0--否
  26. uchar cflag = 0;

  27. uchar Key4Scan(void);
  28. void ShowTime(void);
  29. /****************主函数****************/
  30. void main(void)
  31. {   
  32.     /*下面六行程序关闭所有的IO口*/
  33.     P1DIR = 0XFF;P1OUT = 0XFF;
  34.     P2DIR = 0XFF;P2OUT = 0XFF;
  35.     P3DIR = 0XFF;P3OUT = 0XFF;
  36.     P4DIR = 0XFF;P4OUT = 0XFF;
  37.     P5DIR = 0XFF;P5OUT = 0XFF;
  38.     P6DIR = 0XFF;P6OUT = 0XFF;
  39.   
  40.     WDTCTL = WDTPW + WDTHOLD;   //关闭看门狗
  41.     P6DIR |= BIT2;P6OUT |= BIT2;  //关闭电平转换
  42.    
  43.     P1DIR = 0x80;               //P1.7设置为输出,其余为输入
  44.     P1OUT = 0x00;
  45.    
  46.     Reset_DS1302();             //初始化DS1302
  47.     LcdReset();                 //初始化液晶
  48.     while(1)
  49.     {
  50.         if(!cflag)
  51.         {
  52.             Get_DS1302(times);          //获取时间数据
  53.             ShowTime();                 //转换显示
  54.         }
  55.         
  56.         switch(Key4Scan())
  57.         {
  58.         case 0x01:
  59.                     switch(PP++)      //确定游标地址
  60.                     {
  61.                     case 0: LocateXY(4,0);break;
  62.                     case 1: LocateXY(7,0);break;
  63.                     case 2: LocateXY(10,0);break;
  64.                     case 3: LocateXY(13,0);break;
  65.                     case 4: LocateXY(4,1);break;
  66.                     case 5: LocateXY(7,1);break;
  67.                     case 6: LocateXY(10,1);break;
  68.                     default:break;
  69.                     }                  
  70.                     LcdWriteCommand(0x0f, 1);   //打开游标
  71.                     if(PP == 7) PP = 0;
  72.                     cflag = 1;          //标志置位
  73.                     break;
  74.         case 0x02:
  75.                     if(cflag)
  76.                     {
  77.                         switch(PP)
  78.                         {
  79.                         case 1:         //年
  80.                                 times[6]++;
  81.                                 if((times[6]&0x0f) == 0x0a)
  82.                                 {
  83.                                     times[6] += 0x06;      
  84.                                 }
  85.                                 if(times[6] > 0x99)
  86.                                 {
  87.                                     times[6] = 0x00;   
  88.                                 }
  89.                                 Disp1Char(3,0,shuzi[times[6]>>4]);
  90.                                 Disp1Char(4,0,shuzi[times[6]&0x0f]);
  91.                                 LocateXY(4,0);
  92.                                 break;
  93.                         case 2:         //月
  94.                                 times[4]++;
  95.                                 if((times[4]&0x0f) == 0x0a)
  96.                                 {
  97.                                     times[4] += 0x06;      
  98.                                 }
  99.                                 if(times[4] > 0x12)
  100.                                 {
  101.                                     times[4] = 0x01;   
  102.                                 }
  103.                                 Disp1Char(6,0,shuzi[times[4]>>4]);
  104.                                 Disp1Char(7,0,shuzi[times[4]&0x0f]);
  105.                                 LocateXY(7,0);
  106.                                 break;
  107.                          case 3:         //日
  108.                                 times[3]++;
  109.                                 if((times[3]&0x0f) == 0x0a)
  110.                                 {
  111.                                     times[3] += 0x06;      
  112.                                 }
  113.                                 if(times[3] > 0x31)
  114.                                 {
  115.                                     times[3] = 0x01;   
  116.                                 }
  117.                                 Disp1Char(9,0,shuzi[times[3]>>4]);
  118.                                 Disp1Char(10,0,shuzi[times[3]&0x0f]);
  119.                                 LocateXY(10,0);
  120.                                 break;
  121.                          case 4:         //周
  122.                                 times[5]++;
  123.                                 if((times[5]&0x0f) == 0x08)
  124.                                 {
  125.                                     times[5] = 0x01;      
  126.                                 }
  127.                                 Disp1Char(13,0,shuzi[times[5]]);
  128.                                 LocateXY(13,0);
  129.                                 break;
  130.                          case 5:         //时
  131.                                 times[2]++;
  132.                                 if((times[2]&0x0f) == 0x0a)
  133.                                 {
  134.                                     times[2] += 0x06;      
  135.                                 }
  136.                                 if(times[2] > 0x23)
  137.                                 {
  138.                                     times[2] = 0x00;   
  139.                                 }
  140.                                 Disp1Char(3,1,shuzi[times[2]>>4]);
  141.                                 Disp1Char(4,1,shuzi[times[2]&0x0f]);
  142.                                 LocateXY(4,1);
  143.                                 break;
  144.                          case 6:         //分
  145.                                 times[1]++;
  146.                                 if((times[1]&0x0f) == 0x0a)
  147.                                 {
  148.                                     times[1] += 0x06;      
  149.                                 }
  150.                                 if(times[1] > 0x59)
  151.                                 {
  152.                                     times[1] = 0x00;   
  153.                                 }
  154.                                 Disp1Char(6,1,shuzi[times[1]>>4]);
  155.                                 Disp1Char(7,1,shuzi[times[1]&0x0f]);
  156.                                 LocateXY(7,1);
  157.                                 break;
  158.                          case 0:         //时
  159.                                 times[0]++;
  160.                                 if((times[0]&0x0f) == 0x0a)
  161.                                 {
  162.                                     times[0] += 0x06;      
  163.                                 }
  164.                                 if(times[0] > 0x59)
  165.                                 {
  166.                                     times[0] = 0x00;   
  167.                                 }
  168.                                 Disp1Char(9,1,shuzi[times[0]>>4]);
  169.                                 Disp1Char(10,1,shuzi[times[0]&0x0f]);
  170.                                 LocateXY(10,1);
  171.                                 break;
  172.                         default:
  173.                                 break;                           
  174.                                 
  175.                         }
  176.                     }
  177.                     break;
  178.         case 0x03:
  179.                     if(cflag)
  180.                     {
  181.                         cflag = 0;
  182.                         PP = 0;
  183.                         LcdWriteCommand(0x0c, 1);   //关闭游标
  184.                     }
  185.                     break;
  186.         case 0x04:
  187.                     if(cflag)
  188.                     {
  189.                         cflag = 0;
  190.                         PP = 0;
  191.                         LcdWriteCommand(0x0c, 1);   //关闭游标
  192.                         Set_DS1302(times);
  193.                     }
  194.                     break;
  195.         default:
  196.                     break;                    
  197.         }
  198.     }
  199. }
  200. /*******************************************
  201. 函数名称:ShowTime
  202. 功    能:将DS1302的时间转换成10进制显示
  203. 参    数:无
  204. 返回值  :无
  205. ********************************************/   
  206. void ShowTime(void)
  207. {
  208.     uchar h1[14];       //第1行显示数据
  209.     uchar h2[8];        //第2行显示数据
  210.    
  211.     h1[0] = shuzi[2];
  212.     h1[1] = shuzi[0];
  213.     h1[2] = shuzi[times[6]>>4];     //年
  214.     h1[3] = shuzi[times[6]&0x0f];
  215.     h1[4] = 0x2d;       //"-"
  216.     h1[5] = shuzi[times[4]>>4];     //月
  217.     h1[6] = shuzi[times[4]&0x0f];
  218.     h1[7] = 0x2d;       //"-"
  219.     h1[8] = shuzi[times[3]>>4];     //日
  220.     h1[9] = shuzi[times[3]&0x0f];
  221.     h1[10] = 0x20;      //" "
  222.     h1[11] = 0x2a;      //"*"
  223.     h1[12] = shuzi[times[5]];       //周
  224.     h1[13] = 0x2a;      //"*"
  225.     DispNChar(1,0,14,h1);           //在第一行显示
  226.    
  227.     h2[0] = shuzi[times[2]>>4];     //时
  228.     h2[1] = shuzi[times[2]&0x0f];
  229.     h2[2] = 0x3a;       //":"
  230.     h2[3] = shuzi[times[1]>>4];     //分
  231.     h2[4] = shuzi[times[1]&0x0f];
  232.     h2[5] = 0x3a;       //":"
  233.     h2[6] = shuzi[times[0]>>4];     //秒
  234.     h2[7] = shuzi[times[0]&0x0f];
  235.     DispNChar(3,1,8,h2);           //在第二行显示
  236. }
复制代码

0条回答

一周热门 更多>