找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8247|回复: 5
收起左侧

调幅信号处理(ADF4351 24M+ads8344+扫频步进1M)MSP430软件部分-国赛F题

[复制链接]
ID:149764 发表于 2017-11-29 09:13 | 显示全部楼层 |阅读模式
(分享文件)(ADF4351 24M+ads8344+扫频步进1M)调幅信号处理实验电路-TFT屏ILI9341(可用) - 固定输出 5个按键
全国大学生电子设计大赛F题-调幅信号处理实验电路-软件部分-MSP430
  模块由本振和ADS8344以及液晶TFT屏ILI9341组成
QQ图片20171129091054.png

程序流程图

程序流程图

单片机源程序如下:
  1. #include "msp430x54x.h"
  2. #include "string.h"//strlen函数头文件
  3. #include "sys.h"//延时
  4. #include "font.h"
  5. #include "lcd.h"//液晶设置基本配置
  6. #include "XT2.h"
  7. #include "gui.h"
  8. #include "test.h"
  9. #include "ADF4351.c"
  10. #include"ADS8344.h"
  11. #include"timer.h"

  12. uchar flag_key=0;


  13. #define key1   (P2IN&BIT2)
  14. #define key2   (P2IN&BIT3)
  15. #define key3   (P2IN&BIT4)
  16. #define key4   (P2IN&BIT5)
  17. #define key5   (P2IN&BIT6)
  18. #define key6   (P2IN&BIT7)



  19. void KEY_Fun(void);
  20. void saopin_chuli(void);
  21. unsigned long voltage_Trans( unsigned long num);

  22. void keyscan1_init()
  23. {
  24.    P2DIR &= ~(BIT2+BIT3+BIT4+BIT5+BIT6+BIT7);                   //按键初始化
  25.    P2REN |= (BIT2+BIT3+BIT4+BIT5+BIT6+BIT7);                    //上拉/下拉电阻使能(高)
  26.    P2OUT |= (BIT2+BIT3+BIT4+BIT5+BIT6+BIT7);      //REN上拉/下拉电阻使能寄存器需和输出寄存器配合使用
  27. }



  28. //主函数
  29. void main()
  30. {
  31.        WDTCTL = WDTHOLD + WDTPW;  
  32.        XT2_Init();        
  33.        P8_DIR=0xff;
  34.        P10_DIR=0xff;
  35.        P9_DIR=BIT3+BIT4+BIT5+BIT6+BIT7;
  36.        P11_DIR=BIT0;
  37.        LCD_Init();//液晶屏初始化
  38.        LCD_Clear(GBLUE);
  39.        timerB_init();
  40.       
  41.        ADF_Init();
  42.        ADS8344_init();
  43.        keyscan1_init();
  44.        display();//液晶固定显示
  45.        while(1)
  46.         {       
  47.                KEY_Fun();
  48.            switch(flag_key)
  49.           {
  50.               case 1:
  51.                       saopin_chuli();     //扫频处理            
  52.                       break;

  53.               case 2:   
  54.                          TBCCTL0&=~CCIE;
  55.                          freq=264300;
  56.                          WriteFreq(freq);
  57.                      
  58.                         break;

  59.       
  60.       }
  61.          
  62.               //WriteFreq(freq);        //直接写入频率值,就可以得到输出频率了,单位是KHZ
  63.               LCD_ShowNum(122,92,freq,8,16);
  64.               play_voltage(voltage_Trans(ads(0xF7)));//电压显示)//电压显示
  65.         }   
  66. }


  67. void saopin_chuli(void)
  68. {
  69.     Show_Str(40,170,BLUE,GBLUE,"扫频模式",24,1);
  70.     //LCD_ShowNum(50,90,freq,4,16);
  71.     while(number<=130)              //扫频(9M到20M,中断两次(0.2s)步进0.1M,110次步进,number至少220次)
  72.     {
  73.         WriteFreq(freq);
  74.         LCD_ShowNum(122,92, freq,8,16);
  75.         //LCD_ShowNum(50,90,ads(0xF7),4,16);
  76.           while(flag1==1)            //有载波的时候
  77.            {
  78.                     TBCCTL0&=~CCIE;     //关掉中断处理电压
  79.                      play_voltage(voltage_Trans(ads(0xF7)));//电压显示)//电压显示
  80.                       //LCD_ShowNum(50,130,ads(0xF7),4,16);
  81.                      TBCCTL0|=CCIE;
  82.                      TBR=0;
  83.                      flag1=0;               //回到无载波正常状态
  84.                   
  85.                                 
  86.            }
  87.     }

  88.            // freq=239300;                  //回到最初的状态
  89.             number=0;
  90.                   
  91.    
  92. }


  93. void KEY_Fun(void)
  94. {
  95.    if(key1==0)
  96.    {
  97.       delay_ms(10);
  98.       if(key1==0)
  99.       {
  100.           while(!key1);       
  101.            TBCCTL0|=CCIE;          //重新打开使能,重新扫频
  102.            flag_key=1;
  103.          
  104.       }
  105.    }
  106.    if(key2==0)
  107.    {
  108.       delay_ms(10);
  109.       if(key2==0)
  110.       {
  111.          while(!key2);
  112.          freq+=10000;
  113.          WriteFreq(freq);
  114.         // TBCCTL0&=~CCIE;
  115.       }
  116.    }
  117.    if(key3==0)
  118.    {
  119.       delay_ms(10);
  120.       if(key3==0)
  121.       {
  122.          while(!key3);
  123.          freq-=10000;
  124.          WriteFreq(freq);
  125.       }
  126.    }
  127.    if(key4==0)
  128.    {
  129.       delay_ms(10);
  130.       if(key4==0)
  131.       {
  132.          while(!key4);
  133.          freq+=1000;
  134.          WriteFreq(freq);
  135.       }
  136.    }
  137.      if(key5==0)
  138.    {
  139.       delay_ms(10);
  140.       if(key5==0)
  141.       {
  142.          while(!key5);
  143.          freq-=1000;
  144.          WriteFreq(freq);
  145.       }
  146.    }
  147.    if(key6==0)
  148.    {
  149.       delay_ms(10);
  150.       if(key6==0)
  151.       {
  152.          while(!key6);
  153. ……………………

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

  1. #define uchar unsigned char
  2. #define uint unsigned int
  3. #define ulong unsigned long

  4. //#define LCD     ((LCD_TypeDef *) LCD_BASE)


  5. void display();
  6. void play_voltage(ulong zhi);//电压显示
  7. void play_dB(uint temp);//增益显示

  8. void display()
  9. {
  10.       Show_Str(100,10,BLACK,GBLUE,"2017年国赛F题",24,1);
  11.       Show_Str(40,50,BLACK,GBLUE,"调幅信号处理实验电路",24,1);
  12.       Show_Str(50,90,BLUE,GBLUE,"本振:",24,1);
  13.       Show_Str(195,90,BLUE,GBLUE,"KHZ",16,0);
  14.       Show_Str(50,130,BLUE,GBLUE,"幅度:",24,1);
  15.       
  16.       
  17.      /*Show_Str(50,130,BLUE,GBLUE,"高性能射频宽带放大器",24,1);
  18.      Show_Str(50,170,RED,GBLUE,"当前增益值",24,1);
  19.      Show_Str(30,75,RED,YELLOW,"Company shortens the miles.",25,1);*/
  20.       
  21.       //Show_Str(30,135,BLUE,YELLOW,"dfsdsgfueuewui",16,1);
  22.       //Show_Str(30+5,155,BLUE,YELLOW,"123456789",16,1);
  23.       //Show_Str(30+5,175,BLUE,YELLOW,"123456789",17,1);
  24.       //delay_ms(1200);
  25.       //LCD_ShowChar(70,0,WHITE,YELLOW,' ',16,0);
  26.       //LCD_ShowChar(80,200,BLUE,YELLOW,0x30+1,16,1);
  27.       //LCD_ShowChar(96,200,BLUE,YELLOW,0x30+2,16,1);
  28.       //LCD_ShowChar(112,200,BLUE,YELLOW,0x30+1,16,1);
  29.       
  30.       
  31. }

  32. void play_voltage(ulong zhi)//电压显示
  33. {
  34.     uint i=0,j;
  35.    
  36.     unsigned long a0,a2,a3,a4;   
  37.     a0=zhi/1000;  
  38.     a2=zhi/100%10;  
  39.     a3=zhi/10%10;
  40.     a4=zhi%10;
  41.     uint table[4]={a0,a2,a3,a4};
  42.    
  43.     for(j=150;j<230;j+=16)                   //一个字符x占16个点,8个数128个点,116+16*7=228
  44.     {
  45.       if(j==166){LCD_ShowChar(166,130,BLUE,GBLUE,'.',16,0);}
  46.       else
  47.       {LCD_ShowChar(j,130,BLUE,GBLUE,0x30+table[i++],16,0);}
  48.     }
  49.     Show_Str(230,130,BLUE,GBLUE,"V",16,0);        
  50. }

  51. void play_dB(uint temp)//增益显示
  52. {
  53.    uint i=0,j;

  54.     unsigned int a3,a4;
  55.     a3=temp/10%10;
  56.     a4=temp%10;
  57.     uint table[4]={a3,a4};
  58.    
  59.     for(j=174;j<196;j+=16)                   //一个字符x占16个点,2个数128个点,96+16*1=208
  60.     {
  61.       LCD_ShowChar(j,220,RED,GBLUE,0x30+table[i++],16,0);
  62.     }
  63.     Show_Str(150,220,RED,GBLUE,":",24,0);
  64.    Show_Str(215,220,RED,GBLUE,"dB",16,0);      
  65. }


  66. void play_freq(uint temp)//频率显示
  67. {
  68.    uint i=0,j;

  69.     unsigned int a3,a4,a5,a6,a7,a8;
  70.    // a3=temp/10%10;
  71.    // a4=temp%10;
  72.    
  73.     a3=temp/100000;
  74.     a4=temp/10000%1000;
  75.     a5=temp/1000%100;
  76.     a6=temp/100%10;
  77.     a7=temp/10%10;
  78.     a8=temp%10;
  79.     uint table[6]={a3,a4,a5,a6,a7,a8};
  80.    
  81.     for(j=174;j<270;j+=16)                   //一个字符x占16个点,2个数128个点,96+16*1=208
  82.     {
  83.       LCD_ShowChar(j,175,RED,GBLUE,0x30+table[i++],16,0);
  84.     }
  85.   //  Show_Str(150,175,RED,GBLUE,":",24,0);
  86. //  Show_Str(215,175,RED,GBLUE,"dB",16,0);      
  87. }



  88. void play_Freq(ulong freq)//频率显示
  89. {
  90.     uint i=0,j;
  91.    
  92.     unsigned long a3,a4,a5,a6,a7,a8;    //a0,a1,a2,
  93.     //a0=freq/100000000;  
  94.     //a1=freq/10000000%1000000;  
  95.    // a2=freq/1000000%100000;
  96.     a3=freq/100000%10000;
  97.     a4=freq/10000%1000;
  98. ……………………

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



0.png
所有资料51hei提供下载:
(ADF4351 24M ads8344 扫频步进1M)调幅信号处理实验电路-TFT屏ILI9341(可用) - 固.rar (92.08 KB, 下载次数: 568)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:379185 发表于 2018-7-25 22:32 | 显示全部楼层
感谢分享。。下载看看
回复

使用道具 举报

ID:480011 发表于 2019-7-12 21:20 | 显示全部楼层
好像很强大
回复

使用道具 举报

ID:588788 发表于 2019-7-25 09:25 | 显示全部楼层
调幅信号处理实验电路软件部分
回复

使用道具 举报

ID:213187 发表于 2019-8-5 23:48 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:702262 发表于 2020-3-4 13:32 | 显示全部楼层
感谢分享
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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