?? msp430液晶與數碼管同時顯示簡易走時鐘.c
字號:
//已經調試通過 南京航空航天大學 魏小龍
//LCD顯示程序,使用于430實驗板的電表液晶。可以直接下載到電路運行的
//走時鐘程序 液晶與數碼管同時顯示 只有秒與分,(只是意思以一下,不準的哦)其他原理一樣,希望網友自己編寫。
//*****************************************************************************
// MSP-FET430P440 Demo - LCD Put "6543210" on STK/EVK LCD
//
// Description; Put "6543210" on MSP-EVK430S320 LCD.
// ACLK = LFXT1 = 32768, MCLK = SMCLK = DCO = 32xACLK = 1.048576MHz
// //*An external watch crystal is required on XIN/XOUT for ACLK*//
//
// MSP430F449
// -----------------
// /|\| XIN|-
// | | | 32kHz
// --|RST XOUT|-
// | |
// +-|R33 P5.1| -----------------
// 1m | - |--> | + 7 6 5 4 3 2 1 |
// +-|R23 P3.2| -----------------
// 1m | COM0|-----||||
// +-|R13 COM1|------|||
// 1m | COM2|-------||
// +-|R03 COM3|--------|
// | | |
// Vss
//
// M.Buccini
// Texas Instruments, Inc
// January 2002
// Built with IAR Embedded Workbench Version: 1.25A
//*****************************************************************************
#include <msp430x44x.h>
unsigned char disbuffer[8]={0,1,3,8,0xf,5,0x18,7};
char digit[20] = {1,0,0,0,0,2,1,8
};
char distab[10]={0xd7,0x06,0xe3,0xa7,0x36,0xb5,0xf5,0x07,0xf7,0xb7};
unsigned char seg[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0xbf,0x86,0xdb,0xcf,
0xe6,0xed,0xfd,0x87,
0xff,0xef,0xf7,0xfc,
0xb9,0xde,0xf9,0xf1,
0x80,0x40,0x00,0x73,0xc0};
void delay(int v)
{
while(v!=0)v--;
}
void disp(void)
{
unsigned char i=0,j=0;
unsigned char temp_wei=0x0,temp_duan=0;
P3DIR = 0x1f;
for(i=0;i<8;i++)
{
P3OUT &= ~BIT3;
temp_duan=seg[disbuffer[i]] ;
for(j=0;j<8;j++)
{
if(temp_duan&0x80)
P3OUT |= BIT0;
else
P3OUT &= ~BIT0;
temp_duan=temp_duan<<1;
P3OUT &= ~BIT4; P3OUT |= BIT4;
}
P3OUT |= BIT3;
P3OUT = (P3IN&0xf8) | temp_wei;
temp_wei++;
delay(100);
}
for(i=0;i<8;i++)
{ P3OUT &= ~BIT0; P3OUT &= ~BIT4; P3OUT |= BIT4; }
}
void main(void)
{
int i;
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
FLL_CTL0 |= XCAP14PF; // Configure load caps
// LCDCTL = LCDON + LCD4MUX + LCDP2; // STK LCD 4Mux, S0-S17
LCDCTL = 0XFD;
BTCTL = BTFRFQ1; // STK LCD freq
P5SEL = 0xFC; // Common and Rxx all selected
for(i=0;i<20;i++)
LCDMEM[i]=0;
for (i=1; i<9; ++i) // Display "6543210"
LCDMEM[i] = distab[digit[i-1]];//digit[i];
TACTL = TASSEL1 + TACLR; // SMCLK, clear TAR
CCTL0 = CCIE; // CCR0 interrupt enabled
CCR0 = 20000;
TACTL |= MC1; // Start Timer_A in continuous mode
_EINT(); // Enable interrupts
for (;;)
{
_BIS_SR(CPUOFF); // CPU off
_NOP(); // Required only for C-spy
}
}
interrupt[TIMERA0_VECTOR] void Timer_A (void)
{ char i=0;
// P5OUT ^= 0x02; // Toggle P5.1
disp();
for(i=0;i<8;i++)
disbuffer[8-i]=digit[i];
CCR0 += 20000; // Add Offset to CCR0
for(i=0;i<6;i++)
LCDMEM[i+1]=distab[digit[i]];
digit[0]++;
if(digit[0]==50)
{
digit[0]=0;
digit[1]++;
if(digit[1]==10)
{
digit[1]=0;
digit[2]++;
if(digit[2]==6)
{
digit[2]=0;
digit[3]++;
if(digit[3]==10)
{
digit[3]=0;
digit[4]++;
if(digit[4]==6)
{
digit[4]=0;
}
}
}
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -