单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

AD9850函数信号发生器制作(全套资料)

[复制链接]
跳转到指定楼层
楼主
jehu 发表于 2017-8-28 19:44 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
信号发生器的制作基于AD9850



所有资料51hei提供下载:
[电子设计]函数信号发生器(全套).rar (469.29 KB, 下载次数: 68)

单片机源程序如下:
  1. /*******************************************************
  2. 项目名:基于ARM Cortex-M3 函数信号发生器
  3. 涉及便件连接情况: PA0~7--------DDS模块 D0~D7
  4.                   PB4 PB5 PB6----DDS模块fqud  reset  w_clk
  5.                   PB0 PB2 PB3----液晶12864 CS(RS) DIO(RW) CLK(EP)
  6.                   PE0 PE1 PE2 ----KEY3  KEY4  KEY5
  7.                   PD1 PG5------KEY1 KEY2
  8.                   PD0 PG2------LED1 LED2
  9.                   PF0  PF1-----接24C04  SDA  SCL
  10. 程序主要功能:
  11. 作者:suqingxiao  huangrenji  liangping
  12. *********************************************************/

  13. #include <includes.h>
  14. #include  "AD9850.h"
  15. #include  "24C04.h"
  16. #define  SysCtlPeriEnable       SysCtlPeripheralEnable
  17. #define  SysCtlPeriDisable      SysCtlPeripheralDisable
  18. #define  GPIOPinTypeOut         GPIOPinTypeGPIOOutput
  19. #define  TASK_STK_SIZE                  64
  20. /**************************************
  21.   CONSTANTS 常量
  22. **************************************/

  23. /************************************
  24.   VARIABLES 变量
  25. *************************************/
  26. uint16 now_color=0;             //当前色
  27. uint16 state=0,flag=0;                 //状态
  28. uint16 frist_in=0;              //初次进入标志
  29. unsigned  long  num,aa=1,temp=0;
  30. unsigned long ulData  =  0;
  31. unsigned  char  buff[5];
  32. unsigned  char  display[10];   
  33. unsigned  char  fshi1=0,fge1=0,temp1=0;
  34. unsigned  char  fshi2=0,fge2=0,temp2=0;
  35. unsigned  char  fshi3=0,fge3=0,temp3=0;
  36. unsigned long dat=0,dat2,dat3;
  37. unsigned  char wan=0, qian=0,ge=0,shi=0,bai=0;
  38. unsigned  char wan2, qian2,ge2,shi2,bai2;
  39. unsigned  char wan3, qian3,ge3,shi3,bai3;
  40. unsigned  char ge4,shi4;

  41. static OS_STK  GstkStart[TASK_START_STK_SIZE];//启动任务的堆栈   
  42. static OS_STK  GstkLED[TASK_LED_STK_SIZE];
  43. OS_STK        Task1Stk[TASK_STK_SIZE];
  44. OS_STK        Task2Stk[TASK_STK_SIZE];


  45. /*************************************
  46.    FUNCTION PROTOTYPES 函数声明
  47. **************************************/
  48. static void taskStart (void  *parg);          //启动任务
  49. static void taskLED(void *parg);              //任务0
  50. void  Task1(void *data);
  51. void  Task2(void *data);


  52. /***********************************************
  53.     功能:主程序
  54. ************************************************/
  55. int main (void)
  56. {
  57.     OSInit();                                 //  OS-II 初始化uC/OS-II的内核

  58.     OSTaskCreate( taskStart,                                          
  59.                   (void *)0,
  60.                   &GstkStart[TASK_START_STK_SIZE-1],
  61.                   TASK_START_PRIO );                    
  62.    /*  初始化启动任务   */       
  63.     OSStart();                                // 启动uC/OS-II*/

  64.     return(0);
  65. }


  66. /****************************************
  67. ** Function name:           Task_Start          
  68. ** input parameters:        *p_arg
  69. *****************************************/
  70. static void taskStart (void  *parg)
  71. {
  72.     (void)parg;

  73.     targetInit();                      // 初始化目标单片机     

  74.     #if OS_TASK_STAT_EN > 0
  75.     OSStatInit();                         // 使能统计功能
  76.     #endif
  77.    
  78.     /* 在这里创建其他任务 */
  79.     OSTaskCreate( taskLED,                                          
  80.                   (void *)0,
  81.                   &GstkLED[TASK_LED_STK_SIZE-1],
  82.                   TASK_LED_PRIO );            //  建处理任务
  83.     OSTaskCreate(Task1, (void *)2, &Task1Stk[TASK_STK_SIZE - 1],2);       
  84.     OSTaskCreate(Task2, (void *)3, &Task2Stk[TASK_STK_SIZE - 1], 3);
  85.    
  86.    
  87.     KEY_Init(KEY1 | KEY2 | KEY3 |KEY4 |KEY5 ); //按键初始化
  88.    
  89.     LCDInit();   //LCD12864初始化                                               //  LCD初始化
  90.     clear_all(); // 清屏
  91.    
  92.     while (1)
  93.     {                             
  94.         /* 启动任务可在这里挂起  */
  95.        OSTaskSuspend(OS_PRIO_SELF);
  96.     }
  97. }


  98. /***********************************************
  99. 名称:任务0
  100. 功能:
  101. **********************************************/
  102. static void taskLED(void  *parg)
  103. {
  104.     (void)parg;
  105.     Display(ulData);//开机显示
  106.     SystemInit();//  系统初始化
  107.     init();//24C04初始化
  108.     num=read_add(1);//选波型,读波型
  109.    
  110.     /******正弦波****/
  111.     shi=read_add(2);//读24C04中正弦波十位
  112.     bai=read_add(3);//读24C04中正弦波百位
  113.     //qian=read_add(6);
  114.     //wan=read_add(5);
  115.     dat=read_add(6);////读24C04中正弦波频率
  116.     dat=wan*10000+qian*1000+bai*100+shi*10;//读24C04中正弦波频率
  117.    
  118.     fge1=read_add(7);//读24C04中正弦波幅度小数位
  119.     fshi1=read_add(8);
  120.     temp1=read_add(9);//读24C04中正弦波幅度值
  121.     temp1=fshi1*10+fge1;//读24C04中正弦波幅度值
  122.     /*************/
  123.    
  124.     /*****方波****/
  125.     shi2=read_add(10);//读24C04中方波十位
  126.     bai2=read_add(11);//读24C04中方波百位
  127.     //qian=read_add(6);
  128.     //wan=read_add(5);
  129.     dat2=read_add(12);//读24C04中方波频率
  130.     dat2=wan2*10000+qian2*1000+bai2*100+shi2*10;
  131.    
  132.     fge2=read_add(13);//读24C04中方波幅度小数位
  133.     fshi2=read_add(14);
  134.    
  135.     temp2=read_add(15);//读24C04中方波幅度
  136.     temp2=fshi2*10+fge2;//读24C04中方波幅度
  137.     /*************/
  138.    
  139.     /*****三角波*****/
  140.     shi3=read_add(16);//读24C04中三角波十位
  141.     bai3=read_add(17);//读24C04中三角波百位
  142.     //qian=read_add(6);
  143.     //wan=read_add(5);
  144.     dat3=read_add(18);//读24C04中三角波*频率
  145.     dat3=wan3*10000+qian3*1000+bai3*100+shi3*10;
  146.    
  147.     fge3=read_add(19);//读24C04中三角波幅度小数位
  148.     fshi3=read_add(20);
  149.     temp3=read_add(21);//读24C04中三角波幅度值
  150.     temp3=fshi3*10+fge3;//读24C04中三角波幅度值
  151.     /*************/
  152.     //num=temp;
  153.     for(;;)
  154.     {   
  155.       
  156.         if(flag==1)//标志位为1时可以操作24C04
  157.         {
  158.           flag=0;//标志位清0
  159.           write_add(1,num);//选波型 写到24C04
  160.          
  161.           /******正弦波*******/
  162.            write_add(2,shi);//写正弦波频率的十位到24C04
  163.            write_add(3,bai);//写正弦波频率的百位到24C04
  164.           // write_add(6,qian);
  165.           //write_add(5,wan);
  166.            dat=wan*10000+qian*1000+bai*100+shi*10;
  167.            write_add(6,dat);//写正弦波频率值到24C04
  168.            
  169.            write_add(7,fge1);//写正弦波幅值的小数位到24C04
  170.           write_add(8,fshi1);
  171.            temp1=fshi1*10+fge1;//写正弦波幅值到24C04
  172.            write_add(9,temp1);
  173.            /************/
  174.            
  175.            /***方波*****/
  176.            write_add(10,shi2);//写方波频率的十位到24C04
  177.            write_add(11,bai2);//写方波频率的百位到24C04
  178.           // write_add(6,qian);
  179.           //write_add(5,wan);
  180.            dat2=wan2*10000+qian2*1000+bai2*100+shi2*10;
  181.            write_add(12,dat2);//写方波频率值到24C04
  182.            
  183.            write_add(13,fge2);
  184.            write_add(14,fshi2);
  185.            temp2=fshi2*10+fge2;
  186.            write_add(15,temp2);
  187.            /******************/
  188.            
  189.            /******三角波*******/
  190.            write_add(16,shi3);//写三角波频率的十位到24C04
  191.            write_add(17,bai3);//写三角波频率的百位到24C04
  192.           // write_add(6,qian);
  193.           //write_add(5,wan);
  194.            dat3=wan3*10000+qian3*1000+bai3*100+shi3*10;
  195.            write_add(18,dat3);//写三角波频率值到24C04
  196.            
  197.            write_add(19,fge3);//写三角波幅值的小数位到24C04
  198.           write_add(20,fshi3);
  199.            temp3=fshi3*10+fge3;
  200.            write_add(21,temp3);//写三角波频率值到24C04
  201.            /*****************/
  202.         }
  203.       
  204.         if(KEY_Get(KEY1))//KEY1选波形型号
  205.         {
  206.            OSTimeDlyHMSM(0,0,0,100); //延时消抖
  207.            if(KEY_Get(KEY1))//再判断KEY1是否被按下
  208.            {
  209.             
  210.               num++;//选波形型号
  211.               flag=1;
  212.               if(num==4)
  213.               {
  214.                 num=0;              
  215.               }   
  216.            }
  217.        }
  218.      
  219.       if(num==1)////正弦波
  220.       {
  221.      
  222.         LCD_ComdWrite(0x93);//正弦波显示的位置
  223.         LCD_ComdWrite(0x0C);//关光标
  224.         Displaysin();//正弦波
  225.         dat=wan*10000+qian*1000+bai*100+shi*10;//显示初始值
  226.         
  227.         Write_9850(dat); //控制DDS模块输出
  228.         display[4]=dat%100000/10000+0X30;//万位
  229.         display[3]=dat%10000/1000+0X30;//千位
  230.         display[2]=dat%1000/100+0X30;//百位
  231.         display[1]=dat%100/10+0X30;//十位
  232.         display[0]=dat%10+0X30;//个位
  233.            if(display[4]==0x30)//高位为0,不显示
  234.            {
  235.              display[4]=0x20;
  236.             if(display[3]==0x30)        //高位为0,不显示
  237.             {
  238.                display[3]=0x20;              
  239.                if(display[2]==0x30)//次高位为0,不显示
  240.                {
  241.                display[2]=0x20;
  242.                if(display[1]==0x30)
  243.                display[1]=0x20;
  244.                }
  245.              }
  246.            }
  247.            flag=1;
  248.           LCD_ComdWrite(0x9B);//频率显示的位置
  249.           LCD_DataWrite(display[4]);//显示万位
  250.           LCD_DataWrite(display[3]);//显示百位
  251.           LCD_DataWrite(display[2]);//显示十位
  252.           LCD_DataWrite(display[1]);//显示十位
  253.           LCD_DataWrite(display[0]);//显示个位
  254.          LCD_DataWrite('H');
  255.          LCD_DataWrite('Z');
  256.         if(KEY_Get(KEY2))//KEY2控制加频率
  257.         {
  258.            OSTimeDlyHMSM(0,0,0,100);
  259.            if(KEY_Get(KEY2))
  260.            {
  261.                 //LCD_ComdWrite(0x9c);
  262.                 //LCD_ComdWrite(0x0F);//开光标显示
  263.                 //LCD_DataWrite(aa+0x30);
  264.                 shi++;
  265.                 flag=1;
  266.                 if(shi==10)  
  267.                 {
  268.                   shi=0;
  269.                   bai++;
  270.                   flag=1;
  271.                   if(bai==10)
  272.                   {
  273.                     bai=0;
  274.                     qian++;
  275.                     flag=1;
  276.                     if(qian==10)
  277.                     {
  278.                       qian=0;
  279.                       wan++;
  280.                       flag=1;
  281.                       if(wan==10)
  282.                       {
  283.                         wan=0;
  284.                         
  285.                       }
  286.                      
  287.                       dat=wan*10000+qian*1000+bai*100+shi*10;
  288.                       Write_9850(dat); //控制DDS模块输出
  289.                     }
  290.                   
  291.                    dat=wan*10000+qian*1000+bai*100+shi*10;
  292.                    Write_9850(dat);  //控制DDS模块输出  

  293.                   }
  294.                
  295.                  dat=wan*10000+qian*1000+bai*100+shi*10;
  296.                  Write_9850(dat);//控制DDS模块输出
  297.                 }
  298.          
  299.               dat=wan*10000+qian*1000+bai*100+shi*10;
  300.               Write_9850(dat); //控制DDS模块输出  
  301.                
  302.             }
  303.         }
  304.            
  305.         if(KEY_Get(KEY3))//KEY3控制减频率
  306.         {
  307.            OSTimeDlyHMSM(0,0,0,100);
  308.            if(KEY_Get(KEY3))
  309.            {
  310.                 //LCD_ComdWrite(0x9c);
  311.                 //LCD_ComdWrite(0x0F);//开光标显示
  312.                 //LCD_DataWrite(aa+0x30);
  313.                 shi--;
  314.                 flag=1;
  315.                 if(shi==0)  
  316.                 {
  317.                   shi=10;
  318.                   bai--;
  319.                   flag=1;
  320.                   if(bai==0)
  321.                   {
  322.                     bai=10;
  323.                     qian--;
  324.                     //flag=1;
  325.                     if(qian==0)
  326.                     {
  327.                       qian=10;
  328.                       wan--;
  329.                       //flag=1;
  330.                       if(wan==0)
  331.                       {
  332.                         wan=0;
  333.                       }
  334.                      
  335.                       dat=wan*10000+qian*1000+bai*100+shi*10;
  336.                       Write_9850(dat); //控制DDS模块输出
  337.                     }
  338.                   
  339.                    dat=wan*10000+qian*1000+bai*100+shi*10;
  340.                    Write_9850(dat);   //控制DDS模块输出

  341.                   }
  342.                   
  343.                  dat=wan*10000+qian*1000+bai*100+shi*10;
  344.                  Write_9850(dat);//控制DDS模块输出
  345.                 }
  346.                  
  347.               dat=wan*10000+qian*1000+bai*100+shi*10;
  348.               Write_9850(dat);  //控制DDS模块输出
  349.                
  350.             }
  351.            display[4]=dat%100000/10000+0X30;//显示千位
  352.            display[3]=dat%10000/1000+0X30;//显示千位
  353.            display[2]=dat%1000/100+0X30;//显示百位
  354.            display[1]=dat%100/10+0X30;//显示十位
  355.            display[0]=dat%10+0X30;//显示个位
  356.            if(display[4]==0x30)
  357.            {
  358.              display[4]=0x20;
  359.             if(display[3]==0x30)        //高位为0,不显示
  360.             {
  361.                display[3]=0x20;              
  362.                if(display[2]==0x30)//次高位为0,不显示
  363.                {
  364.                     display[2]=0x20;
  365.                     if(display[1]==0x30)
  366.                       display[1]=0x20;
  367.                }
  368.              }
  369.            }
  370.           LCD_ComdWrite(0x9B);//频率显示的位置
  371.           LCD_DataWrite(display[4]);
  372.           LCD_DataWrite(display[3]);
  373.           LCD_DataWrite(display[2]);
  374.           LCD_DataWrite(display[1]);
  375.           LCD_DataWrite(display[0]);
  376.           LCD_DataWrite('H');
  377.           LCD_DataWrite('Z');
  378.         }
  379.       }////正弦波
  380.       
  381.       
  382.       if(num==2)//  显示方波
  383.       {
  384.         flag=1;
  385.          LCD_ComdWrite(0x93);//方波显示的位置
  386.          LCD_ComdWrite(0x0C);//关光标
  387.          Displayfang();//  显示方波
  388.          dat2=wan2*10000+qian2*1000+bai2*100+shi2*10;
  389.          Write_9850(dat2); //控制DDS模块输出
  390.          display[4]=dat2%100000/10000+0X30;//显示千位
  391.            display[3]=dat2%10000/1000+0X30;//显示千位
  392.           display[2]=dat2%1000/100+0X30;//显示百位
  393.           display[1]=dat2%100/10+0X30;//显示十位
  394.           display[0]=dat2%10+0X30;//显示个位
  395.            if(display[4]==0x30)
  396.            {
  397.              display[4]=0x20;
  398.             if(display[3]==0x30)        //高位为0,不显示
  399.             {
  400.                display[3]=0x20;              
  401.                if(display[2]==0x30)//次高位为0,不显示
  402.                {
  403.                     display[2]=0x20;
  404.                     if(display[1]==0x30)
  405.                       display[1]=0x20;
  406.                }
  407.              }
  408.            }
  409.           LCD_ComdWrite(0x9B);//频率显示的位置
  410.           LCD_DataWrite(display[4]);
  411.           LCD_DataWrite(display[3]);
  412.           LCD_DataWrite(display[2]);
  413.           LCD_DataWrite(display[1]);
  414.           LCD_DataWrite(display[0]);
  415.           LCD_DataWrite('H');
  416.           LCD_DataWrite('Z');
  417.         if(KEY_Get(KEY2))//KEY2控制加频率
  418.         {
  419.            OSTimeDlyHMSM(0,0,0,100);
  420.            if(KEY_Get(KEY2))
  421.            {
  422.                 //LCD_ComdWrite(0x9c);
  423.                 //LCD_ComdWrite(0x0F);//开光标显示
  424.                 //LCD_DataWrite(aa+0x30);
  425.                 shi2++;
  426.                 flag=1;
  427.                 if(shi2==10)  
  428.                 {
  429.                   //aa=1;
  430.                   shi2=0;
  431.                   bai2++;
  432.                   flag=1;
  433.                   if(bai2==10)
  434.                   {
  435.                     bai2=0;
  436.                     qian2++;
  437.                     
  438.                     if(qian2==10)
  439.                     {
  440.                       qian2=0;
  441.                       wan2++;
  442.                       if(wan2==10)
  443.                       {
  444.                         wan2=0;
  445.                       }
  446.                      
  447.                       dat2=wan2*10000+qian2*1000+bai2*100+shi2*10;
  448.                       Write_9850(dat2); //控制DDS模块输出
  449.                     }
  450.                     
  451.                     dat2=wan2*10000+qian2*1000+bai2*100+shi2*10;
  452.                     Write_9850(dat2); //控制DDS模块输出   

  453.                   }
  454.                  
  455.                   dat2=wan2*10000+qian2*1000+bai2*100+shi2*10;
  456.                   Write_9850(dat2);//控制DDS模块输出
  457.                 }
  458.             
  459.               dat2=wan2*10000+qian2*1000+bai2*100+shi2*10;
  460.               Write_9850(dat2);  //控制DDS模块输出
  461.                
  462.             }
  463.         }
  464.            
  465.       
  466.         if(KEY_Get(KEY3))//KEY3控制减频率
  467.         {
  468.            OSTimeDlyHMSM(0,0,0,100);
  469.            if(KEY_Get(KEY3))
  470.            {
  471.                 //LCD_ComdWrite(0x9c);
  472.                 //LCD_ComdWrite(0x0F);//开光标显示
  473.                 //LCD_DataWrite(aa+0x30);
  474.                 shi2--;
  475.               flag=1;
  476.                 if(shi2==0)  
  477.                 {
  478.                   //aa=1;
  479.                   shi2=10;
  480.                   bai2--;
  481.                   flag=1;
  482.                   if(bai2==0)
  483.                   {
  484.                     bai2=10;
  485.                     qian2--;
  486.                     if(qian2==0)
  487.                     {
  488.                       qian2=10;
  489.                       wan2--;
  490.                       if(wan2==0)
  491.                       {
  492.                         wan2=0;
  493.                       }
  494.                       dat2=wan2*10000+qian2*1000+bai2*100+shi2*10;
  495.                       Write_9850(dat2); //控制DDS模块输出
  496.                     }
  497.                     dat2=wan2*10000+qian2*1000+bai2*100+shi2*10;
  498.                     Write_9850(dat2); //控制DDS模块输出   

  499.                   }
  500.                   dat2=wan2*10000+qian2*1000+bai2*100+shi2*10;
  501.                   Write_9850(dat2);//控制DDS模块输出
  502.                 }
  503.                   
  504.               dat2=wan2*10000+qian2*1000+bai2*100+shi2*10;
  505.               Write_9850(dat2);   //控制DDS模块输出   
  506.             }
  507.            display[4]=dat2%100000/10000+0X30;//显示千位
  508.            display[3]=dat2%10000/1000+0X30;//显示千位
  509.           display[2]=dat2%1000/100+0X30;//显示百位
  510.           display[1]=dat2%100/10+0X30;//显示十位
  511.           display[0]=dat2%10+0X30;//显示个位
  512.            if(display[4]==0x30)
  513.            {
  514.              display[4]=0x20;
  515.             if(display[3]==0x30)        //高位为0,不显示
  516.             {
  517.                display[3]=0x20;              
  518.                if(display[2]==0x30)//次高位为0,不显示
  519.                {
  520.                     display[2]=0x20;
  521.                     if(display[1]==0x30)
  522.                       display[1]=0x20;
  523.                }
  524.              }
  525.            }
  526.           LCD_ComdWrite(0x9B);//频率显示的位置
  527.           LCD_DataWrite(display[4]);
  528.           LCD_DataWrite(display[3]);
  529.           LCD_DataWrite(display[2]);
  530.           LCD_DataWrite(display[1]);
  531.           LCD_DataWrite(display[0]);
  532.           LCD_DataWrite('H');
  533.           LCD_DataWrite('Z');
  534.         }
  535.       }//  显示方波
  536.       
  537.       
  538.       
  539.        if(num==3)//  显示三角波
  540.        {
  541.         LCD_ComdWrite(0x93);//"三角波"显示的位置
  542.         LCD_ComdWrite(0x0C);//关光标
  543.         Displaythree();//  显示"三角波"
  544.         dat3=wan3*10000+qian3*1000+bai3*100+shi3*10;
  545.         Write_9850(dat3);//控制DDS模块输出
  546.         display[4]=dat3%100000/10000+0X30;//显示千位
  547.         display[3]=dat3%10000/1000+0X30;//显示千位
  548.         display[2]=dat3%1000/100+0X30;//显示百位
  549.         display[1]=dat3%100/10+0X30;//显示十位
  550.         display[0]=dat3%10+0X30;//显示个位
  551.         if(display[4]==0x30)
  552.         {
  553.             display[4]=0x20;//高位为0,不显示
  554.             if(display[3]==0x30)        //高位为0,不显示
  555.             {
  556.                display[3]=0x20;              
  557.                if(display[2]==0x30)//次高位为0,不显示
  558.                {
  559.                     display[2]=0x20;
  560.                     if(display[1]==0x30)
  561.                       display[1]=0x20;
  562.                }
  563.              }
  564.            }
  565.           LCD_ComdWrite(0x9B);//频率显示的位置
  566.           LCD_DataWrite(display[4]);
  567.           LCD_DataWrite(display[3]);
  568.           LCD_DataWrite(display[2]);
  569.           LCD_DataWrite(display[1]);
  570.           LCD_DataWrite(display[0]);
  571.           LCD_DataWrite('H');
  572.           LCD_DataWrite('Z');
  573.         if(KEY_Get(KEY2))//KEY2控制加频率
  574.         {
  575.            OSTimeDlyHMSM(0,0,0,100);
  576.            if(KEY_Get(KEY2))
  577.            {
  578.                 //LCD_ComdWrite(0x9c);
  579.                 //LCD_ComdWrite(0x0F);//开光标显示
  580.                 //LCD_DataWrite(aa+0x30);
  581.                 shi3++;
  582.                 flag=1;
  583.                 if(shi3==10)  
  584.                 {
  585.                   shi3=0;
  586.                   bai3++;
  587.                   flag=1;
  588.                   if(bai3==10)
  589.                   {
  590.                     bai3=0;
  591.                     qian3++;
  592.                     if(qian3==10)
  593.                     {
  594.                       qian3=0;
  595.                       wan3++;
  596.                       if(wan3==10)
  597.                       {
  598.                         wan3=0;
  599.                       }
  600.                       dat3=wan3*10000+qian3*1000+bai3*100+shi3*10;
  601.                       Write_9850(dat3); //控制DDS模块输出
  602.                     }
  603.                     dat3=wan3*10000+qian3*1000+bai3*100+shi3*10;
  604.                     Write_9850(dat3);  //控制DDS模块输出  

  605.                   }
  606.                   dat3=wan3*10000+qian3*1000+bai3*100+shi3*10;
  607.                    Write_9850(dat3);//控制DDS模块输出
  608.                 }
  609.                   
  610.                dat3=wan3*10000+qian3*1000+bai3*100+shi3*10;
  611.               Write_9850(dat3);  //控制DDS模块输出
  612.                
  613.             }
  614.         }
  615.            
  616.             if(KEY_Get(KEY3))//KEY3控制减频率
  617.             {
  618.            OSTimeDlyHMSM(0,0,0,100);
  619.            if(KEY_Get(KEY3))
  620.            {
  621.                 //LCD_ComdWrite(0x9c);
  622.                 //LCD_ComdWrite(0x0F);//开光标显示
  623.                 //LCD_DataWrite(aa+0x30);
  624.                 shi3--;
  625.                flag=1;
  626.                 if(shi3==0)  
  627.                 {
  628.                   //aa=1;
  629.                   shi3=10;
  630.                   bai3--;
  631.                   flag=1;
  632.                   if(bai3==0)
  633.                   {
  634.                     bai3=10;
  635.                     qian3--;
  636.                     if(qian3==0)
  637.                     {
  638.                       qian3=10;
  639.                       wan2--;
  640.                       if(wan3==0)
  641.                       {
  642.                         wan3=0;
  643.                       }
  644.                       dat3=wan3*10000+qian3*1000+bai3*100+shi3*10;
  645.                       Write_9850(dat3);//控制DDS模块输出  
  646.                     }
  647.                     dat3=wan3*10000+qian3*1000+bai3*100+shi3*10;
  648.                     Write_9850(dat3); //控制DDS模块输出   

  649.                   }
  650.                   dat3=wan3*10000+qian3*1000+bai3*100+shi3*10;
  651.                   Write_9850(dat3);//控制DDS模块输出
  652.                 }
  653.                   
  654.               dat3=wan2*10000+qian3*1000+bai3*100+shi3*10;
  655.               Write_9850(dat3);  //控制DDS模块输出   
  656.             }
  657.            display[4]=dat3%100000/10000+0X30;//显示千位
  658.            display[3]=dat3%10000/1000+0X30;//显示千位
  659.            display[2]=dat3%1000/100+0X30;//显示百位
  660.            display[1]=dat3%100/10+0X30;//显示十位
  661.            display[0]=dat3%10+0X30;//显示个位
  662.            if(display[4]==0x30)
  663.            {
  664.              display[4]=0x20;
  665.             if(display[3]==0x30)        //高位为0,不显示
  666.             {
  667.                display[3]=0x20;              
  668.                if(display[2]==0x30)//次高位为0,不显示
  669.                {
  670.                display[2]=0x20;
  671.                if(display[1]==0x30)
  672.                display[1]=0x20;
  673.                }
  674.              }
  675.            }
  676.           LCD_ComdWrite(0x9B);//频率显示的位置
  677.           LCD_DataWrite(display[4]);
  678.           LCD_DataWrite(display[3]);
  679.           LCD_DataWrite(display[2]);
  680.           LCD_DataWrite(display[1]);
  681.           LCD_DataWrite(display[0]);
  682.           LCD_DataWrite('H');
  683.           LCD_DataWrite('Z');
  684.         }
  685.       }  //  显示三角波
  686.       
  687.       
  688.       if(num==1)//按键调幅(正弦波)
  689.       {
  690.           temp1=fshi1*10+fge1;
  691.           buff[0]=temp1/10+0x30;
  692.           buff[1]=temp1%10+0x30;
  693.           LCD_ComdWrite(0x8B);
  694.           LCD_DataWrite(buff[0]);
  695.           LCD_DataWrite('.');
  696.           LCD_DataWrite(buff[1]);
  697.           LCD_DataWrite('V');
  698.             if(KEY_Get(KEY4))//KEY4控制加幅度
  699.             {
  700.               OSTimeDlyHMSM(0,0,0,100);
  701.               flag=1;
  702.               if(KEY_Get(KEY4))
  703.               {
  704.                   fge1++;
  705.                   flag=1;
  706.                   if(fge1==10)
  707.                   {
  708.                       fge1=0;
  709.                       fshi1++;
  710.                       flag=1;
  711.                       if(fshi1==6)
  712.                       {
  713.                         fshi1=0;
  714.                       }
  715.                       temp1=fshi1*10+fge1;
  716.                   }
  717.             
  718.                   temp1=fshi1*10+fge1;
  719.                   buff[0]=temp1/10+0x30;
  720.                   buff[1]=temp1%10+0x30;
  721.                   LCD_ComdWrite(0x8B);
  722.                   LCD_DataWrite(buff[0]);
  723.                   LCD_DataWrite('.');
  724.                   LCD_DataWrite(buff[1]);
  725.                   LCD_DataWrite('V');
  726.               }
  727.             }
  728.               
  729.             if(KEY_Get(KEY5))//KEY5控制减幅度
  730.             {
  731.               OSTimeDlyHMSM(0,0,0,100);
  732.               flag=1;
  733.               if(KEY_Get(KEY5))
  734.               {
  735.                   fge1--;
  736.                   flag=1;
  737.                   if(fge1==0)
  738.                   {
  739.                       fge1=10;
  740.                       fshi1--;
  741.                       flag=1;
  742.                       if(fshi1==0)
  743.                       {
  744.                         fshi1=0;
  745.                       }
  746.                       temp1=fshi1*10+fge1;
  747.                   }
  748.             
  749.                   temp1=fshi1*10+fge1;
  750.                   buff[0]=temp1/10+0x30;
  751.                   buff[1]=temp1%10+0x30;
  752.                   LCD_ComdWrite(0x8B);
  753.                   LCD_DataWrite(buff[0]);
  754.                   LCD_DataWrite('.');
  755.                   LCD_DataWrite(buff[1]);
  756.                   LCD_DataWrite('V');
  757.               }
  758.             }     
  759.          }//按键调幅(正弦波)
  760.         
  761.          
  762.       
  763.       if(num==2)//按键调幅(方波)
  764.       {
  765.           temp2=fshi2*10+fge2;
  766.           buff[0]=temp2/10+0x30;
  767.           buff[1]=temp2%10+0x30;
  768.           LCD_ComdWrite(0x8B);
  769.           LCD_DataWrite(buff[0]);
  770.           LCD_DataWrite('.');
  771.           LCD_DataWrite(buff[1]);
  772.           LCD_DataWrite('V');
  773.             if(KEY_Get(KEY4))//KEY4控制加幅度
  774.             {
  775.               OSTimeDlyHMSM(0,0,0,100);
  776.   
  777.               if(KEY_Get(KEY4))
  778.               {
  779.                   fge2++;
  780.                   flag=2;
  781.                   if(fge2==10)
  782.                   {
  783.                       fge2=0;
  784.                       fshi2++;
  785.                       flag=1;
  786.                       if(fshi2==6)
  787.                       {
  788.                         fshi2=1;
  789.                       }
  790.                       temp2=fshi2*10+fge2;
  791.                   }
  792.             
  793.                   temp2=fshi2*10+fge2;
  794.                   buff[0]=temp2/10+0x30;
  795.                   buff[1]=temp2%10+0x30;
  796.                   LCD_ComdWrite(0x8B);
  797.                   LCD_DataWrite(buff[0]);
  798.                   LCD_DataWrite('.');
  799.                   LCD_DataWrite(buff[1]);
  800.                   LCD_DataWrite('V');
  801.               }
  802.             }
  803.               
  804.             if(KEY_Get(KEY5))//KEY5控制减幅度
  805.             {
  806.               OSTimeDlyHMSM(0,0,0,100);
  807.               flag=1;
  808.               if(KEY_Get(KEY5))
  809.               {
  810.                   fge2--;
  811.                   flag=1;
  812.                   if(fge2==0)
  813.                   {
  814.                       fge2=10;
  815.                       fshi2--;
  816.                       flag=1;
  817.                       if(fshi2==0)
  818.                       {
  819.                         fshi2=0;
  820.                       }
  821.                       temp2=fshi2*10+fge2;
  822.                   }
  823.             
  824.                   temp2=fshi2*10+fge2;
  825.                   buff[0]=temp2/10+0x30;
  826.                   buff[1]=temp2%10+0x30;
  827.                   LCD_ComdWrite(0x8B);
  828.                   LCD_DataWrite(buff[0]);
  829.                   LCD_DataWrite('.');
  830.                   LCD_DataWrite(buff[1]);
  831.                   LCD_DataWrite('V');
  832.               }
  833.             }     
  834.          }//按键调幅(方波)
  835.         
  836.         
  837.         if(num==3)//按键调幅(三角波)
  838.         {
  839.          
  840.           temp3=fshi3*10+fge3;
  841.           buff[0]=temp3/10+0x30;
  842.           buff[1]=temp3%10+0x30;
  843.           LCD_ComdWrite(0x8B);
  844.           LCD_DataWrite(buff[0]);
  845.           LCD_DataWrite('.');
  846.           LCD_DataWrite(buff[1]);
  847.           LCD_DataWrite('V');
  848.             if(KEY_Get(KEY4))//KEY4控制加幅度
  849.             {
  850.               OSTimeDlyHMSM(0,0,0,100);
  851.               flag=1;
  852.               if(KEY_Get(KEY4))
  853.               {
  854.                   fge3++;
  855.                   flag=1;
  856. ……………………

  857. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码






评分

参与人数 2黑币 +10 收起 理由
liaoyx0214 + 5 回帖助人的奖励!
yuyu628 + 5 回帖助人的奖励!

查看全部评分

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

使用道具 举报

沙发
xang1yang2 发表于 2018-5-3 10:30 | 只看该作者
好资料,感谢楼主分享!
回复

使用道具 举报

板凳
飘飘飘 发表于 2018-5-8 10:18 | 只看该作者
可惜黑币不足下载不了。
回复

使用道具 举报

地板
小飞123456 发表于 2018-11-20 15:02 | 只看该作者
好棒 好棒
回复

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51黑电子论坛单片机. 联系QQ:125739409;技术交流QQ群582644647

Powered by 单片机教程网

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