查看: 2674|回复: 0

示波器上写字画画了~

[复制链接]
  • TA的每日心情
    开心
    2022-8-16 09:50
  • 签到天数: 16 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2017-2-23 09:18:52 | 显示全部楼层 |阅读模式
    分享到:
    示波器也当显示屏用,示波器上也能写字画画,今天就教大家在示波器上为所欲为所欲为所欲为的显示东西了。
                                                   (先上程序链接,stm32 adc+ZLG的GUI)链接:https://pan.baidu.com/s/1eSgMksq 密码:itia
            还记得当年的物理实验么,用双踪示波器画个李萨如图形,简单来讲就是示波器的xy模式下,x和y都输入同样的一个正弦波然后就会出来一个圆。想详细了解的话看这里示波器李萨如实验
            我们用示波器写字的话也要用这个模式xy模式,我的示波器上直接有一个按键切换的,其它示波器看操作说明吧,有的示波器是不支持的。
    要想用单片机控制输入信号当然由单片机给了,我们都知道示波器采集的是电压,那么DAC不是刚好么,这里我们 需要两路dac一路输入到x轴,一路到y轴这里我用的stm32的dac1的1 2路通道,初始化如下

    void Dac1_Init(void){          GPIO_InitTypeDef GPIO_InitStructure;        DAC_InitTypeDef DAC_InitType;        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );          //使能PORTA通道时钟           RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE );          //使能DAC通道时钟         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5;                                 // 端口配置         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;                  //模拟输入         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;         GPIO_Init(GPIOA, &GPIO_InitStructure);        GPIO_SetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_5)        ;//PA.4 输出高                                                DAC_InitType.DAC_Trigger=DAC_Trigger_None;        //不使用触发功能 TEN1=0        DAC_InitType.DAC_WaveGeneration=DAC_WaveGeneration_None;//不使用波形发生        DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0;//屏蔽、幅值设置        DAC_InitType.DAC_OutputBuffer=DAC_OutputBuffer_Disable ;        //DAC1输出缓存关闭 BOFF1=1    DAC_Init(DAC_Channel_1,&DAC_InitType);         //初始化DAC通道1DAC_Init(DAC_Channel_2,&DAC_InitType);         //初始化DAC通道2                DAC_Cmd(DAC_Channel_1, ENABLE);  //使能DAC1  DAC_Cmd(DAC_Channel_2, ENABLE);  //使能DAC1    DAC_SetChannel1Data( DAC_Align_8b_R, 0);  //8位右对齐数据格式设置DAC值    DAC_SetChannel2Data( DAC_Align_8b_R, 0);  //18位右对齐数据格式设置DAC值}可以简单的这样理解,x方向上(dac1)的电压大小就是x的坐标点,y方向上的电压大小也是他的坐标点,然后我用的是8位adc的所以屏幕的分辨率就是256*256的。为了更便于操作,我移植了我之前常用的GUi库,这个GUI库在我之前的经验里有https://jingyan.eeboard.com/article/75774这次需要修改打点的函数,在lcmdrv。c中
    /****************************************************************************
    * 名称:GUI_Point()
    * 功能:在指定位置上画点。
    * 入口参数: x      指定点所在列的位置
    *            y      指定点所在行的位置
    *            color  显示颜色(对于黑白色LCM,为0时灭,为1时显示)
    * 出口参数:返回值为1时表示操作成功,为0时表示操作失败。(操作失败原因是指定地址超出有
    *          效范围)
    * 说明:用户根据LCM的实际情况编写此函数。
    ****************************************************************************/
    void  GUI_Point(uint16 x, uint8 y, TCOLOR color)
    {if(color==1)
    {DAC_SetChannel2Data( DAC_Align_8b_R,x);//设置DAC值xxx
        DAC_SetChannel1Data( DAC_Align_8b_R,y );//设置DAC值yyy
    }
    }
    把这个函数修改了即可,然后我们就能用gui库了,写汉字的时候操作方法类似于对于点阵的操作,一个一个点的打然后由于视觉暂留的作用所以就成为字或者图了,这里给一个画五角星的函数
    /***********************************************
    函数名  :void Five_pointedstar(int x,int y,int angle,int r)
    功   能 :在x,y位置处画一个五角星,角度为angle,五角星外切圆的半径为r;
    入口参数 :无
    返回参数 :无
    作 者  :lx
    ***********************************************/
    void Five_pointedstar(int x,int y,int angle,int r)
    {
    int m_xw[5];    //5个X外顶点坐标
    int m_yw[5];    //5个Y外顶点坐标
    int i;
           for (i = 0; i < 5; i++)
           {
               m_xw = (int) (cos(i * 72 * PI / 30 - PI *angle/ 180) * (r) + x);
               m_yw = (int) (sin(i * 72* PI / 30 - PI *angle/180) * (r) + y);
           }
      GUI_Line(m_xw[0],m_yw[0],m_xw[2],m_yw[2],1);   //画直线
    GUI_Line(m_xw[2],m_yw[2],m_xw[4],m_yw[4],1);   //画直线
    GUI_Line(m_xw[4],m_yw[4],m_xw[1],m_yw[1],1);   //画直线
    GUI_Line(m_xw[1],m_yw[1],m_xw[3],m_yw[3],1);   //画直线
    GUI_Line(m_xw[3],m_yw[3],m_xw[0],m_yw[0],1);   //画直线
    }
    对了图中的那个小丸子是取的坐标点画出来的,想了解的可以研究下程序。
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-4-20 07:36 , Processed in 0.132162 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.