|
發(fā)現(xiàn)用msp430做簡易示波器的不多,感覺430還不錯
msp430轉(zhuǎn)換速率200KSPS,2系列16M,算是比較快的了吧,用的msp430f2274做的
因為硬件比較簡單,基本上是最小系統(tǒng),程序應該通用的
屏幕12864 (ST7920) 19264(KS0108),程序?qū)懙暮軄y,功能不全,但基本功能有了,而且基本上是東挪西借,呵呵
原理圖沒有畫,前級衰減畫上了,但沒有裝,直接進單片機。
沒有畫原理圖,基本上是最小系統(tǒng)
LCD接口定義和按鍵都可以在程序中看出來原理圖沒有畫,前級衰減畫上了,但沒有裝,直接進單片機。
沒有畫原理圖,基本上是最小系統(tǒng)
LCD接口定義和按鍵都可以在程序中看出來
開發(fā)工具用的ez430f2013。SPY-BI-WIRE,兩線制JTAG,下載比較方便,呵呵
跟1系列區(qū)別應該不大,就是頻率高點,一些外設不一樣而已
12864液晶的主程序部分預覽:
- #include<msp430f2274.h>
- #include"math.h"
- #include"font 3X6.h"
- #include"12864.c"
- #define S1 7
- #define S2 6
- #define S3 5
- #define S4 4
- #define S5 3
- #define Num_of_Results 100
- static unsigned int results[Num_of_Results];
- unsigned char index = 0;
- void ADC_Init(void)
- {
- ADC10CTL1 = INCH_7 + CONSEQ_2; //Repeat single channel
- ADC10CTL0 = ADC10SHT_3 + MSC + ADC10ON + ADC10IE; //ADC10ON , Interrupt enale
- ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start
- ADC10AE0 |= 0X80;
- }
- /*******************測量電壓峰峰值********************/
- void Disp_Vpp(unsigned char hang,unsigned char lie,unsigned int VPP)
- {
- float real_vpp;
- unsigned int Uintvpp;
- unsigned char ge,shi,bai; //,i;
- real_vpp = (VPP*3.3)/1024;
- Uintvpp = real_vpp*100;
- bai = Uintvpp/100%10;
- shi = Uintvpp/10%10;
- ge = Uintvpp%10;
-
- Draw_Font(hang,lie+0,font3x6+9+bai*3);
- Draw_Font(hang,lie+3,font3x6+3);
- Draw_Font(hang,lie+6,font3x6+9+shi*3);
- Draw_Font(hang,lie+10,font3x6+9+ge*3);
-
- }
- void Measure_Vol(void)
- {
- unsigned int Max_voltage = 0,Min_voltage = 1024;
- unsigned int c;
- // float Real_Voltage;
- uchar i,e;
-
- for(i=0;i<100;i++)
- {
- if(results[i] > Max_voltage)
- Max_voltage = results[i];
- else
- if(results[i] < Min_voltage)
- Min_voltage = results[i];
- }
-
- c = Max_voltage - Min_voltage;
- e++;
- if(e > 5)
- {
- Disp_Vpp(10,102,Max_voltage);
- Disp_Vpp(17,102,Min_voltage);
- Disp_Vpp(24,102,c);
- e = 0;
- }
- }
- /********************測量電壓峰峰值********************/
- /********************ADC中斷服務函數(shù)********************/
- #pragma vector = ADC10_VECTOR
- __interrupt void ADC10ISR (void)
- {
- results[index] = ADC10MEM; // Move results
- index++;
- if(index == 100)
- ADC10CTL0 &=~ ADC10IE;
- }
- main()
- {
- uchar y1=0,y2=0,i,j; //y坐標
- uchar TimeDiv = 3;
- WDTCTL = WDTPW + WDTHOLD;
- P1DIR = 0X00; //P1.7--P1.3設為輸入,檢測按鍵
- DCOCTL = CALBC1_16MHZ;
- BCSCTL1 = CALBC1_16MHZ;
- Ini_lcd();
- Clear_GDRAM();
- Draw_PM(tab);
- ADC_Init();
- _EINT();
- while(1)
- {
- /**********************檢測按鍵**************************/
- if(!(P1IN&(0x01<<S2)))
- {
- while(!(P1IN&(0x01<<S2)));
- TimeDiv--;
- ADC10CTL0 &=~ ENC;
- ADC10CTL0 = ADC10SHT_0;
- ADC10CTL1 = INCH_7 + CONSEQ_2; //Repeat single channel
- ADC10CTL0 = TimeDiv*0x800 + MSC + ADC10ON + ADC10IE; //ADC10ON , Interrupt enale
- ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start
- if(TimeDiv == 0) TimeDiv = 4;
- }
-
- if(index == 100) //測完99次再顯示
- {
- index = 0;
- for(i=0;i<=99;i++) //顯示時把99次測量的值畫點在12864上
- {
- y1 = y2;
- y2 = 61 - (results[i]/17); //17表示 滿量程1024除以60個點
- LCD_Set_Dot1(i,y2);
-
- if((abs(y2 - y1)>=3)&&(i!=0)) //如果下一點的縱坐標比前一個點的縱坐標大3,為了看起來連續(xù),兩個點畫線
- Lcd_DrawLine_Y(y1,y2,i);
- }
- Measure_Vol(); //測量最大值最小值
- Delay_Nms(200); //等待1秒左右時間
- /**********************檢測按鍵S1**************************/
- while(!(P1IN&(0x01<<S1))); // FREEZE,鎖定屏幕
- /**********************檢測按鍵S1**************************/
-
- for(i=0;i<=99;i++) //顯示過后刪除,不能清屏,因為清屏的話看起來屏幕會閃爍
- {
- y1 = y2;
- y2 = 61 - (results[i]/17);
- if((! ((i%10 == 9)&&(y2%10 == 1) ||(i==0) )))
- LCD_ReSet_Dot1(i,y2);
-
- if((abs(y2 - y1)>=3)&&(i!=0))
- Lcd_ReDrawLine_Y(y1,y2,i);
-
- }
-
- for(j=1;j<100;j=j+2) //畫中心X,Y軸
- {
- LCD_Set_Dot1(49,j);
- LCD_Set_Dot1(j,31);
- for(i=1;i<62;i=i+10)
- {
- if( ( ((j%10 == 9)||j==1))&&(i%10 == 1) ) //保存背景的點
- LCD_Set_Dot1(j,i);
- }
- }
- ADC10CTL0 |= ADC10IE;
- }
-
- }
- }
復制代碼 19264液晶屏:
- #include<msp430f2274.h>
- #include"math.h"
- #include"font 3X6.h"
- #include"19264-KS0108.c"
- #include"ADC.c"
- #define S1 7
- #define S2 6
- #define S3 5
- #define S4 4
- #define S5 3
- void main(void)
- {
- unsigned char y1,y2,i,j;
- P2DIR |= BIT2;
- P3DIR |= BIT0;
- DCOCTL = CALBC1_16MHZ;
- BCSCTL1 = CALBC1_16MHZ;
- WDTCTL = WDTPW + WDTHOLD;
- LCD19264Initial();
- LCD19264Draw_PM(tab);
- ADC_Init();
- _EINT();
-
-
- while(1)
- {
-
- /**********************檢測按鍵S2**************************/
- if(!(P1IN&(0x01<<S2)))
- {
- if(Delay_Time<16384)
- {
- while(!(P1IN&(0x01<<S2)));
- Delay_Time = Delay_Time<<2;
- }
- }
-
- /**********************檢測按鍵S3**************************/
- if(!(P1IN&(0x01<<S3)))
- {
- if(Delay_Time>4)
- {
- while(!(P1IN&(0x01<<S3)));
- Delay_Time = Delay_Time>>2;
- }
- }
-
- /******************************************************************/
- /***************************顯示一屏數(shù)據(jù)***************************/
-
- if(index == Num_of_Results) //在主程序中顯示一屏數(shù)據(jù)
- {
- index = 0;
- for(i=1;i<=Num_of_Results-1;i++)
- {
- y1 = y2;
- y2 = 61 - (results[i]/17);
- LCD19264WriteDot(i,y2,1); //打點
-
- if((abs(y2 - y1) >=3)&(i!=1) ) //為了看起來連續(xù),當y軸間距大于等于3,畫線
- {
- LCD19264DrawLine_Y(y1,y2,i,1);
- }
-
- }
-
- /***************************測量最大值,最小值,Vpp并且顯示***************************/
-
- Measure_Vol(); //測量最大值最小值
-
- Delay_Nms(500); //延時一段時間,使屏幕變化不那么快
-
- /**********************檢測按鍵S1**************************/
- while(!(P1IN&(0x01<<S1))); // FREEZE,鎖定屏幕
- /**********************檢測按鍵S1**************************/
-
- /***************************刪除之前顯示一屏的數(shù)據(jù)********************************/
-
- for(i=1;i<=Num_of_Results-1;i++)
- {
- y1 = y2;
- y2 = 61 - (results[i]/17);
- LCD19264WriteDot(i,y2,0);
- if( (abs(y2 - y1) >=3)&(i!=1) ) //因y1初始值為0,有可能比y2小,所以i!=1時畫線
- {
- LCD19264DrawLine_Y(y1,y2,i,0);
- }
- }
-
- /***************************顯示背景界面的點********************************/
-
- for(i=1;i<162;i+=10)
- {
- for(j=1;j<62;j+=15)
- {
- LCD19264WriteDot(i,j,1);
- }
- }
-
- /***************************顯示橫軸和縱軸********************************/
-
- for(i=0;i<80;i++)
- {
- LCD19264WriteDot((2*i+1),31,1);
-
- if(i<31)
- LCD19264WriteDot(81,(2*i+1),1);
- }
- ADC10CTL0 |= ADC10IE; //開ADC中斷
- }
- _NOP();
- }
- }
復制代碼 全部源碼下載:
12864 自制版示波器.rar
(85.12 KB, 下載次數(shù): 115)
2016-10-11 22:55 上傳
點擊文件名下載附件
19264 自制示波器.rar
(142.62 KB, 下載次數(shù): 61)
2016-10-11 22:55 上傳
點擊文件名下載附件
|
|