📄 430_contest.c
字号:
{
P1OUT |= LCD_CS2 ;
P1OUT &=~LCD_CS1 ;
lcd_write_command(xpos-64+0x40) ;
lcd_write_command(ypos+0xb8) ;
lcd_write_data(*byte) ;
}
}
//***********************************************
//***********************************************
void lcd_write_L(uchar xpos,uchar ypos,uchar byte)
{
if(xpos<=63)
{
P1OUT |= LCD_CS1 ;
P1OUT &=~ LCD_CS2 ;
lcd_write_command(xpos+0x40) ;
lcd_write_command(ypos+0xb8) ;
lcd_write_data(byte) ;
}
else
{
P1OUT |= LCD_CS2 ;
P1OUT &=~LCD_CS1 ;
lcd_write_command(xpos-64+0x40) ;
lcd_write_command(ypos+0xb8) ;
lcd_write_data(byte) ;
}
}
//***********************************************
//**********清空液晶屏***************************
void lcd_clear()
{
uchar i,j ;
for(i=0x00;i<=0x7f;i++)
{
for(j=0x00;j<=0x07;j++)
{
lcd_write_byte(i,j,(uchar *)cls) ;
}
}
}
//***********************************************
//**********写一个汉字,16*16大小****************
void lcd_write_hz(uchar hz_xpos,uchar hz_ypos,uchar *hz_source_addr)
{
uchar i=0 ;
for( i = 0 ; i <= 15 ; i++ )
{
lcd_write_byte(hz_xpos*16+i,hz_ypos*2,hz_source_addr+i) ;
}
for( i = 0 ; i <= 15 ; i++ )
{
lcd_write_byte(hz_xpos*16+i,hz_ypos*2+1,hz_source_addr+16+i) ;
}
}
//***********************************************
//**********写一个字符,8*16大小****************
void lcd_write_char(uchar hz_xpos,uchar hz_ypos,uchar *hz_source_addr)
{
uchar i=0 ;
for( i = 0 ; i <= 7 ; i++ )
{
lcd_write_byte(hz_xpos*8+i,hz_ypos*2,hz_source_addr+i) ;
}
for( i = 0 ; i <= 7 ; i++ )
{
lcd_write_byte(hz_xpos*8+i,hz_ypos*2+1,hz_source_addr+8+i) ;
}
}
//***********************************************
//**********显示初始界面*************************
void Show_Title(void)
{
//输出"音频信号分析仪"
lcd_write_hz( 0 , 1 , (uchar * )yin ) ;
lcd_write_hz( 1 , 1 , (uchar * )pin ) ;
lcd_write_hz( 2 , 1 , (uchar * )xin ) ;
lcd_write_hz( 3 , 1 , (uchar * )pin ) ;
lcd_write_hz( 4 , 1 , (uchar * )fen ) ;
lcd_write_hz( 5 , 1 , (uchar * )xi ) ;
lcd_write_hz( 6 , 1 , (uchar * )yi ) ;
//输出"南京航空航天大学"
lcd_write_hz( 0 , 3 , (uchar * )nan ) ;
lcd_write_hz( 1 , 3 , (uchar * )jing ) ;
lcd_write_hz( 2 , 3 , (uchar * )hang ) ;
lcd_write_hz( 3 , 3 , (uchar * )kong ) ;
lcd_write_hz( 4 , 3 , (uchar * )hang ) ;
lcd_write_hz( 5, 3 , (uchar * )tian ) ;
lcd_write_hz( 6 , 3 , (uchar * )da ) ;
lcd_write_hz( 7 , 3 , (uchar * )xue ) ;
}
//***********************************************
//**********显示菜单*****************************
void Show_Menu ( void )
{
lcd_write_char( 0 , 0 , (uchar *)num[1] ) ;
lcd_write_char( 1 , 0 , (uchar *)point ) ;
lcd_write_hz( 1 , 0 , (uchar *)yin ) ;
lcd_write_hz( 2 , 0 , (uchar *)pin ) ;
lcd_write_hz( 3 , 0 , (uchar *)fen ) ;
lcd_write_hz( 4 , 0 , (uchar *)xi ) ;
lcd_write_char( 0 , 1 , (uchar *)num[2] ) ;
lcd_write_char( 1 , 1 , (uchar *)point ) ;
lcd_write_hz( 1 , 1 , (uchar *)xin ) ;
lcd_write_hz( 2 , 1 , (uchar *)pin ) ;
lcd_write_hz( 3 , 1 , (uchar *)fen ) ;
lcd_write_hz( 4 , 1 , (uchar *)xi ) ;
lcd_write_char( 0 , 2 , (uchar *)num[3] ) ;
lcd_write_char( 1 , 2 , (uchar *)point ) ;
lcd_write_hz( 1 , 2 , (uchar *)zhou ) ;
lcd_write_hz( 2 , 2 , (uchar *)qi ) ;
lcd_write_hz( 3 , 2 , (uchar *)ce ) ;
lcd_write_hz( 4 , 2 , (uchar *)liang ) ;
//lcd_write_char( 0 , 3 , (uchar *)num[4] ) ;
// lcd_write_char( 1 , 3 , (uchar *)point ) ;
// lcd_write_hz( 1 , 3 , (uchar *)shi ) ;
//lcd_write_hz( 2 , 3 , (uchar *)zhen ) ;
//lcd_write_hz( 3 , 3 , (uchar *)du ) ;
//lcd_write_hz( 4 , 3 , (uchar *)fen ) ;
//lcd_write_hz( 5 , 3 , (uchar *)xi ) ;
}
//***********************************************
//**********显示频谱分析*************************
void Show_Fre ( void )
{
//输出“频率/Hz 幅度”
lcd_write_hz( 0 , 0 , (uchar *)pin ) ;
lcd_write_hz( 1 , 0 , (uchar *)lv ) ;
lcd_write_char( 4 , 0 , (uchar *)line ) ;
lcd_write_char( 5 , 0 , (uchar *)H ) ;
lcd_write_char( 6 , 0 , (uchar *)z ) ;
lcd_write_hz( 4 , 0 , (uchar *)fu ) ;
lcd_write_hz( 5 , 0 , (uchar *)du ) ;
}
//***********************************************
//**********写一个频率数*************************
void Write_Fre( uchar xpos,uchar ypos, unsigned int k )
{
for ( int i = 0 ; i < 5 ; i ++ )
{
lcd_write_char( xpos+4-i , ypos , (uchar *)num[k%10] ) ;
k /= 10 ;
}
}
//***********************************************
//**********向频谱分析界面写数据*****************
void Write_Fre_Data ( void )
{
for ( int i = 0 ; i < 3 ; i++ )
{
if ( step == 20 )
{
Write_Fre(0 , i+1 , 20*(p+i) ) ;
Write_Fre(8 , i+1 , harm[p+i] ) ;
}
else
{
Write_Fre(0 , i+1 , 20*(p+5*i) ) ;
Write_Fre(8 , i+1 , harm[p+5*i] ) ;
}
}
}
//***********************************************
//**********显示时域分析*************************
void Show_Pow ( void )
{
lcd_write_hz( 0 , 0 , (uchar *)feng ) ;
lcd_write_hz( 1, 0 , (uchar *)feng ) ;
lcd_write_hz(2 , 0 , (uchar *)zhi ) ;
// lcd_write_char( 3 , 0 , (uchar *)line ) ;
//lcd_write_char( 4 , 0 , (uchar *)H) ;
lcd_write_hz( 5 , 0 , (uchar *)jun ) ;
lcd_write_hz( 6 , 0 , (uchar *)zhi ) ;
//lcd_write_char( 13 , 0 , (uchar *)line ) ;
//lcd_write_char( 15 , 0 , (uchar *)H ) ;
lcd_write_hz( 0 , 2 , (uchar *)jun ) ;
lcd_write_hz( 1 , 2, (uchar *)fang) ;
lcd_write_hz( 2 , 2 , (uchar *)gen ) ;
//lcd_write_char( 3 , 2 , (uchar *)zhi ) ;
//lcd_write_char(4 , 2 , (uchar *)line ) ;
//lcd_write_char( 5, 2, (uchar *)H) ;
}
//***********************************************
//**********向时域分析界面写数据*****************
void Write_wave_Data ( float a ,float b,float d)
{
a/=128;
b=sqrt(b/128);
Write_Fre(10,1,a);
Write_Fre(0,3,b);
Write_Fre(0,1,d);
/* for ( int i = 0 ; i < 3 ; i++ )
{
if ( step == 20 )
{
Write_Fre(0 , i+1 , fft_r[p+i] ) ;
Write_Fre(8 , i+1 , fft_i[p+i] ) ;
}
else
{
Write_Fre(0 , i+1 , fft_r[p+5*i] ) ;
Write_Fre(8 , i+1 , fft_i[p+5*i] ) ;
}
}*/
}
//***********************************************
//**********写一个8*8的字符**********************
void lcd_write_ch( uchar xpos , uchar ypos , uchar *hz_source_addr)
{
uchar i=0 ;
for( i = 0 ; i <= 7 ; i++ )
{
lcd_write_byte(xpos*8+i,ypos,hz_source_addr+i) ;
}
}
//***********************************************
//**********画高度为定值的竖直线*****************
void lcd_write_line ( uchar xpos , int h )
{
uchar m ;
m = h ;
for(int i = 0; i < 5; i++ )
{
switch ( m )
{
case 0:
lcd_write_L ( xpos , 7-i , 0x00 ) ;
break ;
case 1:
lcd_write_L ( xpos , 7-i , 0x80 ) ;
m = 0 ;
break ;
case 2:
lcd_write_L ( xpos , 7-i , 0xc0 ) ;
m = 0 ;
break ;
case 3:
lcd_write_L ( xpos , 7-i , 0xe0 ) ;
m = 0 ;
break ;
case 4:
lcd_write_L ( xpos , 7-i , 0xf0 ) ;
m = 0 ;
break ;
case 5:
lcd_write_L ( xpos , 7-i , 0xf8 ) ;
m = 0 ;
break ;
case 6:
lcd_write_L ( xpos , 7-i , 0xfc ) ;
m = 0 ;
break ;
case 7:
lcd_write_L ( xpos , 7-i , 0xfe ) ;
m = 0 ;
break ;
default:
lcd_write_L ( xpos , 7-i , 0xff ) ;
m -= 8 ;
break ;
}
}
}
//***********************************************
//**********画频谱图*****************************
void Show_Fre_Map(void)
{
for ( int m = 0 ; m < 25 ; m++ )
{
if ( step == 20 )
{
lcd_write_line ( 5*m+2 , fft_i[p+m] ) ;
}
else
{
lcd_write_line ( 5*m+2 , fft_i[p+5*m] ) ;
}
}
}
//***********************************************
//**********画功率谱图*****************************
void Show_Pow_Map(void)
{
for ( int m = 0 ; m < 25 ; m++ )
{
if ( step == 20 )
{
lcd_write_line ( 5*m+2 , fft_i[p+m] ) ;
}
else
{
lcd_write_line ( 5*m+2 , fft_i[p+5*m] ) ;
}
}
}
//***********************************************
//**********显示x,y标识**************************
void Show_Zuobiao(void)
{
//显示"x1:"
lcd_write_ch(0 , 0 , (uchar *)x ) ;
lcd_write_ch(1 , 0 , (uchar *)num_half[1] ) ;
lcd_write_ch(2 , 0 , (uchar *)col ) ;
//显示"y1:"
lcd_write_ch(8 , 0 , (uchar *) y ) ;
lcd_write_ch(9 , 0 , (uchar *)num_half[1] ) ;
lcd_write_ch(10 , 0 , (uchar *)col ) ;
//显示"x2:"
lcd_write_ch(0 , 1 , (uchar *)x ) ;
lcd_write_ch(1 , 1 , (uchar *)num_half[2] ) ;
lcd_write_ch(2 , 1 , (uchar *)col ) ;
//显示"y2:"
lcd_write_ch(8 , 1 , (uchar *)y ) ;
lcd_write_ch(9 , 1 , (uchar *)num_half[2] ) ;
lcd_write_ch(10 , 1 , (uchar *)col ) ;
//显示X差
lcd_write_ch(0 , 2 , (uchar *)delta ) ;
lcd_write_ch(1 , 2 , (uchar *)x ) ;
lcd_write_ch(2 , 2 , (uchar *)col ) ;
//显示Y差
lcd_write_ch(8 , 2 , (uchar *)delta ) ;
lcd_write_ch(9 , 2 , (uchar *)y ) ;
lcd_write_ch(10 , 2 , (uchar *)col ) ;
}
//***********************************************
//**********在X,Y处显示标尺**********************
void Draw_Rul(uchar x , uchar y )
{
uchar a , b ;
a = 7-y/8 ;
b = y%8 ;
switch ( b )
{
case 0:
lcd_write_L ( 5*x , a+1 , 0x01 ) ;
lcd_write_L ( 5*x+1 , a+1 , 0x01 ) ;
lcd_write_L ( 5*x+3 , a+1 , 0x01 ) ;
lcd_write_L ( 5*x+4 , a+1 , 0x01 ) ;
break ;
case 1:
lcd_write_L ( 5*x , a , 0x80 ) ;
lcd_write_L ( 5*x+1 , a , 0x80 ) ;
lcd_write_L ( 5*x+2 , a , 0x80 ) ;
lcd_write_L ( 5*x+3 , a , 0x80 ) ;
break ;
case 2:
lcd_write_L ( 5*x , a , 0x40 ) ;
lcd_write_L ( 5*x+1 , a , 0x40 ) ;
lcd_write_L ( 5*x+2 , a , 0x40 ) ;
lcd_write_L ( 5*x+3 , a , 0x40 ) ;
break ;
case 3:
lcd_write_L ( 5*x , a , 0x20 ) ;
lcd_write_L ( 5*x+1 , a , 0x20 ) ;
lcd_write_L ( 5*x+2 , a , 0x20 ) ;
lcd_write_L ( 5*x+3 , a , 0x20 ) ;
break ;
case 4:
lcd_write_L ( 5*x , a , 0x10 ) ;
lcd_write_L ( 5*x+1 , a , 0x10 ) ;
lcd_write_L ( 5*x+2 , a , 0x10 ) ;
lcd_write_L ( 5*x+3 , a , 0x10 ) ;
break ;
case 5:
lcd_write_L ( 5*x , a , 0x08 ) ;
lcd_write_L ( 5*x+1 , a , 0x08 ) ;
lcd_write_L ( 5*x+2 , a , 0x08 ) ;
lcd_write_L ( 5*x+3 , a , 0x08 ) ;
break ;
case 6:
lcd_write_L ( 5*x , a , 0x04 ) ;
lcd_write_L ( 5*x+1 , a , 0x04 ) ;
lcd_write_L ( 5*x+2 , a , 0x04 ) ;
lcd_write_L ( 5*x+3 , a , 0x04 ) ;
break ;
case 7:
lcd_write_L ( 5*x , a , 0x02 ) ;
lcd_write_L ( 5*x+1 , a , 0x02 ) ;
lcd_write_L ( 5*x+2 , a , 0x02 ) ;
lcd_write_L ( 5*x+3 , a , 0x02 ) ;
break ;
}
}
//***********************************************
//**********清除X,Y处标尺************************
void Del_Rul ( uchar x , uchar y )
{
uchar a , b ;
a = 7-y/8 ;
b = y%8 ;
if ( b == 0 )
{
lcd_write_L ( 5*x , a+1 , 0x00 ) ;
lcd_write_L ( 5*x+1 , a+1 , 0x00 ) ;
lcd_write_L ( 5*x+3 , a+1 , 0x00 ) ;
lcd_write_L ( 5*x+4 , a+1 , 0x00 ) ;
}
else
{
lcd_write_L ( 5*x , a , 0x00 ) ;
lcd_write_L ( 5*x+1 , a , 0x00 ) ;
lcd_write_L ( 5*x+2 , a , 0x00 ) ;
lcd_write_L ( 5*x+3 , a , 0x00 ) ;
}
}
//***********************************************
//**********在指定位置写数字*********************
void Write_Num( uchar xpos , uchar ypos , unsigned int k )
{
for (int i=0; i<5; i++)
{
lcd_write_ch( xpos+4-i , ypos , (uchar *) num_half[k%10] ) ;
k /= 10 ;
}
}
//***********************************************
//**********写出坐标值***************************
void Write_Zuobiao(void)
{
Write_Num( 3 , 0 , x1 ) ;
Write_Num( 11 , 0 , y1 ) ;
Write_Num( 3 , 1 , x2 ) ;
Write_Num( 11 , 1 , y2 ) ;
Write_Num( 3 , 2 , dx ) ;
Write_Num( 11 , 2 , dy ) ;
}
//***********************************************
//**********显示周期测量*************************
void Show_T ( void )
{
lcd_write_hz( 3 , 2 , (uchar *)hang ) ;
}
//***********************************************
//**********显示失真度分析***********************
void Show_Dis ( void )
{
lcd_write_hz( 3 , 3 , (uchar *)kong ) ;
}
//***********************************************
void initmsp430()
{
int i;
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog
BCSCTL1 &= ~XT2OFF; // XT2on
do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0xFF; i > 0; i--); // Time for flag to set
}
while ((IFG1 & OFIFG)); // OSCFault flag still set?
BCSCTL2 |= XTS; // ACLK = LFXT1 = HF XTAL
}
void lcd_display_wave (float *data )
{
for(int xpos1=0;xpos1<128;xpos1++)
{
int m ;
m = (int)data[xpos1] ;
for(int i = 0 ; i < 4 ; i++ )
{
switch ( m )
{
case 0:
lcd_write_L ( xpos1 , 7-i , 0x00 ) ;
break ;
case 1:
lcd_write_L ( xpos1 , 7-i , 0x80 ) ;
m = 0 ;
break ;
case 2:
lcd_write_L ( xpos1 , 7-i , 0x40 ) ;
m = 0 ;
break ;
case 3:
lcd_write_L ( xpos1 , 7-i , 0x20 ) ;
m = 0 ;
break ;
case 4:
lcd_write_L ( xpos1 , 7-i , 0x10 ) ;
m = 0 ;
break ;
case 5:
lcd_write_L ( xpos1 , 7-i , 0x08 ) ;
m = 0 ;
break ;
case 6:
lcd_write_L ( xpos1 , 7-i , 0x04 ) ;
m = 0 ;
break ;
case 7:
lcd_write_L ( xpos1 , 7-i , 0x02 ) ;
m = 0 ;
break ;
default:
lcd_write_L ( xpos1 , 7-i , 0x00 ) ;
m -= 8 ;
break ;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -