⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shiboqi.c

📁 这是一个我上大学时候在arm上做的示波器的程序
💻 C
字号:
#include <string.h>
#include "44b.h"
#include "44blib.h"
#include "def.h"
#include "typDef.h"
#include "lcdlib.h"
#include "glib.h"
#define N 400              //设置输出显示的采样点数


extern void KB_Start(void);   //键盘扫描程序,在kb函数库中
int key;                      //设置变量key用于存储键值
int high,low;                 //用于存储卡线的纵坐标值

void Main(void)
{ 
        int i,j,k,m,n,p;      //设置变量i用于循环计数,j,k用于暂存卡线坐标,m用于调整波形放缩比例,n用于调整波形上下移幅度,p用于改变采样点位置,以实现波形的左右移
        int a[N],b[N];        //a数组用于存放原始波形,b数组用于存放由控制信号处理过的波形
                
        ChangePllValue(PLL_M,PLL_P,PLL_S);
        Port_Init();
        Uart_Init(0,115200);
        Uart_Select(0);

        Lcd_Init(256);
        Glib_Init(256);
        KB_Start(); 

p=0;
m=4;
n=40;
key=0;
high=190;
low=50;           //设置各个变量的初值
while(1)          //不断的循环,实现波形的长期显示
{
if(key==0)        //0键功能
{
Glib_ClearScr(255);            //刷液晶屏,用于显示新的信息
Glib_Line(0,120,320,120,0);    //画中轴
windows();                     //调用子程序1,画网格
}

for(i=0;i<N;i++)               //进行采样
{
a[i]=ReadAdc(0);               //采样AD信号,存入a数组
Delay(1);
        if(key!=1&&key!=2&&key!=3&&key!=4&&key!=5&&key!=6&&key!=7&&key!=8&&key!=9&&key!=10&&key!=11&&key!=12&&key!=15)          //检查是按键0
{
b[i]=ReadAdc(0);               //若键0按下,采样AD信号,存入b数组
Delay(1);
}
}

for(i=0;i<N;i++)               //若有其他键按下,检查按键
{if(key==1||key==2||key==3||key==4||key==5||key==6||key==7||key==8||key==9||key==12)
      {
Glib_Line(0,120,320,120,0);    //画中轴
Glib_Line(i,b[i]/m+n,i+1,b[i+1]/m+n,192);//显示波形
      }
      else  if(key == 0)
Glib_Line(i,a[i]/4+40,i+1,a[i+1]/4+40,192);
  } 
         if(key==15)                  //设置一个虚拟键值,用于画中轴
         Glib_Line(0,120,320,120,0);  //画中轴

    if(key==2)           //显示卡尺
    {   windows2();                    //画横线
        Glib_Line(0,high,320,high,128);//画高卡线
        Glib_Line(0,low,320,low,128);//画低卡线
    }  

    if(key==3)            //转换卡尺
    {   j=low;            
        k=high;
        high=j;
        low=k;            //卡尺的各个线互换
        key=2;            
    } 
 
    if(key==4)             //卡尺向上移
    {
        Glib_Line(0,high,320,high,255);     
        high=high+5;        //高值加5
        Glib_Line(0,high,320,high,128);
        key=2;
    }

    if(key==5)              //卡尺向下移
    {
        Glib_Line(0,high,320,high,255);
        high=high-5;         //高值减5
        Glib_Line(0,high,320,high,128);
        key=2;
}

        if(key==6)         //波形上移
      {
         for(i=0;i<N;i++)
      {
         Glib_Line(i,b[i]/m+n,i+1,b[i+1]/m+n,255);   //删除当前设置波形
      }             
         n=n+5;            //上移加5
         for(i=0;i<N;i++)
     {    Glib_Line(i,b[i]/m+n,i+1,b[i+1]/m+n,192);   //显示新波形
          key=1;                                      //跳出
     }
     }

     if(key==7)               //波形下移,原理同上
     {
     for(i=0;i<N;i++)
     {
     Glib_Line(i,b[i]/m+n,i+1,b[i+1]/m+n,255);   
     }             
     n=n-5;
   for(i=0;i<N;i++)
     {Glib_Line(i,b[i]/m+n,i+1,b[i+1]/m+n,192);
                    key=1;   
                 }
     }

          if(key==8)                 //波形缩小
    {for(i=0;i<N;i++)
            {
                Glib_Line(i,b[i]/m+n,i+1,b[i+1]/m+n,255);   
             }             
                m=m+1;               //波形缩小比例加1
                      
                for(i=0;i<N;i++)
            {
                Glib_Line(i,b[i]/m+n,i+1,b[i+1]/m+n,192);
                key=1;      
                }
        }

        if(key==9)                    //波形放大,原理同上
        {
                for(i=0;i<N;i++)
            {
                Glib_Line(i,b[i]/m+n,i+1,b[i+1]/m+n,255);   
                
                }             
                m=m-1;

                for(i=0;i<N;i++)
            {
                Glib_Line(i,b[i]/m+n,i+1,b[i+1]/m+n,192);
                Key=1
}
         }

   if(key==10)               //波形右移
         {
                for(i=0;i<N;i++)
            {
                Glib_Line(i,b[i+p]/m+n,i+1,b[i+1+p]/m+n,255);   
                  }
                  p=p+1;      //改变采样点
                  for(i=0;i<N;i++)
                  {
                     Glib_Line(i,b[i+p]/m+n,i+1,b[i+1+p]/m+n,192);
                  } 
                  key=15;    
         }
        
         if(key==11)           //波形左移,原理同上
        {
                for(i=0;i<N;i++)
                {
                Glib_Line(i,b[i+p]/m+n,i+1,b[i+1+p]/m+n,255);   
                }             
                p=p-1; 
                for(i=0;i<N;i++)
                {
                        Glib_Line(i,b[i+p]/m+n,i+1,b[i+1+p]/m+n,192);
                }
                key=15;
         }

         if(key==12)              //卡尺值显示
         {
            if(low>high)
                Uart_Printf("\nhigh=%3d,low=%3d",low,high);
            else
                Uart_Printf("\nhigh=%3d,low=%3d",high,low);
                  key=2;
    }
}
}

windows()                      //子程序1画网格
{
    Lcd_Init(256);
         Glib_Init(256);
    Glib_Line(0,40,320,40,50);
    Glib_Line(0,80,320,80,50);
    Glib_Line(0,120,320,120,50);
    Glib_Line(0,160,320,160,50);
    Glib_Line(0,200,320,200,50);
    Glib_Line(40,0,40,240,50);
    Glib_Line(80,0,80,240,50);
    Glib_Line(120,0,120,240,50);
    Glib_Line(160,0,160,240,50);
    Glib_Line(200,0,200,240,50);
    Glib_Line(240,0,240,240,50);
    Glib_Line(280,0,280,240,50);
}

windows2()                   //子程序2画网格的横线
{
    Lcd_Init(256);
        Glib_Init(256);
    Glib_Line(0,40,320,40,50);
    Glib_Line(0,80,320,80,50);
    Glib_Line(0,120,320,120,50);
    Glib_Line(0,160,320,160,50);
    Glib_Line(0,200,320,200,50);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -