📄 main.c
字号:
Write_0108_Data2(0x00);
}
} */
}
void Lcd_num()
{
Set_XY(0,1);
Num1(6);Num2(60);Num2(18);Num2(12);Num2(42);Num2(6);
Set_XY(32,1);
Num1(12);Num1(48);Num1(0); Num1(48);
Set_XY(0,2);
Num1(18);Num2(60);Num2(30);Num2(12);Num2(24);Num2(30);
Set_XY(32,2);
Num1(0); Num1(12); Num1(36);Num1(48); Num1(12);
Set_XY(0,3);
Num1(0);Num1(54);Num2(60);Num2(12);Num2(6);Num2(0);Num2(48);
Set_XY(32,3);
Num1(42);Num1(12);Num1(0);Num1(36);
Set_XY(0,4);
Num1(0);Num1(12); Num2(60); Num2(30);Num2(12); Num2(54); Num2(48);
Set_XY(32,4);
Num1(0); Num1(54); Num1(0); Num1(42); Num1(54);
Set_XY(34,5);
Num1(12);Num1(6);Num1(84);Num1(12); Num1(90);
Set_XY(0,5);
Num2(0);Num2(18);Num2(72);Num2(42);Num2(12);Num2(30);Num2(96);
Set_XY(34,6);
Num1(0);Num1(0);Num1(42);Num1(84);Num1(18);
Set_XY(0,6);
Num2(36);Num2(90);Num2(12);Num2(42);Num2(72);Num2(42);Num2(30);Num2(54);Num2(12);Num2(96);
Set_XY(34,7);
Num1(60);Num1(36); Num1(0); Num1(72); Num1(36);
}
void InitMcuXT(void)
{
unsigned int Iq0;
BCSCTL1&=~XT2OFF; //打开XT2振荡器
do
{
IFG1 &= ~OFIFG; // 清除振荡器失效标志
for (Iq0 = 0xFF; Iq0 > 0; Iq0--); // 延时,等待XT2起振
} while ((IFG1 & OFIFG) != 0); // 判断XT2是否起振
BCSCTL2 =SELM_1+SELS; //选择MCLK和SMCLK为XT2
}
void InitMcuIO( void )
{
P1SEL=0x00; //P1为I/O功能
P1DIR=0xff;
P1OUT=0x00;
P1IE=0x00; //stop interrupt
P2SEL=0x00; //P2为I/O功能
P2DIR=0xff;
P2OUT=0x00;
P2IE=0x00; //stop interrupt
P3SEL=0xf0; //P3.7,P3.6,P3.5,P3.4为SCI
P3DIR=0x50; //P3.6,P3.4输出
P3OUT=0x00;
P4SEL=0x00; //P4为I/O
P4DIR=0xff;
P4OUT=0x00; //0为LED ON,1为LED OFF;
P5SEL=0x00; //P5为I/O功能
P5DIR=0xff;
P5OUT=0x00;
// P6SEL=0xff; //P6?I/O ??
//P6DIR=0x00;
}
//================================================================
// 喇叭响
//================================================================
void PowerOn(void)
{
int j=0x33;
//P1OUT|=(bit6);
//P5OUT&=~(bit0);
//Delay(0xff);
//P5OUT|=(bit0);
for(int m=0;m<8;m++)
{
for(int i=0;i<400;i++)
{
P1OUT&=~(bit6);
Delay();
P1OUT|=(bit6);
Delay();
}
j-=0x03;
}
//================================================================
// 串口初始化
//================================================================
}
void UartInit(uchar mode)
{
switch(mode) //?????
{
case 0:
{
UCTL0 = CHAR;
UCTL1 = CHAR;} break;//Uart settings: n,8,1
case 1:{UCTL0 &= ~SPB;UCTL0 = PEV+PENA+CHAR;}break;//Uart settings: e,8,1
case 2:{UCTL0 &= ~SPB;UCTL0 = PENA+CHAR;} break;//Uart settings: o,8,1
default: break;
}
}
void UartInitBT(uchar mode) //波特率
{
switch(mode)
{
case 0:{
UBR00=0x05;UBR10=0x0d;UMCTL0=0x00;
UBR01=0x05;UBR11=0x0d;UMCTL1=0x00;
} break; //baud = 1200
case 1:{
UBR00=0x82;UBR10=0x06;UMCTL0=0xb7;
UBR01=0x82;UBR11=0x06;UMCTL1=0xb7;
} break; //baud = 2400
case 2:{
UBR00=0x41;UBR10=0x03;UMCTL0=0x00;
UBR01=0x41;UBR11=0x03;UMCTL1=0x00;
} break; //baud = 4800
case 3:{
UBR00=0xa0;UBR10=0x01;UMCTL0=0xc0;
UBR01=0xa0;UBR11=0x01;UMCTL1=0xc0;
}break; //baud = 9600
case 4:{
UBR00=0xd0;UBR10=0x00;UMCTL0=0x05;
UBR01=0xd0;UBR11=0x00;UMCTL1=0x05;
}break; //baud = 19200
case 5:{
UBR00=0x68;UBR10=0x00;UMCTL0=0x40;
UBR01=0x68;UBR11=0x00;UMCTL1=0x40;
}break; //baud = 38400
case 6:{
UBR00=0x45;UBR10=0x00;UMCTL0=0x4A;
UBR01=0x45;UBR11=0x00;UMCTL1=0x4A;
}break; //baud = 57600
default : break;
}
}
void UartCom(uchar mode)
{
UTCTL0 = SSEL1; // UCLK = SMCLK
UTCTL1 = SSEL1;
switch(mode)
{
case 0:{
ME1 |= UTXE0 + URXE0; // Enable USART0 TXD/RXD
IE1 |= URXIE0; // Enable USART0 RX interrupt
}; break;
case 1:{
ME2 |= UTXE1 + URXE1; // Enable USART1 TXD/RXD
IE2 |= URXIE1; // Enable USART1 RX interrupt
}; break;
case 2:{
ME1 |= UTXE0 + URXE0; // Enable USART0 TXD/RXD
IE1 |= URXIE0; // Enable USART0 RX interrupt
ME2 |= UTXE1 + URXE1; // Enable USART1 TXD/RXD
IE2 |= URXIE1; // Enable USART1 RX interrupt
}; break;
default :break;
}
}
void Com0String(uchar *array) //??0????
{
uchar length=0;
uchar i=0;
length=strlen(array);
for(i=0;i<length;i++)
{
while (!(IFG1 & UTXIFG0));
TXBUF0=array[i];
// Delay(0xf);
}
}
/****************************************************************************************/
void Com1String1(uchar *array) //??1????
{
uchar length=0;
uchar i=0;
length=strlen(array);
for(i=0;i<length;i++)
{
while (!(IFG2 & UTXIFG1));
TXBUF1=array[i];
}
Delay();
}
void Com1String(uchar *m) //串口1发送
{
//uchar length=0;
//uchar i=0;
//length=strlen(array);
//for(i=0;i<length;i++)
//{
while (!(IFG2 & UTXIFG1));
TXBUF1=*m;
//}
_NOP();
}
void INIT_MCU_TIMEB(void)
{
TBCTL = TASSEL_2 + TBCLR; //SMCLK,定时器停止并复位,一次=0.25us
TBCCTL0 = CCIE; // CCR0 interrupt enabled
TBCCR0 =40000; //定时10MS
TBCCTL1=OUTMOD_7; //将CCR1设为比较模式,中断禁止
TBCCTL2=OUTMOD_7; //将CCR2设为比较模式,中断禁止
TBCCR1=0;
TBCCR2=0;
TBCTL |= MC0; //选择up,16位模式
}
//================================================================
// KS0108BUSY位检测
//================================================================
void Check_0180_State1() //监测BUSY信号
{
uchar ucState;
P2OUT&=~CSA;
P4DIR=0x00;
P2OUT&=~RS;
P2OUT|=RW;
do
{
P2OUT|=E;
_NOP();
_NOP();
ucState=P4IN;
_NOP();
_NOP();
P2OUT&=~E;
//Com1String(&ucState);
}while((ucState&0x80)!=0);
P2OUT|=CSA;
}
void Check_0180_State2()
{
uchar ucState;
P2OUT&=~CSB;
P4DIR=0x00;
P2OUT&=~RS;
P2OUT|=RW;
do
{
P2OUT|=E;
_NOP();
_NOP();
ucState=P4IN;
_NOP();
_NOP();
P2OUT&=~E;
// Com1String(&ucState);
}while((ucState&0x80)!=0);
P2OUT|=CSB;
}
//================================================================
// AD采样初始化
//================================================================
void Init_ADC(void) //AD初始化
{
WDTCTL=WDTPW+WDTHOLD; //停止Watchdog
/* ADC12 Settings: */
P6SEL|=(bit5);
ADC12CTL0&=~ENC; //在进行设置时首先复位ADC的转换使能
ADC12CTL0=SHT0_2+ADC12ON+MSC; //内部振荡器,置位MSC位,因此转换自动进行
ADC12CTL1=SHP+CONSEQ_2;
// 起始地址ADCMEM0 +ADC12DIV_7
//ADC12SC位触发采样和保持ADC12SSEL_2
//采样脉冲由定时器产生
//时钟源:SMCLK 时钟分频:8
//转换模式:单通道,单次转换
//选择参考电压和输入管脚
ADC12MCTL0=INCH_5; //REF=AVss,AVcc;INPUT=A5
ADC12IE|=0x01; //使能通道5转换完成后中断
ADC12CTL0|=ENC; //使能ADC转换
//_EINT();
//ADC12CTL0 |=ADC12SC; //开始转换
//_BIS_SR(LPM0_bits);
// return;
}
void Change_ADC(int data) //输出AD转换结果
{
uchar p,q;
p=((data>>8)&0xff);
q=((data)&0xff);
Com1String(&p);
Com1String(&q);
}
void FlagInt()
{
flag0=0;
flag1=0;
}
void Explainstring(void)
{
uchar value=0;
value=rx1_buf[rx1num];
switch(value)
{
case '0': number=54;break;
case '1': number=0;break;
case '2': number=6;break;
case '3': number=12;break;
case '4': number=18;break;
case '5': number=24;break;
case '6': number=30;break;
case '7': number=36;break;
case '8': number=42;break;
case '9': number=48;break;
case '-': number=60;break;
case '.': number=72;break;
case 'a': number=84;break;
case 'b': number=90;break;
case 'c': number=96;break;
default:
number=102;break;
}
rx1num++;
}
void main( void )
{
//uchar p,q,m,n;
WDTCTL=WDTPW+WDTHOLD; //stop watchdog
InitMcuXT();
InitMcuIO();
//PowerOn();
UartInit(0);
UartInitBT(3);
UartCom(2);
//INIT_MCU_TIMEB();
Delay();
Init_0108();
Lcd_data();
//Lcd_num();
_EINT();
FlagInt();
// Com1String1("Begin to config...\r\n");
while(1)
{
if(flag0==1)
{
flag0=0;
for(int i=0;i<2;i++)
{
Explainstring();
Set_XY((rx1num-2)*6,1);Num1(number);
}
for(int i=0;i<5;i++)
{
Explainstring();
Set_XY(32+(rx1num-4)*6,1);Num1(number);
}
for(int i=0;i<5;i++)
{
Explainstring();
Set_XY((rx1num-9)*6,1);Num2(number);
}
for(int i=0;i<5;i++)
{
Explainstring();
Set_XY(34+(rx1num-14)*6,5);Num1(number);
}
for(int i=0;i<10;i++)
{
Explainstring();
Set_XY((rx1num-19)*6,5);Num2(number);
}
/* for(int i=0;i<2;i++)
{
Explainstring();
Set_XY((rx1num-14)*6,2);Num1(number);
}
for(int i=0;i<5;i++)
{
Explainstring();
Set_XY(32+(rx1num-16)*6,2);Num1(number);
}
for(int i=0;i<5;i++)
{
Explainstring();
Set_XY((rx1num-21)*6,2);Num2(number);
}*/
rx1num=1;
memset(rx1_buf,0,64);
}
if(flag1==1)
{
Clr_Screen();
Lcd_data();
flag1=0;
}
}
}
/////////scib rx
#pragma vector=UART1RX_VECTOR
__interrupt void UART_RX1 (void)
{
if(flag1==0)
{
if(rx1_cnt>63) rx1_cnt=0;
rx1temp=RXBUF1;
if(rx1temp=='I') rx1_cnt=0;
rx1_buf[rx1_cnt]=rx1temp;
rx1_cnt++;
if(rx1_buf[0]=='I')
{
if(rx1temp==0x0a)
{
flag0=1;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -