找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1237|回复: 0
打印 上一主题 下一主题
收起左侧

基于stm32简易函数发生器程序

[复制链接]
跳转到指定楼层
楼主
ID:432703 发表于 2020-9-4 15:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "led.h"
  5. #include "lcd.h"
  6. #include "adc.h"
  7. #include "dac.h"
  8. #include "key.h"
  9. #include "Drive_DAC.h"
  10. #include "touch.h"



  11. // ************  P4或DAC口作输出    GND接地  ***********

  12. //清空屏幕并在右上角显示"RST"
  13. void Load_Drow_Dialog(void)
  14. {
  15.         LCD_Clear(WHITE);//清屏   
  16.         POINT_COLOR=BLUE;//设置字体为蓝色
  17.         LCD_ShowString(200-24,0,200,16,16,"RST");//显示清屏区域
  18.           POINT_COLOR=RED;//设置画笔蓝色
  19. }

  20. void rtp_test(void)
  21. {
  22.                 tp_dev.scan(0);                  
  23.                 if(tp_dev.sta&TP_PRES_DOWN)                        //触摸屏被按下
  24.                 {       
  25.                          if(tp_dev.x[0]<lcddev.width&&tp_dev.y[0]<lcddev.height)
  26.                         {       
  27.                                 if(tp_dev.x[0]>30&&tp_dev.y[0]<230+16&&tp_dev.y[0]>210+16)
  28.                                 {
  29.                                         ddsStructData.wave = SAWTOOTHWAVE;
  30.                                 }
  31.                                 if(tp_dev.x[0]>30&&tp_dev.y[0]<210+16&&tp_dev.y[0]>190+16)
  32.                                 {
  33.                                         ddsStructData.wave = SQUAREWAVE;
  34.                                 }
  35.                                 if(tp_dev.x[0]>30&&tp_dev.y[0]<190+16&&tp_dev.y[0]>170+16)
  36.                                 {
  37.                                         ddsStructData.wave = TRIANGLEWAE;
  38.                                 }
  39.                                 if(tp_dev.x[0]>30&&tp_dev.y[0]<170+16&&tp_dev.y[0]>150+16)
  40.                                 {
  41.                                         ddsStructData.wave = SINWAVE;
  42.                                 }
  43.                                 if(tp_dev.x[0]>125&&tp_dev.x[0]<140&&tp_dev.y[0]<90+16)
  44.                                 {
  45.                                         ddsStructData.hz += 500;
  46.                       if(ddsStructData.hz == 3000) ddsStructData.hz = 500;
  47.                                 }
  48.                                 if(tp_dev.x[0]>140&&tp_dev.y[0]<90+16)
  49.                                 {
  50.                                         ddsStructData.hz -= 500;
  51.                       if(ddsStructData.hz < 500) ddsStructData.hz = 3000;
  52.                                 }
  53.                                 if(tp_dev.x[0]>125&&tp_dev.x[0]<140&&tp_dev.y[0]<110+16&&tp_dev.y[0]>90+16)
  54.                                 {
  55.                                         ddsStructData.vpp += 1;
  56.                       if(ddsStructData.vpp == 4) ddsStructData.vpp = 1;
  57.                                 }
  58.                                 if(tp_dev.x[0]>140&&tp_dev.y[0]<110+16&&tp_dev.y[0]>90+16)
  59.                                 {
  60.                                         ddsStructData.vpp -= 1;
  61.                       if(ddsStructData.vpp < 1) ddsStructData.vpp = 4;
  62.                                 }
  63.                         }
  64.                 }else delay_ms(10);        //没有按键按下的时候
  65. }

  66. int main(void)
  67. {
  68.         u16 adcx;
  69.         float temp;
  70.         u8 t=0;         
  71.         u16 dacval=0;
  72.         u8 key;       
  73.         float result;
  74.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
  75.         delay_init(168);      //初始化延时函数
  76.         uart_init(115200);                //初始化串口波特率为115200
  77.        
  78.         LED_Init();                                        //初始化LED
  79.         LCD_Init();                                        //LCD初始化
  80.         KEY_Init();                                 //按键初始化
  81.         POINT_COLOR=RED;
  82.         LCD_ShowString(30,20,200,16,16,"*********- dds -*********");       
  83.         LCD_ShowString(30,70,200,16,16,"------ Parameter ------");
  84.         LCD_ShowString(30,90,200,16,16,"f:");
  85.         LCD_ShowString(130,90,200,16,16,"+");
  86.         LCD_ShowString(160,90,200,16,16,"-");
  87.         LCD_ShowString(90,90,200,16,16,"Hz");
  88.         LCD_ShowString(30,110,200,16,16,"vpp:");       
  89.         LCD_ShowString(130,110,200,16,16,"+");
  90.         LCD_ShowString(160,110,200,16,16,"-");
  91.         LCD_ShowString(90,110,200,16,16,"v");
  92.         LCD_ShowString(30,130,200,16,16,"------ wave ------");
  93.         LCD_ShowString(30,170,200,16,16,"1.SINWAVE");
  94.         LCD_ShowString(30,190,200,16,16,"2.TRIANGLEWAE");
  95.         LCD_ShowString(30,210,200,16,16,"3.SQUAREWAVE");
  96.         LCD_ShowString(30,230,200,16,16,"4.SAWTOOTHWAVE");
  97.   DAC_SetChannel1Data(DAC_Align_12b_R,dacval);//初始值为0       
  98.         tp_dev.init();                                //触摸屏初始化
  99.         ddsStructData.hz = 1000;
  100.         ddsStructData.vpp = 1;
  101.         while(1)
  102.         {
  103.                 u16 i=0;
  104.                 dacInit();
  105.                 dacOpen();
  106.                 rtp_test();
  107.     LCD_ShowxNum(60,110,(float)ddsStructData.vpp,3,16,0);
  108.                 LCD_ShowxNum(50,90,ddsStructData.hz,4,16,0);
  109.                 if(ddsStructData.wave==TRIANGLEWAE)
  110.                 {
  111.                         LCD_ShowString(30,150,200,16,16,"wave:");
  112.                         LCD_ShowString(80,150,200,16,16,"TRIANGLEWAE ");
  113.                 }
  114.                 if(ddsStructData.wave==SQUAREWAVE)
  115.                 {
  116.                         LCD_ShowString(30,150,200,16,16,"wave:");
  117.                         LCD_ShowString(80,150,200,16,16,"SQUAREWAVE  ");
  118.                 }
  119.                 if(ddsStructData.wave==SINWAVE)
  120.                 {
  121.                         LCD_ShowString(30,150,200,16,16,"wave:");
  122.                         LCD_ShowString(80,150,200,16,16,"SINWAVE     ");
  123.                 }
  124.                 if(ddsStructData.wave==SAWTOOTHWAVE)
  125.                 {
  126.                         LCD_ShowString(30,150,200,16,16,"wave:");
  127.                         LCD_ShowString(80,150,200,16,16,"SAWTOOTHWAVE");
  128.                 }
  129.                 delay_ms(300);
  130.         }
  131. }
复制代码


简易函数发生器.7z

367.64 KB, 下载次数: 7, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表