找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STM32手持示波器原理图+源程序

  [复制链接]
跳转到指定楼层
楼主



单片机源程序如下:
  1. #include "stm32f10x.h"
  2. #include "delay.h"
  3. #include "led.h"
  4. #include "usart1.h"
  5. #include "lcd.h"
  6. #include "adc.h"
  7. #include "string.h"
  8. #include "stdio.h"


  9. u16 DeviceCode;//LCD_ID型号参数变量
  10. unsigned int i=0,n=320,Vmun=0,ADV[310];       
  11. char c[5],cc[];

  12. // ADC1转换的电压值通过MDA方式传到SRAM
  13. extern __IO uint16_t ADC_ConvertedValue; //动变量

  14. // 局部变量,用于保存转换计算后的电压值          
  15. float ADC_ConvertedValueLocal;                                          //随着动变量而动
  16. static u16 voltage_x1=9,voltage_y1=120,voltage_x2=9,voltage_y2=142;
  17. u16 time=0;

  18. int flag=0;
  19.         int allnum=0,move_x=10,move_y=120,clr_flag=0,nn=0;
  20.          
  21.         int ad[300],vtime=1500;

  22. void init_panel(void);//初始化界面
  23. void refresh_screen();//刷新屏幕

  24. int main(void)
  25. {


  26.         ADC1_Init();//ADC初始化
  27.        
  28.         USART1_Config(9600);  //串口初始化

  29.         delay_init(72);     //系统滴答定时器初始化最大定时1864ms
  30.        
  31.         lcd_init();                        //LCD初始化
  32.        
  33.         DeviceCode=LCD_RD_DATA(R0);//LCD的R0寄存器保存着LCD_ID型号数值
  34.        
  35.         printf(" LCD_ID:%x\r\n",DeviceCode); //向串口打印LCD_ID型号
  36.        
  37.         //提取出千位,百位,十位,各位
  38.   c[0]=DeviceCode/4096;c[1]=DeviceCode/256%16;c[2]=DeviceCode/16%16;c[3]=DeviceCode%16;
  39.         c[0]+=0x30;        c[1]+=0x30;        c[2]+=0x30;        c[3]+=0x30;//16进制转成字符型

  40.         init_panel();//初始化界面       
  41.        
  42.         delay_ms(50);

  43.   while (1)
  44.   {

  45.                         for(allnum=0;allnum<303;allnum++)
  46.                         {
  47.                
  48.                 /***                清除原来的电压点痕迹   ****/               
  49.                                 if(clr_flag==1)               
  50.                                 {                               
  51.                                         LCD_DrawPoint_3(allnum + move_x ,move_y-ad[allnum],Def_BACK_COLOR);
  52.                                         if((allnum<=300)&&(ad[allnum+1]>ad[allnum]))
  53.                                         {
  54.                                                 for(nn=ad[allnum+1]-ad[allnum];nn>0;nn--)
  55.                                                 {
  56.                                                         LCD_DrawPoint_3(allnum+1+ move_x ,move_y-(ad[allnum+1]-nn),Def_BACK_COLOR);        //delay_ms(1);
  57.                                                 }
  58.                                         }

  59.                                         if((allnum<=300)&&(ad[allnum+1]<ad[allnum]))
  60.                                         {
  61.                                                 for(nn=ad[allnum]-ad[allnum+1];nn>0;nn--)
  62.                                                 {
  63.                                                         LCD_DrawPoint_3(allnum +1+ move_x ,move_y-(ad[allnum+1]+nn),Def_BACK_COLOR);        //delay_ms(1);
  64.                                                 }
  65.                                         }
  66.                                 }
  67.                                                
  68.                                         /***                取电压AD值           ****/
  69.                                 ad[allnum]=ADC_ConvertedValue/90;
  70.                                         /***        画电压点           ****/
  71.                                 LCD_DrawPoint_3(allnum + move_x ,move_y-ad[allnum] ,YELLOW);       
  72.                                 if((allnum>=1)&&(ad[allnum]>ad[allnum-1]))
  73.                                 {
  74.                                         for(nn=ad[allnum]-ad[allnum-1];nn>0;nn--)
  75.                                         {
  76.                                                 LCD_DrawPoint_3(allnum + move_x ,move_y-(ad[allnum]-nn),YELLOW);       
  77.                                         }
  78.                                 }
  79.                                 if((allnum>=1)&&(ad[allnum]<ad[allnum-1]))
  80.                                 {
  81.                                         for(nn=ad[allnum-1]-ad[allnum];nn>0;nn--)
  82.                                         {
  83.                                                 LCD_DrawPoint_3(allnum + move_x ,move_y-(ad[allnum]+nn),YELLOW);
  84.                                         }
  85.                                 }

  86.                                 if(allnum==300){clr_flag=1;}       
  87.                         }
  88.                                         /***                刷新屏幕           ****/
  89.                                 refresh_screen();       
  90.        
  91.   }
  92. }


  93. void init_panel(void)//初始化界面
  94. {
  95.         int linenum=0;
  96.        
  97.         LCD_Clear(DARKBLUE);//清屏谈蓝色,示波器常见背景色
  98.         LCD_Fill(8,18,320-8,240-22,Def_BACK_COLOR);//中间一大块黑色背景
  99.        
  100.         /*    上行显示的东东    */
  101.         LCD_ShowString(4,1,"RIGOL",16,Def_POINT_COLOR,DARKBLUE);//左上角显示普源品牌示波器logo
  102.         LCD_ShowString(52,1," AUTO ",16,GREEN,BLACK);
  103.         LCD_ShowString(120,1,"~~~~~~~~~~",16,LGRAYBLUE,BLACK);       
  104.         LCD_ShowString(226,1," $       V ",16,YELLOW,BLACK);               
  105.         LCD_ShowString(246,1,"1",16,BLACK,YELLOW);               
  106.         LCD_ShowString(254,1," 2.00",16,YELLOW,BLACK);       

  107.         /************************    中间显示的东东****************************************/       
  108.                 /*   横条*/
  109.                 for(linenum=5;linenum<300;linenum+=8)       
  110.                 {LCD_DrawPoint_3(10+linenum,20,GRAY);}
  111.        
  112.         for(linenum=5;linenum<300;linenum+=8)       
  113.                 {LCD_DrawPoint_3(10+linenum,70,GRAY);}

  114.         for(linenum=5;linenum<300;linenum+=8)        //中间横条
  115.                 {LCD_DrawPoint_3(10+linenum,120,GRAY);}

  116.         for(linenum=5;linenum<300;linenum+=8)       
  117.                 {LCD_DrawPoint_3(10+linenum,170,GRAY);}       
  118.                
  119.                 for(linenum=5;linenum<300;linenum+=8)       
  120.                 {LCD_DrawPoint_3(10+linenum,218,GRAY);}
  121.        
  122.        
  123.         /*竖条     */
  124.                 for(linenum=5;linenum<200;linenum+=8)
  125.                 {LCD_DrawPoint_3(10,16+linenum,GRAY);}
  126.        
  127.         for(linenum=5;linenum<200;linenum+=8)
  128.                 {LCD_DrawPoint_3(60,16+linenum,GRAY);}

  129.         for(linenum=5;linenum<200;linenum+=8)
  130.                 {LCD_DrawPoint_3(110,16+linenum,GRAY);}

  131.         for(linenum=5;linenum<200;linenum+=8)
  132.                 {LCD_DrawPoint_3(160,16+linenum,GRAY);}

  133.         for(linenum=5;linenum<200;linenum+=8)       
  134.                 {LCD_DrawPoint_3(210,16+linenum,GRAY);}

  135.         for(linenum=5;linenum<200;linenum+=8)       
  136.                 {LCD_DrawPoint_3(260,16+linenum,GRAY);}
  137.                
  138.         for(linenum=5;linenum<200;linenum+=8)       
  139.                 {LCD_DrawPoint_3(310,16+linenum,GRAY);}
  140.                
  141.         LCD_ShowString(157,20,"T",12,BLACK,BROWN);       
  142.         LCD_ShowString(216,20,"t",16,BLACK,BROWN);       
  143.         LCD_ShowString(224,20," <5HZ     ",16,WHITE,DARKBLUE);               
  144.         /************************    中间显示的东东****************************************/               
  145.                
  146.                
  147.                
  148.        
  149.         /*    下行显示的东东     */
  150.         LCD_ShowString(4,240-18," CH1- ",16,BLACK,YELLOW);
  151.         LCD_ShowString(52,240-18,"  1.00V ",16,YELLOW,BLACK);//1.00V  这个值要传数据,所以要用指针传参数进去才行
  152.         LCD_ShowString(144,240-18," Time ",16,WHITE,BLACK);
  153.         LCD_ShowString(184,240-18," 500.0",16,WHITE,BLACK);
  154.         LCD_ShowString(232,240-18,"us ",16,WHITE,BLACK);
  155.         LCD_ShowString(254,240-18,"T",16,BLACK,BROWN);
  156.         LCD_ShowString(262,240-18,"->",16,BROWN,BLACK);
  157.         LCD_ShowString(276,240-18,"0.00",16,BROWN,BLACK);
  158.         LCD_ShowString(308,240-18,"s",16,BROWN,BLACK);
  159. }
  160. void refresh_screen()//刷新屏幕
  161. {
  162.                 int linenum=0;
  163.        
  164.        
  165. //                LCD_Fill(8,18,320-8,240-22,Def_BACK_COLOR);//中间一大块黑色背景
  166.        
  167.         /************************    中间显示的东东****************************************/
  168.        
  169.                 /*   横条*/
  170.                 for(linenum=5;linenum<300;linenum+=8)       
  171.                 {LCD_DrawPoint_3(10+linenum,20,GRAY);}
  172.        
  173.         for(linenum=5;linenum<300;linenum+=8)       
  174.                 {LCD_DrawPoint_3(10+linenum,70,GRAY);}

  175.         for(linenum=5;linenum<300;linenum+=8)       
  176.                 {LCD_DrawPoint_3(10+linenum,120,GRAY);}

  177.         for(linenum=5;linenum<300;linenum+=8)       
  178.                 {LCD_DrawPoint_3(10+linenum,170,GRAY);}       
  179.                
  180.                 for(linenum=5;linenum<300;linenum+=8)       
  181.                 {LCD_DrawPoint_3(10+linenum,218,GRAY);}
  182.        
  183.        
  184.         /*竖条     */
  185.                 for(linenum=5;linenum<200;linenum+=8)
  186.                 {LCD_DrawPoint_3(10,16+linenum,GRAY);}
  187.        
  188.         for(linenum=5;linenum<200;linenum+=8)
  189.                 {LCD_DrawPoint_3(60,16+linenum,GRAY);}

  190.         for(linenum=5;linenum<200;linenum+=8)
  191.                 {LCD_DrawPoint_3(110,16+linenum,GRAY);}

  192.         for(linenum=5;linenum<200;linenum+=8)
  193.                 {LCD_DrawPoint_3(160,16+linenum,GRAY);}

  194.         for(linenum=5;linenum<200;linenum+=8)       
  195.                 {LCD_DrawPoint_3(210,16+linenum,GRAY);}

  196.         for(linenum=5;linenum<200;linenum+=8)       
  197.                 {LCD_DrawPoint_3(260,16+linenum,GRAY);}
  198.                
  199.         for(linenum=5;linenum<200;linenum+=8)       
  200.                 {LCD_DrawPoint_3(310,16+linenum,GRAY);}       
  201.        
  202.         LCD_ShowString(157,20,"T",12,BLACK,BROWN);       
  203.         LCD_ShowString(216,20,"t",16,BLACK,BROWN);       
  204.         LCD_ShowString(224,20," <5HZ     ",16,WHITE,DARKBLUE);               
  205.         /************************    中间显示的东东****************************************/       
  206. }
复制代码

所有资料51hei提供下载:
L001基于F1标准库3.5版本核心源代码.zip (20.83 KB, 下载次数: 95)
L001型示波器使用说明.doc (6.76 MB, 下载次数: 62)
L001原理图.pdf (1.04 MB, 下载次数: 79)


评分

参与人数 2黑币 +59 收起 理由
温xyz + 9 很给力!
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:207943 发表于 2019-10-25 13:04 | 只看该作者
厉害,感谢共享资料。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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