STM32产生频率可调正弦波锯齿波三角波LCD界面控制.docx

上传人:b****8 文档编号:11473668 上传时间:2023-03-01 格式:DOCX 页数:28 大小:19.10KB
下载 相关 举报
STM32产生频率可调正弦波锯齿波三角波LCD界面控制.docx_第1页
第1页 / 共28页
STM32产生频率可调正弦波锯齿波三角波LCD界面控制.docx_第2页
第2页 / 共28页
STM32产生频率可调正弦波锯齿波三角波LCD界面控制.docx_第3页
第3页 / 共28页
STM32产生频率可调正弦波锯齿波三角波LCD界面控制.docx_第4页
第4页 / 共28页
STM32产生频率可调正弦波锯齿波三角波LCD界面控制.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

STM32产生频率可调正弦波锯齿波三角波LCD界面控制.docx

《STM32产生频率可调正弦波锯齿波三角波LCD界面控制.docx》由会员分享,可在线阅读,更多相关《STM32产生频率可调正弦波锯齿波三角波LCD界面控制.docx(28页珍藏版)》请在冰豆网上搜索。

STM32产生频率可调正弦波锯齿波三角波LCD界面控制.docx

STM32产生频率可调正弦波锯齿波三角波LCD界面控制

STM32产生频率可调正弦波、锯齿波、三角波&LCD界面控制

此程序能输出两路通道,三路波形,利用STM32的DAC,TIM,LCD,和DMA控制的发射出正弦波,锯齿波和三角波,每种波形频率可调,独立输出,独立显示频率,使能。

最高频率达12.5KHz。

三种波形都是有一个简易小UI界面,电阻式触摸屏,能够完全手动控制通道的选择,波形的选择频率的选择以及各种波形的使能。

/********************************************************************************************

使用手册:

0.初学即兴所敲,不喜勿喷。

1.通道1和通道2只能分开输出。

2.只有选中响应的波形选择框,才能设置频率或者使能。

3.使能端只能在通道1或者通道2打开的情况下才能被使按下操作有效。

4.每次使能一个波形,其他波形使能将自动关闭。

5.当通道1和通道2都关闭,使能将自动无效。

6.通道1和通道2切换,必须重新使能。

7.开发平台为STM32战舰版。

USER:

ZhangChanghao

*********************************************************************************************/

#include"led.h"

#include"delay.h"

#include"key.h"

#include"sys.h"

#include"lcd.h"

#include"usart.h"

#include"24cxx.h"

#include"flash.h"

#include"touch.h"

#include"STM32_WaveOutput.h"

u8t,Mode1,Mode2,Mode1_Flag,Mode2_Flag;

u8sinewave_flag,sawtooth_flag,triangle_flag,

sinewave_mode,sawtooth_mode,triangle_mode;

u8sinewave_en,sawtooth_en,triangle_en;

u8sinewave_fre,sawtooth_fre,triangle_fre;

u8output_wave;

u16output_fre;

#defineMODE11

#defineMODE22

#definesinewave1

#definesawtooth2

#definetriangle3

voidwave_show(u8wavemode);

voiden_show(u8wavemode);

voidMode_Show(u8mode);

voidwave_fre(u8wavemode);

voidjudge_tongdao();

voidjudge_wave();

voidjudge_en();

voidjudge_fre();

voidshow_init();

voidfengbi_tongdao();

intmain(void)

{

delay_init();//延时函数初始化

NVIC_Configuration();//设置NVIC中断分组2:

2位抢占优先级,2位响应优先级

uart_init(9600);//串口初始化为9600

LED_Init();//LED端口初始化

LCD_Init();

KEY_Init();

tp_dev.init();

show_init();

while

(1)

{

t=TP_Scan(0);

if(t)

{

t=0;

//printf("%d,%d\r\n",tp_dev.x[0],tp_dev.y[0]);

judge_tongdao();

judge_wave();

judge_en();

judge_fre();

if(sinewave_en==1||sawtooth_en==1||triangle_en==1)

{

if(Mode1_Flag!

=DISABLE)

{

if(sinewave_en)

{

output_wave=sinewave;

output_fre=sinewave_fre*100;

}

elseif(sawtooth_en)

{

output_wave=sawtooth;

output_fre=sawtooth_fre*100;

}

elseif(triangle_en)

{

output_wave=triangle;

output_fre=triangle_fre*100;

}

printf("%d,%d\r\n",output_wave,output_fre);

Wave_Init((output_wave-1),output_fre,ENABLE,(output_wave-1),output_fre,DISABLE);

//printf("%d\r\n",TIM_TimeBaseStructure.TIM_Period);

//Set_WaveFre(0,output_fre);

}

elseif(Mode2_Flag!

=DISABLE)

{

if(sinewave_en)

{

output_wave=sinewave;

output_fre=sinewave_fre*100;

}

elseif(sawtooth_en)

{

output_wave=sawtooth;

output_fre=sawtooth_fre*100;

}

elseif(triangle_en)

{

output_wave=triangle;

output_fre=triangle_fre*100;

}

Wave_Init((output_wave-1),output_fre,DISABLE,(output_wave-1),output_fre,ENABLE);

printf("%d,%d\r\n",output_wave,output_fre);

}

}

else

{

Wave_Init(0,1,DISABLE,0,1,DISABLE);

}

}//if(t)

LED1=!

LED1;

delay_ms(100);

}

}

voidshow_init()

{

//清屏

LCD_Clear(CYAN);

POINT_COLOR=BROWN;//设置字体为红色

LCD_Fill(0,0,2,320,BROWN);

LCD_Fill(0,0,240,2,BROWN);

LCD_Fill(0,318,240,320,BROWN);

LCD_Fill(238,0,240,320,BROWN);

LCD_Fill(7,7,9,313,BROWN);

LCD_Fill(7,7,233,9,BROWN);

LCD_Fill(7,311,233,313,BROWN);

LCD_Fill(231,7,233,313,BROWN);

LCD_DrawLine(0,0,7,7);

LCD_DrawLine(233,313,240,320);

LCD_DrawLine(233,7,240,0);

LCD_DrawLine(7,313,0,320);

//通道12的初始化

POINT_COLOR=RED;//设置字体为红色

LCD_Fill(20,20,110,65,MAGENTA);

LCD_ShowString(38,35,80,16,16,"Output1");

LCD_Fill(130,20,220,65,MAGENTA);

LCD_ShowString(148,35,80,16,16,"Output2");

//正弦初始化

LCD_Fill(50,80,145,110,LIGHTGREEN);

LCD_ShowString(67,88,64,16,16,"SineWave");

LCD_Fill(155,80,200,110,RED);

POINT_COLOR=GREEN;

Draw_Circle(55,125,13);

LCD_DrawLine(42,125,68,125);

LCD_DrawLine(55,112,55,138);

POINT_COLOR=BROWN;

Draw_Circle(168,125,13);

LCD_DrawLine(155,125,181,125);

LCD_ShowString(72,120,80,16,16,"Fre:

0.0KHz");

//锯齿初始化

POINT_COLOR=RED;

LCD_Fill(50,150,145,180,DARKBLUE);

LCD_ShowString(67,158,64,16,16,"SawTooth");

LCD_Fill(155,150,200,180,RED);

POINT_COLOR=GREEN;

Draw_Circle(55,195,13);

LCD_DrawLine(42,195,68,195);

LCD_DrawLine(55,182,55,208);

POINT_COLOR=BROWN;

Draw_Circle(168,195,13);

LCD_DrawLine(155,195,181,195);

LCD_ShowString(72,190,80,16,16,"Fre:

0.0KHz");

//三角初始化

POINT_COLOR=RED;

LCD_Fill(50,220,145,250,YELLOW);

LCD_ShowString(63,228,64,16,16,"triangle");

LCD_Fill(155,220,200,250,RED);

POINT_COLOR=GREEN;

Draw_Circle(55,265,13);

LCD_DrawLine(42,265,68,265);

LCD_DrawLine(55,252,55,278);

POINT_COLOR=BROWN;

Draw_Circle(168,265,13);

LCD_DrawLine(155,265,181,265);

LCD_ShowString(72,260,80,16,16,"Fre:

0.0KHz");

LED0=0;

//张长浩

POINT_COLOR=DARKBLUE;

LCD_ShowString(65,295,168,16,16,"BY:

ZhangChanghao^_^");

POINT_COLOR=BROWN;

}

voidjudge_tongdao()

{

//通道12的识别操作

if((tp_dev.x[0]>19)&&(tp_dev.x[0]<111)

&&(tp_dev.y[0]>19)&&(tp_dev.y[0]<66))

{printf("\r\n");

if(Mode1_Flag)

{

Mode1_Flag=0;

Mode1=DISABLE;

//fengbi_tongdao();

Mode_Show(MODE1);

}

else

{

Mode1_Flag=1;

if(Mode2_Flag)

{

Mode2=0;

Mode2_Flag=0;

Mode_Show(MODE2);

}

Mode1=ENABLE;

Mode_Show(MODE1);

}

fengbi_tongdao();

}

elseif((tp_dev.x[0]>129)&&(tp_dev.x[0]<221)

&&(tp_dev.y[0]>19)&&(tp_dev.y[0]<66))

{

if(Mode2_Flag)

{

Mode2_Flag=0;

Mode2=DISABLE;

//fengbi_tongdao();

Mode_Show(MODE2);

}

else

{

Mode2_Flag=1;

if(Mode1_Flag)

{

Mode1=0;

Mode1_Flag=0;

Mode_Show(MODE1);

}

Mode2=ENABLE;

Mode_Show(MODE2);

}

fengbi_tongdao();

}

}

voidjudge_wave()

{

//三个波的识别操作

if((tp_dev.x[0]>49)&&(tp_dev.x[0]<146)

&&(tp_dev.y[0]>79)&&(tp_dev.y[0]<111))

{

if(sinewave_flag)

{

sinewave_flag=0;

sinewave_mode=DISABLE;

wave_show(sinewave);

}

else

{

sinewave_flag=1;

if(sawtooth_flag)

{

sawtooth_flag=0;

sawtooth_mode=0;

wave_show(sawtooth);

}

elseif(triangle_flag)

{

triangle_flag=0;

triangle_mode=0;

wave_show(triangle);

}

sinewave_mode=ENABLE;

wave_show(sinewave);

}

}

///////////////

elseif((tp_dev.x[0]>49)&&(tp_dev.x[0]<146)

&&(tp_dev.y[0]>149)&&(tp_dev.y[0]<181))

{

if(sawtooth_flag)

{

sawtooth_flag=0;

sawtooth_mode=DISABLE;

wave_show(sawtooth);

}

else

{

sawtooth_flag=1;

if(sinewave_flag)

{

sinewave_flag=0;

sinewave_mode=0;

wave_show(sinewave);

}

elseif(triangle_flag)

{

triangle_flag=0;

triangle_mode=0;

wave_show(triangle);

}

sinewave_mode=ENABLE;

wave_show(sawtooth);

}

}

///////////////////////////////////

elseif((tp_dev.x[0]>49)&&(tp_dev.x[0]<146)

&&(tp_dev.y[0]>219)&&(tp_dev.y[0]<251))

{

if(triangle_flag)

{

triangle_flag=0;

triangle_mode=DISABLE;

wave_show(triangle);

}

else

{

triangle_flag=1;

if(sinewave_flag)

{

sinewave_flag=0;

sinewave_mode=0;

wave_show(sinewave);

}

if(sawtooth_flag)

{

sawtooth_flag=0;

sawtooth_mode=0;

wave_show(sawtooth);

}

triangle_mode=ENABLE;

wave_show(triangle);

}

}

}

voidjudge_en()

{

//三种波的使能显示

if((tp_dev.x[0]>154)&&(tp_dev.x[0]<201)

&&(tp_dev.y[0]>79)&&(tp_dev.y[0]<111))

{

if(sinewave_flag&&(Mode1||Mode2))

{

if(sinewave_en)

{

sinewave_en=0;

en_show(sinewave);

}

else

{

sinewave_en=1;

if(sawtooth_en)

{

sawtooth_en=0;

en_show(sawtooth);

}

elseif(triangle_en)

{

triangle_en=0;

wave_show(triangle);

}

en_show(sinewave);

}

}

else

{

sinewave_en=0;

en_show(sinewave);

}

}

///////////////

elseif((tp_dev.x[0]>154)&&(tp_dev.x[0]<201)

&&(tp_dev.y[0]>149)&&(tp_dev.y[0]<181))

{

if(sawtooth_flag&&(Mode1||Mode2))

{

if(sawtooth_en)

{

sawtooth_en=0;

en_show(sawtooth);

}

else

{

sawtooth_en=1;

if(sinewave_en)

{

sinewave_en=0;

en_show(sinewave);

}

elseif(triangle_en)

{

triangle_en=0;

en_show(triangle);

}

en_show(sawtooth);

}

}

else

{

sawtooth_en=0;

en_show(sawtooth);

}

}

///////////////////////////////////

elseif((tp_dev.x[0]>154)&&(tp_dev.x[0]<201)

&&(tp_dev.y[0]>219)&&(tp_dev.y[0]<251))

{

if(triangle_flag&&(Mode1||Mode2))

{

if(triangle_en)

{

triangle_en=0;

en_show(triangle);

}

else

{

triangle_en=1;

if(sinewave_en)

{

sinewave_en=0;

en_show(sinewave);

}

if(sawtooth_en)

{

sawtooth_en=0;

en_show(sawtooth);

}

en_show(triangle);

}

}

else

{

triangle_en=0;

en_show(triangle);

}

}//使能判断

if(triangle_en==0||sawtooth_en==0||sinewave_en==0)

{

TIM_Cmd(TIM6,DISABLE);

TIM_Cmd(TIM2,DISABLE);

}

}

voidjudge_fre()

{

//频率检测

if((tp_dev.x[0]-55)*(tp_dev.x[0]-55)+(125-tp_dev.y[0])*(125-tp_dev.y[0])<150)

{

if(sinewave_flag

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 化学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1