基于MSP430简易示波器的设计讲解Word格式.docx
《基于MSP430简易示波器的设计讲解Word格式.docx》由会员分享,可在线阅读,更多相关《基于MSP430简易示波器的设计讲解Word格式.docx(19页珍藏版)》请在冰豆网上搜索。
P2OUT=0;
P2IE|=0x38;
//P1.4interruptenabled
P2IFG&
=~0x38;
will=0;
UCA0CTL0|=UCCKPL+UCMSB+UCMST+UCSYNC+UCCKPH;
//3-pin,8-bitSPImaster
UCA0CTL1|=UCSSEL_2;
//SMCLK
UCA0BR0|=0x04;
///2
UCA0BR1=0;
//
UCA0MCTL=0;
//Nomodulation
UCA0CTL1&
=~UCSWRST;
//**InitializeUSCIstatemachine**
P1OUT&
=~BIT5;
//NowwithSPIsignalsinitialized,
P1OUT|=BIT5;
//resetslave
ADC10初始化,开启参考源和中断。
ADC10CTL0=ADC10SHT_0+REFON+ADC10ON+ADC10IE;
ADC10CTL1=INCH_6;
ADC10AE0|=0x40;
显示初始化,对LCD的界面显示初始化。
Initial_ILI9340C();
Delay_ms(300);
LCD_TEST_SingleColor(Black);
LCD_TEST_PartColor(Blue);
for(wh=22;
wh<
220;
wh+=10)
{
LCD_draw_Line(wh,39,White);
LCD_draw_Line(wh,79,White);
LCD_draw_Line(wh,119,White);
LCD_draw_Line(wh,159,White);
LCD_draw_Line(wh,199,White);
LCD_draw_Line(wh,239,White);
LCD_draw_Line(wh,279,White);
}
Delay_ms(100);
for(co=2;
co<
320;
co+=10)
LCD_draw_Col(69,co,White);
LCD_draw_Col(119,co,White);
LCD_draw_Col(169,co,White);
2.2程控选择程序
根据按键的次数,在P2口中断改变will的值,并通过P2口输出给CD4051的ABC开关选择端,对放大倍数进行选择。
#pragmavector=PORT2_VECTOR
__interruptvoidPort_2(void)
{
if(P2IFG&
0x10)
{
while(0x10&
P2IN);
will++;
if(will==8)
will=7;
}
0x20)
while(0x20&
will--;
if(will==255)
will=0;
0x08)
while(0x08&
chan++;
if(chan==4)
chan=0;
P2OUT=will;
}
2.3采样频率设置
通过改变ADC10CTL1,通过按键次数对应值不同改变ADC10时钟的频率来调节电路的采样频率。
switch(chan)
{
case0:
break;
case1:
ADC10CTL1|=ADC10DIV0+ADC10DIV1;
case2:
ADC10CTL1|=ADC10DIV0+ADC10DIV2;
case3:
ADC10CTL1|=ADC10DIV0+ADC10DIV1+ADC10DIV2;
break;
}
2.4软件触发程序
只有在一定条件下才使lcd刷新,保证每次采集到的波形都从一点开始显示,防止由于每次采集到的点不同导致波形一直移动。
ADC10CTL0|=ENC+ADC10SC;
//Samplingandconversionstart
__bis_SR_register(CPUOFF+GIE);
if(cir==0)key1=ADC10MEM/5;
if(cir==1)key2=ADC10MEM/5;
if(cir==2)key3=ADC10MEM/5;
if(cir>
2&
&
key1>
key2&
key2>
key3)//((key1-100)/2)>
=(key2-100)
{
temp[0]=key1;
temp[1]=key2;
temp[2]=key3;
temp[cir]=ADC10MEM/5;
ADC10CTL0&
=~ENC;
2.5显示刷新程序
示波器是一个动态显示过程,因此在过程中可能会引起初始界面被部分覆盖,以此需要定时刷新初始界面。
trig++;
if(trig%20==0)
{
for(wh=22;
LCD_draw_Line(wh,39,White);
LCD_draw_Line(wh,79,White);
LCD_draw_Line(wh,119,White);
LCD_draw_Line(wh,159,White);
LCD_draw_Line(wh,199,White);
LCD_draw_Line(wh,239,White);
LCD_draw_Line(wh,279,White);
Delay_ms(300);
for(co=2;
LCD_draw_Col(69,co,White);
LCD_draw_Col(119,co,White);
LCD_draw_Col(169,co,White);
}
附:
源程序
#include"
msp430g2553.h"
//STC12单片机头文件
//颜色定义
#defineBlue0x001f
#defineYellow0xffe0
#defineGreen0x07e0
#defineBlack0x0000
#defineWhite0xffff
#defineRed0xf800
//引脚定义
#defineR_ESET1P1OUT|=BIT5;
//液晶RESET引脚,接单片机IO引脚
#defineR_ESET0P1OUT&
=~BIT5;
#defineC_D1P1OUT|=BIT3;
//液晶D/CX引脚,数据/命令控制,接单片机IO引脚
#defineC_D0P1OUT&
=~BIT3;
#defineC_S1P1OUT|=BIT0;
//液晶片选CS,P1.4为单片机SPI总线的SS引脚,通过MSTR位配置为IO模式
#defineC_S0P1OUT&
=~BIT0;
unsignedcharMST_Data,SLV_Data,wh,temp[320],trig=0,key1,key2,key3,will,chan=0;
unsignedintco,cir;
voiddelay(void)
unsignedintj;
for(j=100;
j>
0;
j--);
voidDelay_us(intvalue)////延时函数_us
while(value)
value--;
voidDelay_ms(intvalue)////延时函数_ms
while(value){
Delay_us(999);
value--;
voidLCD_Writ_Bus(chara){//数据写入函数8位
C_S0;
UCA0TXBUF=a;
__delay_cycles(50);
while(!
(IFG2&
UCA0TXIFG));
C_S1;
voidLCD_WRITE_CMD(charcmd){//8bit
C_D0;
LCD_Writ_Bus(cmd);
voidLCD_WRITE_COM_DATA(charcom_data){//8bit
C_D1;
LCD_Writ_Bus(com_data);
voidLCD_WRITE_DATA(inta){//16位数据,分两次,每次送8位
LCD_Writ_Bus(a>
>
8);
LCD_Writ_Bus(a);
//设置绘点窗口,x=0~239,y=0~319
voidAddress_set(unsignedintx1,unsignedintx2,unsignedinty1,unsignedinty2)
LCD_WRITE_CMD(0x2a);
//x轴
LCD_WRITE_DATA(x1);
LCD_WRITE_DATA(x2);
LCD_WRITE_CMD(0x2b);
//y轴
LCD_WRITE_DATA(y1);
LCD_WRITE_DATA(y2);
LCD_WRITE_CMD(0x2c);
voidLCD_TEST_SingleColor(intDiscolor){
inti,j;
Address_set(0,239,0,319);
for(i=0;
i<
320;
i++){
for(j=0;
j<
240;
j++){
LCD_WRITE_DATA(Discolor);
voidLCD_TEST_PartColor(intDiscolor){
Address_set(0,19,0,319);
20;
Address_set(220,239,0,319);
for(j=220;
//画一条横线
voidLCD_draw_Line(unsignedintx,unsignedinty,unsignedintcolor)
{inti;
Address_set(x,x+4,y,y);
5;
LCD_WRITE_DATA(color);
voidLCD_draw_Col(unsignedintx,unsignedinty,unsignedintcolor)
Address_set(x,x,y,y+4);
//液晶主控初始化
voidInitial_ILI9340C(void)
LCD_WRITE_CMD(0xCB);
LCD_WRITE_COM_DATA(0x39);
LCD_WRITE_COM_DATA(0x2C);
LCD_WRITE_COM_DATA(0x00);
LCD_WRITE_COM_DATA(0x34);
LCD_WRITE_COM_DATA(0x02);
LCD_WRITE_CMD(0xCF);
LCD_WRITE_COM_DATA(0XC1);
LCD_WRITE_COM_DATA(0X30);
LCD_WRITE_CMD(0xE8);
LCD_WRITE_COM_DATA(0x85);
LCD_WRITE_COM_DATA(0x78);
LCD_WRITE_CMD(0xEA);
LCD_WRITE_CMD(0xED);
LCD_WRITE_COM_DATA(0x64);
LCD_WRITE_COM_DATA(0x03);
LCD_WRITE_COM_DATA(0X12);
LCD_WRITE_COM_DATA(0X81);
LCD_WRITE_CMD(0xF7);
LCD_WRITE_COM_DATA(0x20);
LCD_WRITE_CMD(0xC0);
//Powercontrol
LCD_WRITE_COM_DATA(0x23);
//VRH[5:
0]
LCD_WRITE_CMD(0xC1);
LCD_WRITE_COM_DATA(0x10);
//SAP[2:
0];
BT[3:
LCD_WRITE_CMD(0xC5);
//VCMcontrol
LCD_WRITE_COM_DATA(0x3e);
//对比度调节
LCD_WRITE_COM_DATA(0x28);
LCD_WRITE_CMD(0xC7);
//VCMcontrol2
LCD_WRITE_COM_DATA(0x86);
//--
LCD_WRITE_CMD(0x36);
//MemoryAccessControl
LCD_WRITE_COM_DATA(0xC8);
LCD_WRITE_CMD(0x3A);
LCD_WRITE_COM_DATA(0x55);
LCD_WRITE_CMD(0xB1);
LCD_WRITE_COM_DATA(0x18);
LCD_WRITE_CMD(0xB6);
//DisplayFunctionControl
LCD_WRITE_COM_DATA(0x08);
LCD_WRITE_COM_DATA(0x82);
LCD_WRITE_COM_DATA(0x27);
LCD_WRITE_CMD(0xF2);
//3GammaFunctionDisable
LCD_WRITE_CMD(0x26);
//Gammacurveselected
LCD_WRITE_COM_DATA(0x01);
LCD_WRITE_CMD(0xE0);
//SetGamma
LCD_WRITE_COM_DATA(0x0F);
LCD_WRITE_COM_DATA(0x31);
LCD_WRITE_COM_DATA(0x2B);
LCD_WRITE_COM_DATA(0x0C);
LCD_WRITE_COM_DATA(0x0E);
LCD_WRITE_COM_DATA(0x4E);
LCD_WRITE_COM_DATA(0xF1);
LCD_WRITE_COM_DATA(0x37);
LCD_WRITE_COM_DATA(0x07);
LCD_WRITE_COM_DATA(0x09);
LCD_WRITE_CMD(0XE1);
LCD_WRITE_COM_DATA(0x14);
LCD_WRITE_COM_DATA(0x11);
LCD_WRITE_COM_DATA(0xC1);
LCD_WRITE_COM_DATA(0x48);
LCD_WRITE_COM_DATA(0x36);
LCD_WRITE_CMD(0x11);
//ExitSleep
Delay_ms(120);
LCD_WRITE_CMD(0x29);
//Displayon
LCD_WRITE_CMD(0x2c);
//LCD进入休眠状态
voidLCD_Sleep_ILI9340C(void)
LCD_WRITE_CMD(0x28);
//Displayoff
Delay_ms(20);
LCD_WRITE_CMD(0x10);
//EnterSleepmode
//LCD退出休眠状态
voidLCD_ExitSleep_ILI9340C(void)
//ExitSleep
//Displayon
voidmain()
__delay_cycles(75);
//Waitforslavetoinitialize
Initial_ILI9340C();