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

📄 text1.c

📁 个人单片机入门程序集合 。很适合刚学单片机的人。用的是keil proteus
💻 C
字号:
//*********************************************************
//File Name  :AD9850.c
//Author     :GHL
//Date       :2007/8/6
//Desciption :AD9850的控制字串行加载程序
//            加入键盘实现步进
//*********************************************************

#include<reg51.h>

#define uchar unsigned char 
#define uint  unsigned int 
#define key_bus P1

sbit load=P0^1;   //FQUD
sbit sclk=P0^0;   //W_CLK
sbit sdata=P0^2;  //DATA
sbit reset=P0^3;   

unsigned char code key_decode[]={'*',0,'#','D',7,8,9,'C',4,5,6,'B',1,2,3,'A'};
/*************************延时子程序********************************/

delay(uchar d)
{
        while(--d);
}

/*************************AD9850初始化********************************/
void  init()
{
  reset=0;
  reset=1;
  reset=0;
  load=0;
}

/*************************AD9850显示正弦波********************************/
AD9850(float freq)
{
   float fw;
    uchar i,j,temp;
    uchar d[5];
   fw=freq*34.359738368;                       //d[4]中存放控制字最高位,即相位控制字
                                               //Freq=MCLK*FW/2^32
   d[4]=0;
   d[0]=(unsigned long)fw;
   d[1]=(unsigned long)fw>>8;
   d[2]=(unsigned long)fw>>16;
   d[3]=(unsigned long)fw>>24;
  
   
    load=0; 
    sclk=0; 
    sclk=1;
    sclk=0;
    load=1;
    load=0;
    
    for(i=0;i<5;i++)
    {
        temp=d[i];
        for(j=0;j<8;j++)
        {
            sclk=0;
            if(temp&1) sdata=1;
            else sdata=0;
            sclk=1;
            temp=temp>>1;
         }
      }
      load=1;
      load=0;

}


/************矩阵键盘读键程序*******************/

unsigned char keytest()
{
    unsigned char keycode=0xff,temp,i;
    key_bus=0x0f;
    temp=key_bus&0x0f; 
    if(temp!=0x0f)              //有键按下
    {
        key_bus=0x7f;
        for(i=0;i<4;i++)
        {
            temp=key_bus&0x0f;
            if(temp==0x07)   //输出端口示数
            {    
                keycode=i*4;
                break;
            }
            else if(temp==0x0b)
            {
                keycode=i*4+1;
                break;                                  						  
            }
            else if(temp==0x0d)
            {
                keycode=i*4+2;
                break;
            }
            else if(temp==0x0e)
            {
                keycode=i*4+3;
                break;
            }
            key_bus=(key_bus>>1)|0x80;
        }

         while((key_bus&0x0f)!=0x0f)   //等待释放
         {
             key_bus=0x0f; 
         }                                           
        
     }
     return keycode;
}


main()
{
   
    long freq;
    unsigned char keycode;
 
    AD9850(500000);
    
    while(1)
    {
        keycode=keytest();

        if(keycode==0xff)
    	{
          delay(10000);
          continue;
    	}

        if(key_decode[keycode]==2)
         { 
           freq=freq+100;
        
            AD9850(freq);
           
         }
        else if(key_decode[keycode]==1)
           { 
           freq=freq-100;
        
            AD9850(freq);
             
         }
    }
}
        	



⌨️ 快捷键说明

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