📄 scan.c
字号:
/*+++++++++++++++++++++++++++++++++++++++++++++++++++/
程序名 :时间发生函数
入口: 以1ms为基准的时间数量
出口:
功能: 产生任意的时间(基本时间单位是1ms)
+++++++++++++++++++++++++++++++++++++++++++++++++++*/
#include "CPLD.h"
unsigned char idata jishu1,jishu2;
unsigned char code base[8]={ 0x00,0x1a,0x33,0x4d,0x66,0x82,0x9d,0xb6 };
unsigned char code vcc[27]={ 0x00,0x0a,0x14,0x1e,0x28,0x32,0x3c,0x46,0x50,0x5a,0x64,0x6e,0x78,0x82,0x8c,0x96,0xa0,0xaa,0xb4,0xbe,0xc8,0xd2,0xdc,0xe6,0xf0,0xfa,0xff };
void scan (void) //jishu1代表基极电压的扫描,jishu2代表集电极电压的扫描
{
if(jishu2==0)
da(0,jishu1); //基极电压的扫描 ,开始阶段jishu2=0;jishu1=0;
da(1,jishu2); //vcc的电压扫描
if(jishu1==8)
jishu1=0; //jishu1大于7时,归零
p17=0; //同时开启两路da转换器
if(jishu2==26) //jishu2大于25时,归零
{ jishu2=0;
jishu1++;
}
else jishu2++;
}
void da(unsigned char addr,unsigned char dat)
{unsigned char b[11];
unsigned char dat1,ji1,ji2;
if(addr)
dat1=vcc[dat];
else
dat1=base[dat];
p17=1; /*LDAC置为高电平*/
p16=1; /*LOAD置为高电平*/
b[1]=addr%2; /*分解地址*/
addr=addr/2; //地址有两位
b[0]=addr%2; //addr的地址功能完成,后面的addr用于计数
b[2]=1; //RNG为1,加倍
for(ji1=10;ji1>2;ji1--) /*分解数据*/
{ b[ji1]=dat1%2;
dat1=dat1/2;
} //dat的数据功能完成,后面的dat用于计数
for(ji1=11,ji2=0;ji1>0;ji1--,ji2++) /*把地址和数据送到DAC并完成锁存*/
{ p15=1;
p14=b[ji2];
p15=0;
}
p16=0; /*完成DA转换*/
// p17=0; //用于同步LDAC脚,为零是开始转换
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -