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

📄 8位da 0800 幅度可调.c

📁 DAC0800产生幅度可调正弦波的程序,调试通过了哦
💻 C
字号:
//*********************************************************
//File Name  :AD7541产生sin.c
//Author     :GHL
//Date       :2007/8/18
//Desciption :8位DA转换 并入
//            幅度可调,1000HZ
//*********************************************************

#include<reg51.h>
#include<intrins.h>

#define databus P0
#define key_bus P1

unsigned char i,N=10;
unsigned char code key_decode[]={'*',0,'#','D',7,8,9,'C',4,5,6,'B',1,2,3,'A'}; 

unsigned  int  code sinx[100]={0x7F,0x87,0x8F,0x97,0x9F,0xA6,0xAE,0xB5,0xBC,0xC3,0xCA,0xD0,0xD6,0xDC,0xE1,0xE6
                              ,0xEB,0xEF,0xF2,0xF6,0xF8,0xFA,0xFC,0xFD,0xFE,0xFE,0xFE,0xFD,0xFC,0xFA,0xF8,0xF6
                              ,0xF2,0xEF,0xEB,0xE6,0xE1,0xDC,0xD6,0xD0,0xCA,0xC3,0xBC,0xB5,0xAE,0xA6,0x9F,0x97
                              ,0x8F,0x87,0x7F,0x77,0x6F,0x67,0x5F,0x58,0x50,0x49,0x42,0x3B,0x34,0x2E,0x28,0x22
                              ,0x1D,0x18,0x13,0x0F,0x0C,0x08,0x06,0x04,0x02,0x01,0x00,0x00,0x00,0x01,0x02,0x04
                              ,0x06,0x08,0x0C,0x0F,0x13,0x18,0x1D,0x22,0x28,0x2E,0x34,0x3B,0x42,0x49,0x50,0x58
                              ,0x5F,0x67,0x6F,0x77};


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

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;
}

/*********定时器初始化程序******/
void Init_Timer ()
{
     TMOD=0x01;             //定时器0工作在16位定时器方式
     EA=1;                  //cpu开中断
     ET0=1;                 //允许T0中断
     TH0=~(1000/256);        //10kpbs
     TL0=~(1000%256);
    
}

/************T0中断服务程序*****************/
void timer0 (void)  interrupt 1
{    
     TH0=~(1000/256);        //定时常数设置
     TL0=~(1000%256);
     databus=sinx[(i+1)%100]/N;
}


main() 
{
   unsigned char keycode;
   
   Init_Timer ();

   while(1)
  { 
    TR0=0;                   //关定时器0
    keycode=keytest();
    //_nop_();_nop_();
    if(key_decode[keycode]==6)
    {
	   N=N-1;
	   if(N==0)N=10;
	}
    TR0=1;                                     
   // _nop_(); _nop_(); _nop_();  
  }

}

⌨️ 快捷键说明

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