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

📄 main.c

📁 一个单片机实现DA转换程序,程序实现了一个温度控制的数摸转换,并添加了去抖动处理!!
💻 C
字号:
//***************************************//
//	      项目:  TRB 测试板
//	      CPU :  ATmega16L
//        编译器:IAR
//***************************************//

#include "iom16.h"
#include "ioavr.h"
#include "inavr.h"
#include "avr_macros.h"

#include "userdef.h"
#include "userfun.h"
#include "userram.h"
#include "usertype.h"
#include "disdata.h"


void main(void)
{
   __disable_interrupt();
   system_init();
   user_init();
   __enable_interrupt();

   while(1)
   {
      clr_key_press;                         // beginning of judge key
      while(!key_press)
      {
      	 total_press_key=0;                  // first scan for key press
      	 while(total_press_key!=1)
      	 {
      	   total_press_key=0;
      	   temp_key_value=0;
      	   key_scan();	
      	   pre_key_value=temp_key_value;
      	 }
      	 delay(TIME_20MS);                   // delay 20ms
      	 total_press_key=0;                  // second scan for key press
      	 temp_key_value=0;
      	 key_scan();
      	 key_value=temp_key_value;
      	 if(key_value=pre_key_value)         // judge if two scans is same
      	 {
      	   if(total_press_key==1)
      	      set_key_press;
      	 }
      }
      CLR_OUTKEY1;                           // wait for key pop
      CLR_OUTKEY2;
      CLR_OUTKEY3;
      CLR_OUTKEY4;
      while((PIND&0X70)!=0x70)
      {
      }
      SET_OUTKEY1;
      SET_OUTKEY2;
      SET_OUTKEY3;
      SET_OUTKEY4;                           // end of judge key

      switch(key_value)                      // deal with all keys
      {
        case 1:
           {
               while(TCNT1H>=16);
               CheckWendu();                 // 检测温度
               break;	
           }	
        case 2:
           {
               GainChannel();                // 选择通道增益
               break;	
           }	
        case 3:
           {
               while(TCNT1H>=16);
               AddGain();                    // 通道增益加1
               break;	
           }		
        case 4:
           {
               while(TCNT1H>=16);
               DecGain();                    // 通道增益减1
               break;	
           }		
        case 5:
           {
               ChannelCheck();               // 屏蔽检测
               break;	
           }		
        case 6:
           {
               ShouFa();                     // 收发
               break;	
           }		
        case 7:
           {
               Shou();                       // 只收
               break;	
           }		
        case 8:
           {
               Fa();                         // 只发
               break;	
           }	
        case 9:
           {
               CheckOPD();                   // 检测输出功率
               break;	
           }	
        case 10:
           {
               CheckVSWR();                  // 检测驻波比
               break;	
           }	
        case 11:
           {
               DeviceCode_EEP=0xAC;
               read_error=0;
               write_error=0;
               clr_ram();
               check_ram();
               
               if((read_error!=0)||(write_error!=0))
                 {
                    disbuf[0]=BCDSEG_TAB[14];       //e
                    disbuf[1]=BCDSEG_TAB[27];       //r 
                    disbuf[2]=BCDSEG_TAB[27];       //r 
                    disbuf[3]=BCDSEG_TAB[0];        //o 
                    disbuf[4]=BCDSEG_TAB[27];       //r   
                    disbuf[5]=0xff;
                 }
               else
                 {
                    disbuf[0]=0xff;             //  /            
                    disbuf[1]=BCDSEG_TAB[9];    //  g
                    disbuf[2]=BCDSEG_TAB[0];    //  O
                    disbuf[3]=BCDSEG_TAB[0];    //  O
                    disbuf[4]=BCDSEG_TAB[13];   //  d      	     	
                    disbuf[5]=0xff;   	
                 } 
               disbcd(disbuf);    
   
               break;	
           }	
        case 12:
           {

               DeviceCode_EEP=0xA4;
               read_error=0;
               write_error=0;   
               clr_ram();
               check_ram();   
               if((read_error!=0)||(write_error!=0))
                 {
                    disbuf[0]=BCDSEG_TAB[14];       //e
                    disbuf[1]=BCDSEG_TAB[27];       //r 
                    disbuf[2]=BCDSEG_TAB[27];       //r 
                    disbuf[3]=BCDSEG_TAB[0];        //o 
                    disbuf[4]=BCDSEG_TAB[27];       //r   
                    disbuf[5]=0xff;
                 }
               else
                 {
                    disbuf[0]=0xff;             //  /            
                    disbuf[1]=BCDSEG_TAB[9];    //  g
                    disbuf[2]=BCDSEG_TAB[0];    //  O
                    disbuf[3]=BCDSEG_TAB[0];    //  O
                    disbuf[4]=BCDSEG_TAB[13];   //  d      	     	
                    disbuf[5]=0xff;   	
                 } 
               disbcd(disbuf);    

               break;	
           }	
        default:
               break;
      }
   }
}

⌨️ 快捷键说明

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