电路设计,软件开发,专业项目团队承接电子产品开发!


ISPRO下载型编程器
火爆销售中

RS232/TTL转换器
全IC串口窃电

RS232/TTL转换线
全IC串口窃电

ByteBlasterMV Cable
CPLD/FPGA并口下载线

ByteBlaster II Cable ISPRO下载型编程器
支持S51/AVR/PIC
超级51开发板套件
前卫实用超值

PC/MCU/CPLD
三合一学习套件

全新万年历方案
AVR单片机开发板
 

Min51单片机仿真机
迷你型

ARM7开发板
仅售260元!
 

RS-232/RS-485双向接口电平转换器  

51单片机升级STM32
火爆销售中
MPLAB-ICD2
火爆销售中
LED51开发板
玩具又名图文显示棒

面板模块/开发板
经济危机明智决择

       

GSM MODEM GSM猫

SMS短信模块 工业级/全自动
火爆销售中

大功率数传电台

高速数传电台

您当前位置:电子技术资料 -> 外围驱动 -> 程序框架范例 ->

祝您阅读愉快!

ISPRO下载型编程器

RS232 TO TTL转换器
↑↑本文相关产品介绍↑↑

msp430x41x闹钟程序


类别:技术文章
来源:未知
作者:未知
关键字:msp430x41x
加入日期:2010-8-3

//#pragma language=extended
#include "msp430x41x.h"
//#include "turkynew.s43"
//***************************************************
//* 时钟程序version1.1
//* BLY
//*此程序是MSP430 C语言示范程序
//中国电子网 www.EC66.com
//**********标号**************************************
#define DSC 0X2
#define DS1 0X1 //92H
#define DS2 0X2
#define DS3 0X8
#define DS4 0X4
#define SET_FUNCTION 0x8
#define SET_ACTION 0x20
#define SET_ALERT 0X80
#define FALSE 0
#define TRUE 1
//**********函数声明**********************************
void init_io(void);
void display(void);
void setuplcd(void);
void delay(long v);
void alarm(long t);
void disp(char a,int lcdmem);
void flashdisp(char b,int lcdadd);
//*****************************************************
//**********全局变量***********************************
typedef struct {
char second;
char minute;
char hour;
} TIME;
no_init TIME cur_time,set_time1,set_time2,adj_time;
int count;
//int *look=&count;
char adjust=FALSE;
char flash,k,ALARMFLAG,count2;
volatile char h,flag;
//*****************数码表*******************************
char table[17]={
0xD7, // displays "0"
0x06, // displays "1"
0xE3, // displays "2"
0xA7, // displays "3"
0x36, // displays "4"
0xB5, // displays "5"
0xF5, // displays "6"
0x07, // displays "7"
0xF7, // displays "8"
0xB7, // displays "9"
0x77, // displays "A"
0xF4, // displays "B"
0xD1, // displays "C"
0xE6, // displays "D"
0xF1, // displays "E"
0x71, // displays "F"
// 0x00, // displays "灭零"
};
char b[]="Hello";
//***************************************************************
void main(void)
{
int i;
WDTCTL=WDTPW+WDTHOLD;//终止看门构
FLL_CTL0|=XCAP14PF;
init_io();
TACTL=TASSEL0+MC0; //增计数模式
CCTL0=CCIE;
CCR0=0x4000;
for(i=0;i<7;i++)
{
LCDMEM[i]=0;
}
setuplcd();
LCDMEM[0]=DSC;
alarm(10000);
// set_time1.hour=8;
// set_time1.minute=30;
set_time2.hour=11;
set_time2.minute=30;
while(1)
{
P2IES=0XFF;
P2IE|=0XC8; //三个中断:设定时间、 闹钟、清闹钟报警
_EINT();
//_OPC(0XC8);
LPM3;
}
}
void setuplcd(void)
{
LCDCTL=LCDON+LCD4MUX+LCDP0+LCDLOWR;//LCDCTL=3F
BTCTL=BTFRFQ0+BTIP0+BTIP1+BTIP2;
P5SEL=0XFC;
}
void init_io(void)
{
P1DIR=0xFF;
P1OUT=0x22;
P2OUT=0xff;
P6DIR=0XFF;
P6OUT=0X17;
}
interrupt [PORT2_VECTOR]void PORT2(void)
{
if(P2IE&SET_FUNCTION)
{
if(P2IFG&SET_FUNCTION) //调整时间
{
delay(3000);
if(!(P2IN&SET_FUNCTION))
{
LCDMEM[1]=0;
LCDMEM[1]|=0X34; //显示"::"和"4"
adjust=TRUE;
flag=1; //调整标志
P2IE&=~SET_ALERT;
switch(count2%4)
{
case 0:{
adj_time.hour=cur_time.hour;
disp(adj_time.hour,6);
P2IE|=SET_ACTION;
flash=TRUE;
}break;
case 1:{
adj_time.minute=cur_time.minute;
disp(adj_time.hour,6);
flash=TRUE;
}break;
case 2:{
adj_time.second=cur_time.second;
disp(adj_time.minute,4);
flash=TRUE;
}break;
default:{
count2=0xff;
cur_time.hour=adj_time.hour;
cur_time.minute=adj_time.minute;
cur_time.second=adj_time.second;
P2IE&=~SET_ACTION;
P2IE|=SET_ALERT;
adjust=FALSE;
LCDMEM[1]&=~DS4;
}
}
count2++;
}
}
}
if(P2IE&SET_ACTION)
{
if(P2IFG&SET_ACTION)
{
flash=FALSE;
switch(count2%4)
{
case 1:{
adj_time.hour++;
if(adj_time.hour>=24)
{
adj_time.hour=0;
}
disp(adj_time.hour,6);
}break;
case 2:{
adj_time.minute++;
if(adj_time.minute>=60)
{
adj_time.minute=0;
}
disp(adj_time.minute,4);
}break;
case 3:{
adj_time.second++;
if(adj_time.second>=60)
{
adj_time.second=0;
}
disp(adj_time.second,2);
}break;
default:{
count2=0;
cur_time.hour=adj_time.hour;
cur_time.minute=adj_time.minute;
cur_time.second=adj_time.second;
P2IE&=~SET_ACTION;
adjust=FALSE;
display();
}
}
}
}
if(P2IFG&0X40) //关闹钟
{
ALARMFLAG^=1;
if(!ALARMFLAG)
{
LCDMEM[1]|=DS1;
LCDMEM[1]&=~(DS2+DS3+DS4);
}
else
{
LCDMEM[1]|=DS2;
LCDMEM[1]&=~(DS1+DS3+DS4);
}
}
if(P2IE&SET_ALERT)
{
if(P2IFG&SET_ALERT) //设闹钟
{
delay(2000);
if(!(P2IN&SET_ALERT))
{
LCDMEM[1]=0;
LCDMEM[1]|=0X38; //显示"::"和"3"
adjust=TRUE;
flag=2; //设闹钟标志
P2IE&=~SET_FUNCTION;
switch(count2%4)
{
case 0:{
adj_time.hour=set_time1.hour;
disp(set_time1.hour,6);
disp(set_time1.minute,4);
disp(set_time1.second,2);
P2IE|=SET_ACTION;
flash=TRUE;
}break;
case 1:{
adj_time.minute=set_time1.minute;
disp(adj_time.hour,6);
flash=TRUE;
}break;
case 2:{
adj_time.second=set_time1.second;
disp(adj_time.minute,4);
flash=TRUE;
}break;
default:{
count2=0xff;
set_time1.hour=adj_time.hour;
set_time1.minute=adj_time.minute;
set_time1.second=adj_time.second;
P2IE&=~SET_ACTION;
P2IE|=SET_FUNCTION;
adjust=FALSE;
LCDMEM[1]&=~DS3;
}
}
count2++;
}
}
}
P2IFG=0;
}
//#pragma function=interrupt
//#pragma INTVEC=TIMERA0_VECTOR
//[TIMERA0_VECTOR] void Timer(void)
interrupt [TIMERA0_VECTOR]void Timer(void)
{
count++;
if(count%2)
{
cur_time.second++;
if(cur_time.second>=60)
{
cur_time.second=0;
cur_time.minute++;
if(cur_time.minute>=60)
{
cur_time.minute=0;
cur_time.hour++;
if(cur_time.hour>=24)
cur_time.hour=0;
}
}
}
if(!adjust)
{
display();
LCDMEM[1]^=0X30;
if((cur_time.second==0)&&(cur_time.minute==0))
{
h=cur_time.hour%12;
if(!h)
h=12;
h*=2;
h-=1;
}
if(h)
{
h--;
if(count%2)
alarm(10000); //整点报警
}
if(!ALARMFLAG)
{
if((cur_time.minute==set_time1.minute)&&(cur_time.hour==set_time1.hour))
{alarm(10000);} //8:30报警
}
if(ALARMFLAG)
{if((cur_time.minute==set_time2.minute)&&(cur_time.hour==set_time2.hour))
{alarm(10000);} //11:30报警
}
}
else
{ if(flash) //闪烁
{ k^=1;
switch(count2%4)
{
case 1:{
flashdisp(adj_time.hour,6);
} break;
case 2:{
flashdisp(adj_time.minute,4);
} break;
case 3:{
flashdisp(adj_time.second,2);
} break;
}
}
}
}
#pragma function=default
void alarm(long t)
{
P6OUT|=0x80;
delay(t);
P6OUT&=0X7F;
}
void delay(long v)
{
while(v!=0)v--;
}
void flashdisp(char b,int lcdadd)
{
if(k)
disp(b,lcdadd);
else
{
LCDMEM[lcdadd]=0;
LCDMEM[lcdadd+1]=0;
}
}
void disp(char a,int lcdmem)
{
LCDMEM[lcdmem]=table[a%10];
LCDMEM[lcdmem+1]=table[a/10];
}
void display(void)
{
LCDMEM[2]=table[cur_time.second%10];
LCDMEM[3]=table[cur_time.second/10];
LCDMEM[4]=table[cur_time.minute%10];
LCDMEM[5]=table[cur_time.minute/10];
LCDMEM[6]=table[cur_time.hour%10];
LCDMEM[7]=table[cur_time.hour/10];
}

您可能还会关注的相关技术资料:
暂无

中国电子网
www.EC66.com
QQ:34740080 EMAIL:iloveaoe@163.com
最佳浏览:1024*768
Copyright (C) 2001-2010 EC66.COM All Rights Reserved
Aoe/帝国 制作维护
粤ICP备18061901号