📄 main.txt
字号:
/***********************************************
************************************************/
#include <msp430x14x.h>
#include "key3.h"
#include "lcd.h"
//#include "flash.h"
typedef unsigned char uchar;
//#define Data_sin 0x1080
#define Data_Dir P3DIR
#define Data_Port P3OUT
#define Ctrl_Dir P5DIR
#define DA1CS_CLR P5OUT&=~(BIT0);
#define DA1CS_SET P5OUT|=BIT0;
#define DA2CS-SET P5OUT|=BIT1;
#define DA2CS_CLR P5OUT&=~(BIT1);
#define WR_SET P5OUT|=BIT2;
#define WR_CLR P5OUT&=~(BIT2);
//引用外部变量的声明
unsigned char key_val;
unsigned char key_Flag;
uchar vref[52]={ 0x00,0x05,0x0a,0x0f,0x14,0x19,0x1e,0x23,0x28,0x2d,
0x32,0x37,0x3c,0x41,0x46,0x4b,0x50,0x55,0x5a,0x60,
0x65,0x6a,0x6f,0x74,0x79,0x7e,0x83,0x88,0x8d,0x92,
0x97,0x9c,0xa1,0xa6,0xab,0xb0,0xb5,0xba,0xc0,0xc5,
0xca,0xcf,0xd4,0xd9,0xde,0xe3,0xe8,0xed,0xf2,0xf7,
0xfc,0xff};//步进0.1V
uchar sin[256]={0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5
,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5
,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd
,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda
,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99
,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51
,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16
,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02 ,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15
,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e
,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66 ,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80 };
/*uchar sin[128]={0x80,0x87,0x91,0x95,0x99,0xa2,0xa6,0xb0,
0xb4,0xb7,0xc0,0xc4,0xc7,0xd0,0xd3,0xd6,
0xd9,0xe1,0xe4,0xe6,0xe8,0xea,0xf2,0xf3,
0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfd,0xff,
0xfd,0xfc,0xfa,0xf8,0xf7,0xf6,0xf5,0xf3,
0xf2,0xf0,0xe8,0xe6,0xe4,0xe1,0xd9,0xd6,
0xd3,0xd0,0xc7,0xc4,0xc0,0xb7,0xb4,0xb0,
0xa7,0xa3,0x99,0x95,0x92,0x88,0x84,0x80,
0x76,0x72,0x68,0x64,0x60,0x56,0x53,0x50,
0x46,0x43,0x39,0x36,0x32,0x30,0x26,0x23,
0x20,0x18,0x16,0x14,0x11,0x09,0x08,0x06,
0x05,0x03,0x02,0x01,0x01,0x00,0x00,0x00,
0x00,0x00,0x01,0x02,0x02,0x04,0x05,0x06,
0x07,0x09,0x11,0x13,0x16,0x18,0x20,0x23,
0x26,0x29,0x32,0x35,0x38,0x42,0x45,0x49,
0x52,0x56,0x60,0x64,0x68,0x72,0x76,0x80};*/
int freqency;
uchar i,m_m;
uchar *s1={"Freq:1000Hz"};
uchar *s2={"Vpp:10V"};
uchar *s3={"Freq:"};
uchar *s4={"Vpp:"};
void Timer_B(unsigned int freqency);
//void Timer_A(unsigned int freqency);
/********************主函数********************/
void main(void)
{
// uchar temp;
// int *pFlash;
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
//DCOCTL = DCO0 + DCO1 + DCO2; // Max DCO
// BCSCTL1 = RSEL0 + RSEL1 + RSEL2; // XT2on, max RSEL
//BoardConfig(0xb8); //关闭数码管、流水灯和电平转换
/*------选择系统主时钟为8MHz-------*/
BCSCTL1 &= ~XT2OFF; // 打开XT2高频晶体振荡器
do
{
IFG1 &= ~OFIFG; // 清除晶振失败标志
for (i = 0xFF; i > 0; i--); // 等待8MHz晶体起振
}
while ((IFG1 & OFIFG)); // 晶振失效标志仍然存在?
BCSCTL2 |= SELM_2 + SELS; // MCLK和SMCLK选择高频晶振 */
P3DIR=0xff;
P3SEL=0X00;
P5DIR=0x07;
P5SEL=0X00;
init_Port();
LcdReset(); //初始化LCD
DispNChar(0,0,11,s1); //显示提示文字
DispNChar(0,1,6,s2); //显示提示文字
/* while(1)
{
//keyScan();
if(key_Flag == 1)
{
key_Flag = 0;
//显示十位
temp = key_val / 10;
if(temp)
Disp1Char(2,1,0x30+temp); //数字的ASCII码值等于其本身数值加上0x30
else
Disp1Char(2,1,0x20); //0x20是空格对应的ASCII码
//显示个位
temp = key_val % 10;
Disp1Char(3,1,0x30+temp);
}
}*/
for(;;)
{
init_Port();
// DispNChar(0,0,11,s1); //显示提示文字
// DispNChar(0,1,6,s2); //显示提示文字
for(i=0;i<256;i=i+1)
{
DA2CS_CLR;
//WR_CLR;
P3OUT=sin[i];
//P3OUT=sin[i+1];
// P3OUT=sin[i+2];
// P3OUT=sin[i+2];
// P3OUT=sin[i+3];
// P3OUT=sin[i+4];
//P3OUT=sin[i+5];
// P3OUT=sin[i+6];
// P3OUT=sin[i+7];
Timer_B(3);
}
if(key_Flag==1)break;
}
while(1)
{
init_Port();
if(key_Flag==1)
{
key_Flag=0;
Delay();
// Delay();
/* if(key_val ==10)
{
DispNChar(0,0,5,s3);
uchar j;
j=0;
//获取频率
// freqency=0;
switch(j)
{
case 0: freqency=key_val;break ;
case 1: freqency=freqency*10+key_val;break ;
case 2: freqency=freqency*100+freqency*10+key_val;break ;
case 3: freqency=freqency*1000+freqency*100+freqency*10+key_val;
break ;
default:j=0;
}
key_val=key_val|0x30;
LcdWriteData( key_val );
j++;
} */
/*display MAX_MIN*/
/*if(key_val==11)
{
DispNChar(0,1,4,s4);
// delay();
// Check_Key();
uchar k=0;
k++;
switch (k)
{
case 1:m_m=key_val;break;
case 2:m_m=m_m*10+key_val;break;
default:k=0;
}
key_val=key_val|0x30;
LcdWriteData(key_val);
if(k==1)
{LcdWriteData( '.' );}
LcdWriteData('V');
P5OUT&=~BIT0;
P3OUT=vref[m_m];
}*/
/*产生正弦波*/
if(key_val==12)
{
// P5OUT|=~BIT0;
while(1)
{
init_Port();
P5OUT&=~BIT1;//开启DA2的片选信号
for(i=0;i<256;i=i+2)
{
P3OUT=sin[i];
P3OUT=sin[i+1];
Timer_B(3);
//TBCTL=TBSSEL1+TBCLR;//选择MCLK,清除TAR
// TBCCTL0=CCIE;//TBCCR0中断
// TBCCR0=freqency/32;//实现频率32Hz~320KHz
// TBCTL|=MC0;//增计数模式
}
if(key_Flag==1)break;
}
}
/*方波*/
if(key_val==13)
{
while(1)
{
init_Port();
uchar k;
k=0;
P5OUT&=~BIT1;//开启DA2的片选信号
while(k<256)
{
if(i<128){ P3OUT=0x00;}
else P3OUT=0xff;
k=k+2;
Timer_B(3);
//TACTL=TASSEL1+TACLR;//选择MCLK,清除TAR
// CCTL0=CCIE;//TBCCR0中断
// TACCR0=freqency;//实现频率32Hz~320KHz
// TACTL|=MC0;//增计数模式
}
if(key_Flag==1)break;
}
}
/*三角波*/
if(key_val==14)
{
while(1)
{
init_Port();
P5OUT&=~BIT1;
for(i=0;i<256;i=i+1)
{
if(i<128)P3OUT=i;
else P3OUT=255-i;
Timer_B(3);
}
if(key_Flag==1)break;
}
}
//锯齿波
if(key_val==15)
{
while(1)
{
init_Port();
P5OUT&=~BIT1;
for(i=0;i<256;i=i+2)
{
P3OUT=i;
P3OUT=i+1;
Timer_B(3);
//TBCTL=TBSSEL1+TBCLR;//选择MCLK,清除TAR
//TBCCTL0=CCIE;//TBCCR0中断
//TBCCR0=freqency/32;//实现频率32Hz~320KHz
//TBCTL|=MC0;//增计数模式
}
if(key_Flag==1)break;
}
}
}
}
}
//#pragma vector=TIMERB0_VECTOR
//__interrupt void Timer_B (void)
void Timer_B(unsigned int freqency)
{
TBCTL = TBSSEL1 + TBCLR+MC0 ; // ACLK, clear TBR
TBCCTL0 = CCIE; // TRCCR0 interrupt enabled
TBCCR0 =freqency ;
// TBCTL|=;
while(!(TBCTL&BIT0));
//TBCTL=~(MC_1);
TBCTL&=~(BIT0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -