📄 43019264_demo_0806.c
字号:
}
else if(x<8)
{ x=x-4; cs1=0; cs2=1; cs3=0 ; y=x*16;
}
else
{ x=x-8; cs1=0; cs2=0; cs3=1 ; y=x*16;
}
set_adr(2*lline,y,cs1,cs2,cs3);
set_startline(0,cs1,cs2,cs3);
for(i=0;i<16;i++)
{
wdata(*(p+i),cs1,cs2,cs3);
}
set_adr(2*lline+1,y,cs1,cs2,cs3);
set_startline(0,cs1,cs2,cs3);
for(i=16;i<32;i++)
{
wdata(*(p+i),cs1,cs2,cs3);
}
}
void asc_8_16(uchar *p,uchar lline,uchar x) //正显一个字符8*16, 一行有24个字符(24个列)
{
uchar i,y,cs1,cs2,cs3;
if(x<8)
{ cs1=1; cs2=0; cs3=0 ; y=x*8;
}
else if(x<16)
{ x=x-8; cs1=0; cs2=1; cs3=0 ; y=x*8;
}
else
{ x=x-16; cs1=0; cs2=0; cs3=1 ; y=x*8;
}
set_adr(2*lline,y,cs1,cs2,cs3);
set_startline(0,cs1,cs2,cs3);
for(i=0;i<8;i++)
{
wdata(*(p+i),cs1,cs2,cs3);
}
set_adr(2*lline+1,y,cs1,cs2,cs3);
set_startline(0,cs1,cs2,cs3);
for(i=8;i<16;i++)
{
wdata(*(p+i),cs1,cs2,cs3);
}
}
void qq_16(uchar hang)
{
uchar i=0;
for(i=0;i<48;i++)
{
han_16_16((uchar *)(Bmp017+hantemp[i]*32),i/12,i%12);
}
}
void qq_8_16(uchar hang)
{
uchar i=0;
for(i=0;i<96;i++)
{
asc_8_16((uchar *)(Bmp016+hantemp[i]*16),i/24,i%24);
}
}
void time(void)
{
uchar i=0;
LCDCTL = 0XFD;
BTCTL = BTFRFQ1; // STK LCD freq
P5SEL = 0xFC; // Common and Rxx all selected
for(i=0;i<20;i++)
LCDMEM[i]=0;
adc_s=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
}
interrupt[TIMERA0_VECTOR] void Timer_A (void)
{
uint i=0,temp;
for(i=0;i<20;i++)
LCDMEM[i]=0;
for(i=0;i<8;i++)
disbuffer[8-i]=digit[i];
CCR0 += 60000; // Add Offset to CCR0
if(adc_s!=0xf)
{
LCDMEM[7]=0xa;
LCDMEM[8]=0x90; //显示时间 TIME
LCDMEM[9]=0x12;
LCDMEM[10]=0x80;
LCDMEM[11]=0x2;
LCDMEM[12]=0x93;
LCDMEM[13]=0x72;
LCDMEM[14]=0x5b;
LCDMEM[15]=0x94;
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;
}
}
}
}
}
}
else
{
for(i=0;i<20;i++)
LCDMEM[i]=0;
LCDMEM[8]=0x07;
LCDMEM[9]=0x01; //显示电压 VOLT
LCDMEM[10]=0x80;
LCDMEM[11]=0xF2;
LCDMEM[12]=0x0B;
LCDMEM[13]=0x80;
LCDMEM[14]=0x90;
LCDMEM[15]=0x12;
ADC12CTL0 |= ADC12SC; // Start conversion
while ((ADC12IFG & ADC12BUSY)==0);
{
i=ADC12MEM4;
LCDMEM[5]=distab[i/1000];
temp=i%1000;
LCDMEM[4]=distab[temp/100];
temp=temp%100;
LCDMEM[3]=distab[temp/10];
temp=temp%10;
LCDMEM[2]=distab[temp];
}
_NOP(); // SET BREAKPOINT HERE
}
}
void adc_test(void)
{
LCDCTL = 0XFD;
BTCTL = BTFRFQ1; // STK LCD freq
P5SEL = 0xFC; // Common and Rxx all selected
P6SEL |= 0x10; // Enable A/D channel A0
ADC12CTL0 = ADC12ON+SHT0_2; // Turn on ADC12, set sampling time
ADC12CTL1 = SHP; // Use sampling timer
ADC12CTL0 |= ENC; // Enable conversions
adc_s=0xf; //标志
TACTL = TASSEL1 + TACLR; // SMCLK, clear TAR
CCTL0 = CCIE; // CCR0 interrupt enabled
CCR0 = 20000;
TACTL |= MC1; // Start Timer_A in continuous mode
_EINT(); // Enable interrupts
}
void to_main(void)
{uchar i=0;
for(i=0;i<96;i++)
hantemp[i]=i;
for(i=0;i<20;i++)
LCDMEM[i]=0;
P5DIR=0xFF;
P5SEL=0;
P4DIR=0xFF;
P3DIR=0xFF;
P2DIR=0;
P2IE=0xf;
P2IES=0;
reset();
dison_off(1,1,0,0);
dison_off(1,0,1,0);
dison_off(1,0,0,1);
i=2;
clr();
full();
delay(60000);
clr();
delay(60000);
while(1)
{
_DINT();
clr();
qq_16(i);
for(i=0;i<24;i++)
asc_8_16((uchar *)(welcome+hantemp[i]*16),3,i);
_EINT();
delay(60000);
delay(60000);
delay(60000);
delay(60000);
delay(60000);
_DINT();
clr();
qq_8_16(i);
_EINT();
delay(30000);
}
}
interrupt[PORT2_VECTOR] void P2 (void)
{
uchar temp;
P2IFG=0;
temp=P2IN;
temp=temp&0xD;
if(temp==8)
time();
else if(temp==4)
adc_test();
else if(temp==1)
to_main();
P2IFG=0;
}
void to_pc(void)
{
}
main(void)
{
uchar i;
int j=0;
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
for(i=0;i<96;i++)
hantemp[i]=i;
P5DIR=0xFF;
P4DIR=0xFF;
P1DIR=0x1f;
P1DIR=0X0f;
P1OUT=0X0f;
P1IE=0Xf0;
P1IES=0;
P1IFG=0;
P3DIR=0xFF;
P2DIR=0;
P2IE=0xf;
P2IES=0;
UTCTL0 = SSEL0; // UCLK = ACLK
UBR00 = 0x0D; // 32k/2400 - 13.65
UBR10 = 0x00; // 32k/2400
UMCTL0 = 0x33; // modulation
UCTL0 = CHAR; // 8-bit character *SWRST*
ME1 |= UTXE0 + URXE0; // Enable USART0 TXD/RXD
IE1 |= URXIE0; // Enable USART0 RX interrupt
P2SEL |= 0x30; // P2.4,5 = USART0 TXD/RXD
P2DIR |= 0x10; // P2.4 output direction
// _EINT(); // Enable interrupts
for(i=0;i<8;i++)
disbuffer[i]=i;
reset();
dison_off(1,1,0,0);
dison_off(1,0,1,0);
dison_off(1,0,0,1);
i=2;
clr();
full();
delay(60000);
clr();
delay(60000);
for(i=0;i<20;i++)
LCDMEM[i]=0;
while(1)
{
_DINT();
clr();
qq_16(i);
for(i=0;i<24;i++)
asc_8_16((uchar *)(welcome+hantemp[i]*16),3,i);
// _EINT();
// for(j=0;j<1200;j++)
// disp();
delay(60000);
delay(60000);
_DINT();
clr();
qq_8_16(i);
delay(60000);
delay(60000);
// _EINT();
// for(j=0;j<500;j++)
// disp();
}
}
interrupt[UART0RX_VECTOR] void usart0_rx (void)
{
while ((IFG1 & UTXIFG0) == 0); // USART0 TX buffer ready?
TXBUF0 = RXBUF0; // RXBUF0 to TXBUF0
}
interrupt[PORT1_VECTOR] void key_p1(void)
{
uchar key_;
uchar i=0;
P1IFG=0;
key_=key();
LCDMEM[6]=distab[key_];
disbuffer[0]=key_;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -