#include <reg52.h>
#include <intrins.h>
#define MAIN_Fosc 11059200UL //宏定义主时钟HZ
/*位声明*/
sbit SCL=P1^0;
sbit SDA=P1^1;
//sbit RDY=P3^3;
sbit DU=P2^1; //数码管段选
sbit WE=P2^3; //数码管位选
#define CAPDAC 0
unsigned long int H,M,L;//
unsigned char MRD[3]={0,0,0};
/*自定义类型名*/
typedef unsigned char INT8U;
typedef unsigned char uchar;
typedef unsigned int INT16U;
typedef unsigned int uint;
float cfvalue; //得到的温度值
/*************************数码管程序**************************/
/*数码管毫秒级延时函数*/
void Delay_Ms(INT16U ms)
{
INT16U i;
do{
i = MAIN_Fosc / 96000;
while(--i); //96T per loop
}while(--ms);
}
/*共阴极数码管段选码*/
uchar code table[]={
//0 1 2 3 4 5 6 7 8
0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F,
//9 A B C D E F - . 关显示
0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71, 0x40, 0x80, 0x00
};
/*共阴极数码管显示函数*/
void Display(uchar cfvalue)
{
//------------------------------
DU = 1;
P0 = table[cfvalue/100]|0x80; //管显示百位
DU = 0;
P0 = 0xff; //清除断码
WE = 1;
P0 = 0xfe; //第一位数码管
WE = 0;
Delay_Ms(5);
//-------------------------------
DU = 1;
P0 = table[cfvalue%100/10]; //显示十位
DU = 0;
P0 = 0xff; //清除断码
WE = 1;
P0 = 0xfd; //第二位数码管
WE = 0;
Delay_Ms(5);
//-------------------------------
DU = 1;
P0 = table[cfvalue%10]; //显示个位
DU = 0;
P0 = 0xff; //清除断码
WE = 1;
P0 = 0xfb; //第三位数码管
WE = 0;
Delay_Ms(5);
}
/*************************IIC程序**************************/
/*IIC延时函数*/
void delay( )//微秒延时
{;;}
//开始信号
void start()
{
SDA=1;
delay();
SCL=1;
delay();
SDA=0;
delay();
}
//停止
void stop()
{
SDA=0;
delay();
SCL=1;
delay();
SDA=1;
delay();
}
//应答
void respons()
{
uchar i;
SCL=1;
delay();
while((SDA==1)&&(i<250));
SCL=0;
delay();
}
//初始化
void init()
{
SDA=1;
delay();
SCL=1;
delay();
}
//IIC写入一个字节
void write_byte(uchar date)//II2给AD7746 写一个字节 例如电容
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
SCL=0;
delay();
SDA=CY;
delay();
SCL=1;
delay();
}
SCL=0;
delay();
SDA=1;
delay();
}
//IIC读取一个字节
uchar read_byte()//读一个字节 把AD7746中的数据读送给II2总线
{
uchar i,k;
SCL=0;
delay();
SDA=1;
delay();
for(i=0;i<8;i++)
{
SCL=1;
delay();
k=(k<<1)|SDA;
SCL=0;
delay();
}
return k;
}
/*************************AD7746程序**************************/
//重置AD7746
void AD7746_reset()
{
start();
write_byte(0xBF); //AD7746重置
stop();
}
//AD7756指定地址写
void write_add(uchar addr,uchar date)
{
start();
write_byte(0x90);
respons();
write_byte(addr);
respons();
write_byte(date);
respons();
stop();
}
//读取AD7746的值
void read_add(uchar *p,uchar n)
{
uchar i;
start();
write_byte(0x90);
respons();
write_byte(0x01);
respons();
start();
write_byte(0x91);
respons();
for(i=0;i<n;i++)
{
*p=read_byte();
p++;
}
stop();
}
//总初始化
void initt()
{
init(); //初始化
AD7746_reset(); //重置
write_add(0x07,0x80);//地址0x07,设置成0x80使能电容通道,单端输入
write_add(0x09,0x2B);//EXC设置
write_add(0x0A,0xA1);//配置寄存器 地址指针0x0A,设置成0xA1(连续转换模式)
write_add(0x0B,0x80);//电容DAC A
write_add(0x0C,0x80);//电容DAC B
}
void main()
{
initt();
while(1)
{
read_add(MRD,3);//读取的值共有3个字节24位
H=MRD[0];//读取高8位数据
H<<=16;
L=MRD[1];//读取中8位数据
L<<=8;
M=MRD[2];//读取低8位数据
H=H+L+M;//将读取到的3个字节合并
cfvalue=(float)((H-0x800000)*4.096/0x800000+CAPDAC)*100;//将十六进制转化为10进制表
Delay_Ms(5);
Display(cfvalue);
}
}
C51单片机控制AD7746芯片读取电容值后通过共阴极数码管显示的KIEL工程源码.zip
版权申诉
128 浏览量
2022-03-14
08:45:26
上传
评论
收藏 73KB ZIP 举报
SKCQTGZX
- 粉丝: 87
- 资源: 5820
最新资源
- STM8L101F3P6单片机+CC1100模块433M遥控器设计硬件(原理图+PCB)工程文件.zip
- 上传下载铁人下载系统 Liuxing 1.0-liuxing1.0.rar
- 南京邮电大学数学实验实力雄厚,凭借其优秀的师资力量、丰富的实践教学资源和卓越的科研成果,成为国内一流的数学实验教学和科研基地
- 【火爆朋友圈的今天吃什么源码 v1.0】随机的为用户带来每一天的用餐选择和推荐.rar
- MPU6050中文版数据手册
- 上传下载手机电影下载-mobiledy.rar
- 响应式旅游网站源码下载 马尔代夫旅游网站.rar
- CMS小涴熊漫画连载系统漫画网站源码 带采集API.rar
- 福袋点点.apk
- 基于STM32的电子秤采用0.96寸OLED显示UI界面源码.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈