📄 ad114read2.c
字号:
/*AD114单片机从cpld读取ad114转化的数据,显示到led,enter键控制*/
//软件滤波:连续采样20次,取平均值
#include<reg51.h>
#include<absacc.h>
#include <intrins.h>
#define unchar unsigned char
#define unint unsigned int
#define DisCmd XBYTE [0xC100] //7218控制字地址
#define DisData XBYTE [0xC000] //7218数据口地址
#define scode 0xb0 //7218软件译码方式命令字
#define bcode 0x90 //B码译码方式命令字
#define hexcode 0xd0 //软件译码方式命令字
#define unchar unsigned char
//MAX191工作在ROM Mode 方式
//对外中断1采用了查询方式,中断方式还得再试验
//12位AD精度有了,可是速度是一个问题,
//按现在的用法,转换时间为12uS,再算上数据处理时间(包括数据存储、显示等),对模拟信号的采样频率估计最快也就是
//几十KHz(只考虑转换时间和存储在RAM中所需时间)
sbit P3_3=P3^3;
sbit P3_7=P3^7;
unchar xdata *AD;
unint voltage;
unchar keynum;
unchar flag=0;
unchar dot=0; //小数点显示位置
char distab[8]={0x13,0x13,0x14,0x00,0x12,0x12,0x0e,0x11} ; // 要显示的内容 hello-pp
char code ledtab[]={ 0xfb,0xb0,0xed,0xf5,0xb6,0xd7,0xdf,0xf0,
//0, 1, 2, 3, 4, 5, 6, 7
0xff,0xf7,0xfe,0x9f,0xcb,0xbd,0xcf,0xce,
//8 ,9 ,a ,b ,c ,d ,e ,f
0x80,0xbe,0x8b,0xee,0x84,0xbb };
//熄灭 H L P - u
void delay1s()
{
unint i=1000,j=5000;
for(i;i>0;i--)
for(j;j>0;j--);
}
void delay20ms()
{
unint i=1000;
for(i;i>0;i--);
}
void display()
{
unchar i;
DisCmd=scode; //采用软件译码
for(i=0;i<8;i++) //将distab中的数据送如7218
{
if((i==dot)&dot)
DisData=ledtab[distab[i]]+0x80; //查表转化并将字型送入7218
else
DisData=ledtab[distab[i]]; //查表转化并将字型送入7218
}
for(i=1000;i>0;i--);
}
AD114Start()
{
long adin=0;
unint d;
unchar xdata *AD;
unchar i=10;
for(i;i>0;i--) //连续采样十次,取平均值
{
AD=0xA000;
d=*AD;
adin+=d;
//delay1s();
}
// adin=*AD;
adin=adin/10;
d=(adin*5000)/255; //实际电压值为4.935v;左边参考电压如为2.375,就换成2375
voltage=d;
distab[3]=d/1000;
d=d%1000;
distab[2]=d/100;
d=d%100;
distab[1]=d/10;
d=d%10;
distab[0]=d;
//distab[7]=0x10;
distab[6]=0x10;
distab[5]=0x10;
distab[4]=0x10;
//distab[0]=0x15;
AD=0xA000;
}
//**************************************************************************************
void intt0() interrupt 0
{
EX0=0; //关键盘中断,禁止相应其他按键
dot=3;
keynum=P1; //从p1口读入键盘值
keynum=keynum&0x0f; //取低四位;
if(keynum==0x0f)
flag=!flag;
if(flag)
distab[7]=0x00;
else
distab[7]=0x13;
EX0=1; //开中断
}
void main()
{
EX0=1;
EA=1;
display();
while(1)
{
if(flag)
AD114Start();
display();
delay1s();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -