找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6247|回复: 3
收起左侧

分享一个msp430的简单程序-电子时钟

[复制链接]
ID:207975 发表于 2017-6-5 12:20 | 显示全部楼层 |阅读模式
分享一个大作业的简单程序-电子时钟
0.png

单片机源程序如下:


  1. #include<msp430x14x.h>
  2. #include"LCD1602.h"
  3. #include"settimer.h"
  4. #include"pushkey.h"
  5.         

  6. extern int second;   //1秒计数单位
  7. extern int minute;   //1分钟计数单位
  8. extern int hour;     //1小时计数单位
  9. extern uchar table[11];  //时间显示列表
  10. int flag1 = 0;   //第一个按键标志


  11. void main( void )
  12. {
  13.     // Stop watchdog timer to prevent time out reset
  14.     WDTCTL = WDTPW + WDTHOLD;
  15.    
  16.     set_timer();
  17.     init_timer();
  18.     init_pushkey();
  19.     LcdReset();
  20.    
  21.     while(1)
  22.     {
  23.         LPM3;   //低功耗模式3  
  24.         LcdWriteCommand( 0x80 + 0x00 , 1 );  //设置字符指针,让液晶从头开始显示字符
  25.         display_hour();
  26.         display_minute();
  27.         display_second();
  28.     }
  29. }

  30. /*******************************定时器中断*****************************************/
  31. #pragma vector=TIMERA0_VECTOR   //定时器中断函数,1s进入一次
  32. __interrupt void TIMER_A( void )
  33. {
  34.     if( flag1 == 1 )  //开始计时
  35.     {
  36.         second++;
  37.         if( second >= 60 )
  38.         {
  39.             second = 0;  //second计数到60秒后清零
  40.             minute++; //minute加1
  41.             if( minute >= 60 )
  42.             {
  43.                 minute = 0;   //minute清零
  44.                 hour++;       //hour加1
  45.                 if( hour >= 24 )
  46.                     hour = 0;   //hour计数到24后清零
  47.             }
  48.         }
  49.     }
  50.     LPM3_EXIT;   //退出低功耗模式3
  51. }


  52. /******************************按键检测中断***************************************/
  53. #pragma vector = PORT1_VECTOR
  54. __interrupt void PORT1_ISR( void )
  55. {
  56.     uint i;
  57.     uchar pushkey;
  58.     pushkey = P1IFG & ( BIT0 + BIT1 );   //1、2哪个键按下,则触发中断,P1IFG相应位会置1
  59.     P2DIR |= ( BIT0 + BIT1 +BIT6 );
  60.     P2OUT |= ( BIT0 + BIT1 +BIT6 );   //让LED先都熄灭
  61.    
  62.     for( i = 0; i < 1000; i++ );     //类似于键盘消抖
  63.     if( ( P1IN & pushkey ) == pushkey )     //按键曾经按下去过,触发了中断,但是按键又弹起来了,P1IN处检测是输入了高电平
  64.     {    //按键变为高电平了,判断这个是为毛刺
  65.         P1IFG=0;
  66.         return;
  67.     }
  68.    
  69.     if( pushkey & BIT0 )   //第一个按键按下去了
  70.     {
  71.         flag1 ^= 1;  //可以开始计时
  72.         if( flag1 == 1 )
  73.         {
  74.             P2OUT &=~ BIT0;  //让第一个LED亮起
  75.             delay_key( 3000 );
  76.             P2OUT |= BIT0;
  77.         }
  78.         
  79.         if( flag1 == 0 )
  80.         {
  81.             P2OUT &=~ BIT6;  //让第六个LED亮起
  82.             delay_key( 3000 );
  83.             P2OUT |= BIT6;
  84.         }
  85.     }
  86. ……………………

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

代码下载:
430大作业电子时钟.rar (19.58 KB, 下载次数: 74)
回复

使用道具 举报

ID:515832 发表于 2021-5-21 00:33 | 显示全部楼层
楼主,为啥我烧录后不能用呢,lcd屏显示都是方块
回复

使用道具 举报

ID:634381 发表于 2021-6-16 09:34 | 显示全部楼层
楼主有电路图吗
回复

使用道具 举报

ID:1050636 发表于 2022-11-5 17:38 | 显示全部楼层
求电路图
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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