📄 test44x_lcd_led_time2.c
字号:
#include "msp430x44x.h "
static unsigned char sec; //秒寄存器
static unsigned char min; //分寄存器
static unsigned char hour; //小时寄存器
static unsigned char led_disp_bit=0x40;//LED显示位寄存器
//----------------------------------------------------------
const unsigned char lcd_table[12]={
0x7b, //*"0"*//
0x12, //*"1"*//
0x4f, //*"2"*//
0x1f, //*"3"*// //LCD显示代码表
0x36, //*"4"*//
0x3d, //*"5"*//
0x7d, //*"6"*//
0x13, //*"7"*//
0x7f, //*"8"*//
0x3f, //*"9"*//
0x00, //*"no"*//
0x00, //*"no"*//
};
const unsigned char led_table[12]={
0xd7, //*"0"*//
0x14, //*"1"*//
0xcd, //*"2"*//
0x5d, //*"3"*// //LED显示代码
0x1e, //*"4"*//
0x5b, //*"5"*//
0xdb, //*"6"*//
0x15, //*"7"*//
0xdf, //*"8"*//
0x5f, //*"9"*//
0x00, //*"no"*//
0x00, //*"no"*//
};
void rtc(void);
void display_rtc(void);
void display_dec(unsigned char i,unsigned char j);
void led_display(unsigned char i);
//-------------------------------------------------------------
//---------------主程序----------------------------------------
//-------------------------------------------------------------
void main(void)
{
int i;
WDTCTL = WDTPW + WDTHOLD;
BTCTL=BTSSEL+BT_ADLY_500+BTFRFQ1; //BT 0.5S中断
IE2|=BTIE;
P5SEL=0xfc;
LCDCTL=LCDON+LCD4MUX+LCDP2; //LCD模块初始化
P3DIR=0xff; //端口3初始化
P4DIR=0x03; //端口4初始化
P3OUT=0x00; //LED清屏
P4OUT|=0x02;//P4的P4.1位置位
P4OUT&=~0x02;//P4的P4.1位复位
P3OUT=0xff;
P4OUT|=0x01;
P4OUT&=~0x01;
TACTL=TASSEL0+TACLR; //Timer_a 3ms中断
CCTL0=CCIE;
CCR0=100;
TACTL|=MC0;
for (i=0; i<8; ++i) //LCD 清屏
LCDMEM[i] = 0x00;
_EINT(); //允许中断
//*mainloop*//
for(;;)
{
_BIS_SR(LPM3_bits); //进入低功耗模式3
_NOP();
}
}
//------------------------------------------------------
// Basic Timer interrupt service routine
interrupt[BASICTIMER_VECTOR] void basic_timer(void)
{
rtc(); //时钟处理
display_rtc(); //时钟LCD显示
}
//------------------------------------------------------
// Timer_A interrupt service routine
interrupt[TIMERA0_VECTOR] void Timer_A (void)
{
led_disp_bit=led_disp_bit>0x01?led_disp_bit>>1:0x40; //LED显示处理
switch(led_disp_bit) //选择led的刷新位//3ms刷新一位
{
case 1:led_display(led_table[hour/10]);break;
case 2:led_display(led_table[hour%10]+0x20);break;
case 4:led_display(led_table[min/10]);break;
case 8:led_display(led_table[min%10]+0x20);break;
case 16:led_display(led_table[(sec>>1)/10]);break;
case 32:led_display(led_table[(sec>>1)%10]);
}
}
//-------------------------------------------------------
//-------时钟处理程序------------------------------------
//-------------------------------------------------------
void rtc (void)
{
if (++sec < 120)
return;
sec = 0;
if (++min < 60)
return;
min = 0;
if (++hour < 24)
return;
hour = 0;
}
//--------------------------------------------------------
//--------时钟LCD显示程序---------------------------------
//--------------------------------------------------------
void display_rtc(void)
{ int i;
i=sec;
i=i>>1;
display_dec(0,i);
i=min;
display_dec(2,i);
i=hour;
display_dec(4,i);
LCDMEM[6]=0x00;
}
//--------------------------------------------------------
//--------LCD显示处理程序---------------------------------
//--------------------------------------------------------
void display_dec(unsigned char i,unsigned char j)
{
LCDMEM[i]=lcd_table[j%10]+0x80;
LCDMEM[i+1]=lcd_table[j/10];
}
//--------------------------------------------------------
//-------LED 1位显示程序----------------------------------
//-------I 为显示代码值-----------------------------------
void led_display(unsigned char i)
{
P3OUT=i;
P4OUT=0x02;
P4OUT&=~0x02;
P3OUT=~led_disp_bit;
P4OUT=0x01;
P4OUT&=~0x01;
P3OUT=0x00;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -