?? 復件 main.c
字號:
/*采用p3口輸入 p2.0中斷 中斷一次采集一次同時寫入一次*/
#include <msp430x13x.h>
/*#define xie 10 0xea00 //5kb
#define xie 9 0xec00
#define xie 8 0xee00
#define xie 7 0xf000
#define xie 6 0xf200
#define xie 5 0xf400
#define xie 4 0xf600
#define xie 3 0xf800
#define xie 2 0xfa00 */
#define xie1 0xfc00
char a[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
char caiji[2],b=0;
int ifg;
void xie( );
void delay(int v) //延時子程序
{ while(v!=0)v--;}
void display(void) //顯示
{char x1,x2,x3;
x1=(caiji[1]/1+256*caiji[0])/100;
x2=((caiji[1]/1+256*caiji[0])%100)/10;
x3=(caiji[1]/1+256*caiji[0])%10;
P5OUT=a[x1];P4OUT=a[x2];P2OUT=a[x3];
}
void main(void)
{
WDTCTL= WDTPW + WDTHOLD;//關閉看門狗
BCSCTL1&=0X7F;
BCSCTL2|=0X88;//8M直通
int j;
P1DIR=0x00; // P1口為輸入
P2DIR=0xff; // P2 口為輸入
P4DIR=0XFF;
P5DIR=0XFF;
P3SEL|=0X30;
P3DIR|=0X10;
UCTL0|=SWRST;//這之后才能對串口模塊其它寄存器做修改
UCTL0=CHAR;//
UTCTL0=SSEL0+SSEL1;//時鐘源為ACLK(只能來自低速晶體)32768
UBR00=65;
UBR10=3;
UMCTL0=0X54;//波特率為9600
UCTL0&=~SWRST;//這之后發送模塊才能工作
ME1|=0x80+0x40;//允許串口模塊工作
IE1|=URXIE0+UTXIE0;//允許發送和接收中斷
IFG1=0X02;//使UTXIFG0復位
_EINT(); //使能中斷,這是一個C編譯器支持的內部過程。
while(1)
{
if(P1IN==0XFE)
{delay(6000);
if(P1IN==0XFE) //p1.0長按 寫模式
{P4OUT=0XF9;
for(j=1;j<2/*11*/;j++)
{
xie(j);
FCTL1=FWKEY; FCTL3=FWKEY+LOCK;//寫完鎖定
}
P4OUT=0x00;
}
}
if(P1IN==0XFD)
{delay(6000);
if(P1IN==0XFD) //p1.1長按 發送模式
{P5OUT=0XF9;
int seg,t;
for(seg=1;seg<2/*11*/;seg++)
{
char *fasong=(char *)xie1-0x0200*(seg-1);
for(t=0;t<512;t++)
{
TXBUF0=*(fasong+t);
delay(300);
}
}
}}}}
void xie(int duan) //寫某一段
{ int i;
char *xie_duan=(char *)xie1-0x0200*(duan-1);
FCTL1=+FWKEY+ERASE;//擦除一段
FCTL3=FWKEY;//解鎖
*xie_duan=0;//空寫 啟動擦除
FCTL1=FWKEY+WRT;//開始寫入數據
for(i=0;i<257;i++)
{ if (P1IN==0xFB)
{delay(6553);
if (P1IN==0xFB||P2IN==0XFB) //p1.2長按 向模塊發送91
{P2OUT=0xf9;TXBUF0=0x91;delay(65500);ifg=1;}
}
if(ifg==1)
{
*xie_duan++=caiji[0];
*xie_duan++=caiji[1];
ifg=0;display();
}
else
i=i-1;
}
}
#pragma vector=USART0TX_VECTOR //發送中斷
__interrupt void usart0_tx (void)
{;}
#pragma vector=USART0RX_VECTOR //接收中斷
__interrupt void UART0RX0_rx (void)
{
caiji[b]=RXBUF0;delay(300);b=b+1;
if(b==2)b=0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -