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

📄 phase.c

📁 运用TLC5510A高速(20M),扫描出波形,测量相位差,两个TLC5510A测两个波形.
💻 C
📖 第 1 页 / 共 2 页
字号:
/****************                    ********************/
/****************TLC5510测量相位     ********************/
/****************作者:张春龙        ********************/
/**************************************************************************/
#include <reg52.h>
#include <math.h>
#include <stdio.h>
#include <absacc.h>
#define uchar unsigned char

#define uint  unsigned int
#define ulong unsigned long int
/**************系统模块地址****************/
#define KEY      XBYTE[0x8000]  //只能读
#define DATAPORT XBYTE[0x9800]  //点阵数据口地址,双向读写
#define COMPORT  XBYTE[0x9a00]  //点阵命令口地址,双向读写
uchar xdata *Addr;
uchar xdata *Addr2;

/****************系统模块地址****************/
sbit  change=P1^3;
sbit  P16=P1^6;
sbit  game=P1^1;
sbit  CE=P1^0;
sbit  P15=P1^5;
sbit  clear=P1^4;
sbit  clr=P1^2;
            /*程序可改处*/
/****************功能函数存放处*****************************/
    /******DDS直接数字频率合成***********/
#define send_fre XBYTE[0xa000]        //送DDS的控制字
//#define fx_l XBYTE[0xa800]
//#define fx_m XBYTE[0xa900]
//#define fx_h XBYTE[0xaa00]
#define fo_l XBYTE[0xc000]
#define fo_m XBYTE[0xc100]
#define fo_h XBYTE[0xc200]            //频率地址

#define storge  1020                  //定义1K的内存
uchar  f[16]={" 1.000K +00.0du "};
bit  shang1=0;
bit  xia1=0;                    //定义上升和下降标志
bit  shang2=0;
bit  xia2=0;

bit  state=0;                  //电压1,频率0状态标志
bit  fine=0;               //定义完成标志
bit  qianhou=0;                //0超前 1滞后
bit  feng1=0;
bit  gu1=0;
bit  feng2=0;
bit  gu2=0;
bit  bzhi=0;
bit  change2=0;
uint gao1,di1,gao2,di2;
uchar Cursor=0;                //位数标志
uchar leijia=20;               //存储频率数据 720KHz
float outfre;
float realfre;
float xiang;
//uchar     change=0;                //波形转换
bit hk=0;                         //KHz和 Hz的标志
bit anjian=0;                     //有按键标志
  /************扫频地址和变量************/

   /********全局变量**************/
/****************功能函数存放处结尾*****************************/
/**********************************************************************/
/***************汉 字 字 型 码 数 组*****************/
/*****************汉 字 编 码*************/
  /* 点阵:16x16
   提取点阵方向:横向(先上->下, 再左->右)
   字节掉转:否
   字节方式:C语言 */
#define NUM 12
uchar code chn[NUM*32]={
  0x02,0x02,0x02,0x7F,0x42,0x42,0x7F,0x42,    // 电
  0x42,0x7F,0x42,0x02,0x02,0x02,0x01,0x00,
  0x00,0x00,0x10,0xF8,0x10,0x10,0xF0,0x10,
  0x10,0xF0,0x10,0x00,0x04,0x04,0xFC,0x00,
  
  0x00,0x3F,0x00,0x00,0x00,0x01,0x01,0xFF,    // 子
  0x01,0x01,0x01,0x01,0x01,0x01,0x05,0x02,
  0x00,0xF0,0x10,0x20,0x40,0x80,0x04,0xFE,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  0x01,0x21,0x11,0x11,0x01,0x02,0xF4,0x13,    // 设
  0x11,0x11,0x10,0x10,0x14,0x18,0x13,0x0C,
  0xF0,0x10,0x10,0x10,0x10,0x0E,0x00,0xF8,
  0x08,0x10,0x90,0xA0,0x40,0xB0,0x0E,0x04,

  0x00,0x20,0x10,0x10,0x00,0x00,0xF7,0x10,    // 计
  0x10,0x10,0x10,0x12,0x14,0x18,0x10,0x00,
  0x40,0x40,0x40,0x40,0x40,0x44,0xFE,0x40,
  0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,

  0x00,0x02,0x3F,0x00,0x00,0xFF,0x04,0x04,    // 武
  0x27,0x24,0x24,0x24,0x27,0xF8,0x40,0x00,
  0x40,0x50,0x48,0x48,0x40,0xFE,0x40,0x40,
  0x40,0x40,0x20,0x20,0xA0,0x12,0x0A,0x06,

  0x00,0x40,0x37,0x10,0x82,0x62,0x22,0x09,    // 汉
  0x11,0x20,0xE0,0x20,0x21,0x22,0x24,0x08,
  0x00,0x08,0xFC,0x08,0x08,0x08,0x10,0x10,
  0x20,0xA0,0x40,0xA0,0x10,0x08,0x0E,0x04,

  0x01,0x01,0x01,0x01,0x01,0xFF,0x01,0x02,    // 大
  0x02,0x02,0x04,0x04,0x08,0x10,0x60,0x00,
  0x00,0x00,0x00,0x00,0x04,0xFE,0x00,0x80,
  0x80,0x40,0x40,0x20,0x10,0x0E,0x04,0x00,

  0x22,0x11,0x11,0x00,0x7F,0x40,0x80,0x1F,    // 学
  0x00,0x01,0xFF,0x01,0x01,0x01,0x05,0x02,
  0x08,0x08,0x10,0x20,0xFE,0x02,0x04,0xE0,
  0x40,0x84,0xFE,0x00,0x00,0x00,0x00,0x00,
  
  0x02,0x01,0xFF,0x00,0x1F,0x10,0x10,0x1F,    // 高
  0x00,0x7F,0x40,0x4F,0x48,0x48,0x4F,0x40,
  0x00,0x04,0xFE,0x00,0xF0,0x10,0x10,0xF0,
  0x00,0xFC,0x04,0xE4,0x24,0x24,0xE4,0x0C,
  
  0x00,0x40,0x37,0x10,0x07,0x04,0xF4,0x17,    // 速
  0x14,0x10,0x11,0x12,0x14,0x28,0x47,0x00,
  0x40,0x44,0xFE,0x40,0xFC,0x44,0x44,0xFC,
  0x44,0xE0,0x58,0x48,0x40,0x46,0xFC,0x00,
  
  0x00,0x40,0x37,0x14,0x84,0x67,0x24,0x0C,    // 测
  0x17,0x14,0x64,0x27,0x22,0x24,0x28,0x20,
  0x04,0x04,0xC4,0x54,0x54,0xD4,0x54,0x54,
  0xD4,0x54,0x54,0xC4,0x84,0x44,0x14,0x08,
  
  0x10,0x11,0x11,0x11,0xFD,0x11,0x31,0x39,    // 相
  0x55,0x51,0x91,0x11,0x11,0x11,0x11,0x11,
  0x04,0xFE,0x04,0x04,0x04,0xFC,0x04,0x04,
  0x04,0xFC,0x04,0x04,0x04,0x04,0xFC,0x04,
 };
/*********************系统的程序/LCD有关*****************/

void Init_Int(void);             //中断初始化
void Init_time(void);            //定时器初始化
void Display(uchar *Tab);        //显示子程序最底层
void Delay(uint Time);           //延时子程序
void L_delay(uchar T);           //长时间延时程序
void Chars_dis(uchar *s);        //英文字符显示送显程序
void Out_data(uchar dat);             //向点阵数据口发数据
void Check(void);                     //检查点阵读写状态
void Out_com(uchar com);              //写一个命令
void Out_data_com(uchar dat1,uchar com1);//写一个数据和一个命令
void Out_data2_com(uchar dat1,uchar dat2,uchar com1);//写两个数据和一个命令
void Dis_point_2(uchar x,uchar y,uchar mode);      //指定位置描点程序
void Pic_out(void);                   //图形输出程序
void Init_Dian(void);                 //点阵初始化
void Clear_Dian(uchar a);                //字符显示清屏
void Dis_line(uchar Line_num);  //点阵显示一行字符
uchar Disp_Buff[16];                 //显示缓冲区
/*********************系统的程序/串口*****************************/

//void Init_Serial_Interrupt(void);
//void Init_Serial_Timer1(void);
//void Init_Serial(void);           //初始化串口通讯
//void Outport(uchar i);            //发送8位数据
//void Send_Byte(uchar datas);      //完整的单字节数据串行发送子程序包括初始化
//void Send_Word(uint datas);       //完整的双字节数据串行发送子程序包括初始化
/**********************************************************************/

/**********中   断   设   定***********************/
    /*******外部中断***********/
void Init_Int(void)
{
   EX0=0;   //开外部中断0
   IT0=1;   //边沿触发
   EX1=1;   //开外部中断1
   IT1=1;   //边沿触发
   EA=1;    //开全局中断
}
     /********定时中断********/
void Init_time(void)
{ TMOD=0x31;                  //00110001设定时器0和计数器1,都为模式1
 TR0=0;
 TR1=0;                     //不启动
 ET0=1;                     //允许中断
 ET1=1;
 TL0=0x30;
 TH0=0xf8;                   //定时初值,时间t=(2^16-T0初值)*振荡周期*12 求T0=63536,t=2ms
 TL1=0;                      //扫描频率
 TH1=0;
 EA=1;                      //开中断
}
   /***********中断结束************/
   /****** 以下为液晶函数**********/

/***************字符显示程序*******************/

/*整体刷以便显示缓冲区,将要显示数字的位用空格填充,
  用其他符号填充也可。
  入口为字符串首地址      */
void Chars_dis(uchar *s)
{
  uchar w;
  for(w=0;w<16;w++)
    Disp_Buff[w]=s[w];
}

//软件短时间延迟
void Delay(uint Time)
{
   while(Time--);
}

//软件长时间延时
void L_delay(uchar T)
{
  uchar o;
  for(o=0;o<T;o++)
    Delay(40000);
}

/*****************************************/
/*       点 阵 相 关 程 序               */
/*****************************************/

/************检查读写状态*******************/
void Check(void)
{uchar sta_1;
  do
  {
    sta_1=COMPORT;
    sta_1=sta_1&0x03;
  }
  while(sta_1!=0x03);
}
/************向数据口发数据*****************/
void Out_data(uchar dat)
{
  Check();
  DATAPORT=dat;
}
/***********写一个命令**********************/
void Out_com(uchar com)
{
  Check();
  COMPORT=com;
}
/*************写一个参数及命令**************/
void Out_data_com(uchar dat1,uchar com1)
{
  Out_data(dat1);
  Out_com(com1);
}
/************写两个参数及命令***************/
void Out_data2_com(uchar dat1,uchar dat2,uchar com1)
{
  Out_data(dat1);
  Out_data(dat2);
  Out_com(com1);
}
/**************点阵初始化程序*******************/
void Init_Dian(void)
{
  Out_data2_com(0x00,0x00,0x40);
  Out_data2_com(0x10,0x00,0x41);
  Out_data2_com(0x00,0x04,0x42);
  Out_data2_com(0x10,0x00,0x43);
  Out_com(0xa7);
  Out_com(0x80);
  Out_com(0x9c);
}
/*************清RAM区*********************/
void Clear_Dian(uchar a)        //0:清除文本区;1:清除图形区
{
  uint l,i;
  if(a==0)
   {
     Out_data2_com(0x00,0x00,0x24);
     i=129;
   }
  if(a==1)
   {
     Out_data2_com(0x00,0x04,0x24);
     i=1025;
   }
  Out_com(0xb0);
  for(l=i;l>0;l--)
   {
     Out_data(0x00);
   }
  Out_com(0xb2);
}
/******************************************************/
/**************** 显示一行英文字符*******************/
void Dis_line(uchar Line_num)     //显示内容为Disp_Buff内所存内容
{
  uchar l;
  Out_data2_com(Line_num*16,0x00,0x24);
  Out_com(0xb0);
  for(l=0;l<16;l++)
   {
     Out_data(Disp_Buff[l]-0x20);
   }
  Out_com(0xb2);
}
/**************指定位置描点程序*****************/
void Dis_point_2(uchar x,uchar y,uchar mode)
{
  uint StartAddr=0;
  uchar dat;
  StartAddr=x*16+y/8;
  dat=0xf0+7-y%8;
  if(mode==1)
  dat=dat|0x08;
  Out_data2_com((uchar)(StartAddr),(uchar)(StartAddr>>8),0x24);
  Out_com(dat);
}
/****************************************************************************/
/*************************汉字字型生成********************/
void Chn_create(void)
{
  uint u;
  Out_data2_com(0x03,0x00,0x22);
  Out_data2_com(0x00,0x1c,0x24);
  Out_com(0xb0);
  for(u=0;u<NUM*32;u++)
    {

        Out_data(chn[u]);
    }
  Out_com(0xb2);
}
/*****************************************************************************/
/*************在指定位置写指定汉字**************/
void Chn_dis(uchar X_chn,uchar Y_chn,uchar Num_chn)
{
  uchar Add;
  Add=16*Y_chn+X_chn;

⌨️ 快捷键说明

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