资源简介

用D/A转换器输出一个正弦波,频率从20Hz~5KHz,采用矩阵式按键,由按键直接四位数指定频率,8052的定时器2定时输出。文件包含电路图和设计程序,及全部仿真文件可直接运行。

资源截图

代码片段和文件信息

#include 
#include 
#include 
#define uint unsigned int
#define uchar unsigned char
#define DAC0832 XBYTE[0x7fff]
#define KEY_PORT   P1
uchar code DSY_CODE[]=
{
0x800xb10xda0xf50xff0xf50xda0xb10x800x4f0x260x0b0x010x0b0x260x4f
};



float tdelay ;//每个点延时的时间
unsigned char keyNum=0xff;
unsigned char SetFreq_flag=0;//设置频率的标志
uint exchangeusuuj;
uint mntcaaa;
uint pinlv=1000;
uint g_Period;

//void DelayMS(uint u)//延时程序单位为10微秒
//{
//  uchar i;
//  while(u--)
//  {
//   for(i=0;i<120;i++);
// }
//}

 void DelayMs( unsigned int ms)
{
unsigned int ij;
for (i = 0; i < ms; i++)
for(j=0;j<124;j++);
}



//  #define cv 1024  // 10000次计数,60MHz时钟时定时2mS
void init_T2()   // 定时器2初始化
{ T2CON =0;   // 设定T2自动重装模式
T2MOD =0;
RCAP2H =(65536-us)/256;
RCAP2L =(65536-us)%256;
TH2 =(65536-us)/256;
TL2 =(65536-us)%256;
ET2 = 1;  // 开T2中断
PT2 = 1;  //T2 中断高优先级
TR2 = 1;  //启动T2 
}

unsigned char keyScan(void) 
{
  unsigned char key=0xff;
  unsigned char temptemp1temp2;
  
  KEY_PORT=0XF0;
  
  if( (KEY_PORT& 0XF0) !=0XF0) 
{  
EA=0;
    DelayMs(10);
     if( (KEY_PORT & 0XF0) !=0XF0)
 {
       temp1= KEY_PORT & 0XF0;
          KEY_PORT=0X0f;
          DelayMs(10);
      temp2= KEY_PORT & 0X0f; 
        
      while((KEY_PORT & 0X0f) !=0X0f);//等待按键释放
      
      
      temp=temp1|temp2;
      
      switch(temp)
{
         case 0xee:key=1;break;
         case 0xde:key=2;break;
         case 0xbe:key=3;break;
         case 0x7e:key=4;break;
         
         case 0xed:key=5;break;
         case 0xdd:key=6;break;
         case 0xbd:key=7;break;
         case 0x7d:key=8;break;  
                
         case 0xeb:key=9;break;
         case 0xdb:key=0;break;
         case 0xbb:key=10;break;
         case 0x7b:key=11;break;        

         case 0xe7:key=12;break;
         case 0xd7:key=13;break;
         case 0xb7:key=14;break;
         case 0x77:key=15;break; 
         
         default:break;        
      }    
     } 
 EA=1;
  }
  return key; 
}

void main()
{

EA=1;
EC=1;
CR=1;
    us=500;
g_Period=floor(1000000/pinlv );
tdelay=g_Period/16; //获得每个点需要延时的时间     
us=5*floor(tdelay);      //每个点需要延时多少个微秒
init_T2();  

while(1) //循环输出正弦
  {
  keyNum=keyScan(); //按键选择控制函数
if(keyNum!=0xff)
{  EA=0;
if(keyNum==10 && SetFreq_flag==0)  //A键  进入设置频率状态

     SetFreq_flag=1;
pinlv=0;
}
else if(keyNum<10 && SetFreq_flag==1)//数字键  输入频率
{
pinlv=pinlv*10+keyNum;
                 
}

else if(keyNum==10 && SetFreq_flag==1)//A键   HZ确定输出
{   
SetFreq_flag=0;
EA=1;
}
EA=1;
us=500;
g_Period=floor(1000000/pinlv );
tdelay=g_Period/16; //获得每个点需要延时的时间     
us=5*floor(tdelay);      //每个点需要延时多少个微秒
init_T2();  
}
    
  
  
  for(j=0;j<16;j++)
  {

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-12-05 20:02  单片机作业C51\
     文件        1397  2018-10-27 20:20  单片机作业C51\absacc.h
     文件       19649  2018-10-27 20:36  单片机作业C51\Last Loaded zyk.pdsbak
     文件        1197  2018-10-27 20:21  单片机作业C51\math.h
     文件        3088  2018-10-27 20:24  单片机作业C51\reg51f.h
     文件        6376  2009-05-07 14:37  单片机作业C51\STARTUP.A51
     文件       14054  2018-10-27 20:24  单片机作业C51\STARTUP.LST
     文件         749  2018-10-27 20:24  单片机作业C51\STARTUP.OBJ
     文件       19684  2018-10-27 20:38  单片机作业C51\zyk.pdsprj
     文件        2400  2018-12-23 14:31  单片机作业C51\zyk.pdsprj.LAPTOP-P90I1490.HP.workspace
     文件        3522  2018-10-27 20:17  单片机作业C51\zz.c
     文件        8389  2018-10-27 20:24  单片机作业C51\zz.LST
     文件       10347  2018-10-27 20:24  单片机作业C51\zz.OBJ
     文件       11334  2018-10-27 20:24  单片机作业C51\zzz
     文件        6475  2018-10-27 20:24  单片机作业C51\zzz.hex
     文件          53  2018-10-27 20:24  单片机作业C51\zzz.lnp
     文件       13536  2018-10-27 20:24  单片机作业C51\zzz.M51
     文件         165  2018-11-14 15:21  单片机作业C51\zzz.plg
     文件       71791  2018-12-05 20:02  单片机作业C51\zzz.uvgui.HP
     文件        5435  2018-11-14 15:24  单片机作业C51\zzz.uvopt
     文件       12200  2018-11-14 15:24  单片机作业C51\zzz.uvproj
     文件       58125  2018-10-27 20:39  单片机作业C51\zzz_uvopt.bak
     文件           0  2018-10-27 20:14  单片机作业C51\zzz_uvproj.bak

评论

共有 条评论