单片机课程设计
}
/******************************************************************** * 名称 : Write_Pos
* 功能 : 确定输入数据的位置 * 输入 : x,y * 输出 : 无
***********************************************************************/ void Write_Pos(uchar x,uchar y) {
uchar pos;
if(x == 1) //第一行显示 x = 0x80;
else if(x == 2) //第二行显示 x = 0x90;
else if(x == 3) //第三行显示 x = 0x88;
else if(x == 4) //第四行显示 x = 0x98; pos = x + y-1;
Write_Instruction(pos);//显示地址 }
/******************************************************************** * 名称 : Write_Word_To_12864 * 功能 : 在坐标x,y处写入数据 * 输入 : x,y,*word * 输出 : 无
***********************************************************************/ void Write_Word_To_12864(uchar x,uchar y,uchar *word) {
uchar i; LCD_Init(); Write_Pos(x,y);
for(i = 0;*(word+i)!='\\0';i++) { }
Write_Data(word[i]);
}
void ShowInit() {
Write_Word_To_12864(1,1,\频率计:\_delay_cycles(50000);
15
单片机课程设计
Write_Pos(2,7); Write_Data('H'); Write_Data('z');
_delay_cycles(10000);
}
void ShowF() { Write_Pos(2,4); if(F >= 100000) { Write_Data(tab[F/100000]); Write_Data(tab[F0000/10000]); Write_Data(tab[F000/1000]); Write_Data(tab[F00/100]); Write_Data(tab[F0/10]);
Write_Data(tab[F]);
_delay_cycles(1000); }
else if(F >= 10000) { Write_Data(tab[F/10000]);
Write_Data(tab[F000/1000]); Write_Data(tab[F00/100]); Write_Data(tab[F0/10]); Write_Data(tab[F]); _delay_cycles(1000);
}
else if(F >= 1000) { Write_Data(tab[F/1000]); Write_Data(tab[F00/100]); Write_Data(tab[F0/10]); Write_Data(tab[F]);
_delay_cycles(1000);
}
else if(F >= 100) { Write_Data(tab[F/100]); Write_Data(tab[F0/10]); Write_Data(tab[F]); _delay_cycles(1000);
}
16
单片机课程设计
else if(F >= 10) { } else { }
Write_Data(tab[F]); _delay_cycles(1000); Write_Data(tab[F/10]); Write_Data(tab[F]); _delay_cycles(1000);
}
/******************************************************************** * 名称 : Init_uart0 * 功能 : 初始化串口 * 输入 : 无 * 输出 : 无
***********************************************************************/ void Init_uart0() {
UCA0CTL1|=UCSWRST; //UCA0软件复位 //UCA0CTL0&=~UC7BIT;//字符长度为8 UCA0CTL1|=UCSSEL_2;//选择系统时钟:SMCLK UCA0BR0=0x6D; //波特率为9600 UCA0BR1=0;
UCA0MCTL=0;//UCA0MCTL=UCBRS0; IE2=UCA0RXIE+UCA0TXIE;//开接收使能 UCA0CTL1&=~UCSWRST;
P1SEL|=BIT1+BIT2; //将P1.1 P1.2设为第二功能 P1SEL2|=BIT1+BIT2; }
/******************************************************************** * 名称 : Uart0Sends * 功能 : 串口发送数据 * 输入 : *s * 输出 : 无
***********************************************************************/ void Uart0SendsData(char *s) {
while(*s!='\\0') {
UCA0TXBUF=*s;
while((IFG2&UCA0TXIFG)==0); //查询发送是否结束
17
单片机课程设计
IFG2&=~UCA0TXIFG; //清除发送一标志位 s++; } }
/******************************************************************** * 名称 : Init_In
* 功能 :初始化外部终端 * 输入 : 无 * 输出 : 无
***********************************************************************/ void Init_In() { }
P1DIR |= BIT6; P1DIR &= ~BIT3; P1IES |= BIT3; P1IE |= BIT3; P1IFG &= ~BIT3; _EINT();
void Init_Timer() { }
TACCTL0 = CCIE; // CCR0 interrupt enabled TACCR0 = 1;
TACTL = TASSEL_1 + MC_1 + TAIE + TACLR; //up mode
/******************************************************************** * 名称 : Int_To_String
* 功能 :将一个int型数据转换为String型 * 输入 : now_f
* 输出 : 无
***********************************************************************/ void Int_To_String(unsigned long int now_f) {
int j = 0;
for(j = 0; ;j++) {
int_array[j] = now_f % 10 + 48 ; now_f = now_f / 10; if(now_f == 0) break;
18
单片机课程设计
}
void main() {
WDTCTL = WDTPW + WDTHOLD;
P1DIR |= BIT7; // P1.0 output P1DIR |= BIT0;
if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF) {
while(1); // If calibration constants erased // do not load, trap CPU!! }
//1Mhz
BCSCTL1 = CALBC1_1MHZ; // Set range
DCOCTL = CALDCO_1MHZ; // Set DCO step + modulation */ } int i = j ;
for(i = j , j = 0; i >= 0; i--,j++) { }
int_to_string[j] = int_array[i];
LCD_Init(); Init_In(); Init_Timer(); Init_uart0(); ShowInit(); while(1) { }
ShowF();
}
#pragma vector=PORT1_VECTOR __interrupt void port_1() {
if(P1IFG & BIT3) {
P1OUT ^= BIT6; port_i++; if(port_i>=100) {
port_i = 0;
19