📄 ad1674.c
字号:
#include <absacc.h> // 包含头文件
#include <reg51.h>
#include <intrins.h>
//#define ad1674 XBYTE[0x7FFF] // CS0 的片选地址
#define cmd8279 XBYTE[0x3FFF] //定义外部命令口
#define data8279 XBYTE[0x3FFE] //定义外部数据口
#define LED_MOD 0x10 //定义显示模式000,1,0,000 右端送入8+8显示,二键封锁,编码扫描
#define LED_FEQ 0x38 //定义8279工作频率001,11000 24分频
#define LED_CLS 0xD1 //清除显示110,100,0,1
#define LED_WR 0x90 //写入显示RAM 100,1,000 从0地址开始显示,地址自动加1
#define READKB 0x40 //读端口命令010,0读FIFO RAM ,地址自动加1
#define uint unsigned int
#define uchar unsigned char
char xdata *ad_1674=(char xdata *)0x7fff;
uint a[5]={1,2,3,4,5};
uchar led[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67,0x77,0x7C,0x39,0x5E,0x79,0x71};//定义0 到F的键码 共阴的数码管
uchar led_0[]={0xBF,0X86,0XDB,0XCF,0XE6,0XED,0XFD,0X87,0XFF,0XEF,0XF7,0XFC,0XB9,0XDE,0XF9,0XF1};
void display_1674(void);
void test8279(void);
void delay(uchar n);
sbit p16=P1^6;// 控制A0,r/c两个控制信号
sbit p17=P1^7;
void ad_end (void) interrupt 0
{int i;
uint h, l, adresult,result_1;
float result_0;
p16=0x1;p17=0x0; //置r/c为1,A0=0 0000,0010
h=*ad_1674;
p16=0x1;p17=0x1;//置r/c为1,A0=1 0000,0011
l=*ad_1674;
h=(uint)(h<<4);
l=(uint)(l>>4);
adresult=h+l; //得到最后的数字结果
result_0=(float)adresult*(float)10.0/4096.0;
result_1=(uint)(result_0*1000);
for(i=4;i>=0;i--)
{
a[i]=result_1%10;
result_1=result_1/10;
}
return ;
}
void main(void)
{
EA=1;
EX0=1;
IT0=1;//下降沿触发
test8279();
while(1)
{
p16=0x0; p17=0x0; //在启动转换之前必须置r/c为0,A0=0 0000,0010
*ad_1674=0x00;//启动AD转换开始
display_1674();
}
}
void display_1674(void)
{
cmd8279=LED_WR;
data8279=led[a[4]]; //小数三位
data8279=led[a[3]]; //小数二位
data8279=led[a[2]]; //小数一位
data8279=led_0[a[1]]; //个位
data8279=led[a[0]]; //十位
// ;
}
void test8279(void) //8279初始化子程序
{
uchar i;
cmd8279=LED_MOD; //初始化
cmd8279=LED_FEQ;
cmd8279=LED_WR;
for (i=0;i<8;i++) //每个led均显示8
data8279=0xFF;
delay(2); //延时
cmd8279=LED_CLS; //清零
cmd8279=LED_WR;
}
void delay(uchar n) //延时子程序
{
unsigned int i;
for (i=1;i<20000*n;i++)
;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -