特别说明
此资料来自百度文库(http://wenku.baidu.com/)
您目前所看到的文档是使用的抱米花百度文库下载器所生成
此文档原地址来自
http://wenku.baidu.com/view/5a815fea19e8b8f67c1cb90c.html
感谢您的支持
抱米花
http://blog.sina.com.cn/lotusbaob
基于C51片机、AD1674和MAX7221的字电表(含原理) 2010年06月24日 星期四 15:43
#include #include #define uchar unsigned char #define uint unsigned int
#define addo (10.0/4095.0)//
率,
12
位精度
(2^12-1=4095)
,量程
10V
管脚定义
*/ sbit DIN = P2^5; sbit SCL = P2^6; sbit CS = P2^7; sbit STS = P2^0; sbit CS1 = P2^1; sbit A0 = P2^2; sbit CE = P2^3; sbit RC = P2^4;
/*
static uchar disbuf[8];//
示存
*/ void delay_us(uchar n) { uchar i; while(n--) { for(i=0;i<10;i++); } }
/*
微秒延函
毫秒延函
*/ void delay_ms(uint n) { uchar i; while(n--) { for(i=0;i<100;i++); } }
/*
*/ void WriteData(uchar dat) { uchar i;
/*
MAX7221
向
串行一个字的据
for(i=0;i<8;i++) { DIN = (dat&(0x80>>i))?1:0; SCL = 0; delay_us(2); SCL = 1; delay_us(2); } }
*/ void MAX7221_Write(uchar addr,uchar dat) { CS = 0; WriteData(addr); WriteData(dat); CS = 1; }
/*
MAX7221
向
中指定的地址入据
*/ void MAX7221_Initial(void) { MAX7221_Write(0x0A,0x07);//LED
/*MAX7221
的初始化
8/16 MAX7221_Write(0x0B,0x07);//
MAX7221_Write(0x0C,0x01);//
MAX7221_Write(0x0F,0x00);//
MAX7221_Write(0x09,0xff);//
}
*/ void display(void) { uchar i; for(i=0;i<8;i++) { MAX7221_Write(i+1,disbuf[i]); } }
/*LED
示函
取
*/ uint AD1674_Read(void) { uint temp;
/*
AD1674
果
亮度值设置
描示器的个
正常操作模式(非掉电模式)
正常示模式(非模式)
个
8
0~7
8
的
个据行
B
BCD
型
uchar temp1,temp2;
CS1 = 1; CE = 0; //
CS1 = 0; A0 = 0; RC = 0; CE = 1; //CE=1,CS1=0,RC=0,A0=0
_nop_();
while(STS==1);//
初始化
据采集
,
等待据采集束
CE = 0; //
RC = 1; A0 = 0; CE = 1; //CE=1,CS1=0,RC=1,12/8=1,A0=0
芯片使能
启动
位温度
12
_nop_(); temp1 = P0;//
允高八位据并行输出
取果的高八位
取果的低四位
CE = 0;//
RC = 1; A0 = 1; CE = 1;//CE=1,CS1=0,RC=1,12/8=0,A0=1
芯片使能
_nop_(); temp2 = P0;//
CE = 0; CS1 = 1;//
temp = (temp1<<8)|temp2;//
return (temp>>4);//
}
*/ void HEXTOBCD(uchar chn) { uint temp; temp = (int)(AD1674_Read()*addo*1000);//
/*
向冲器中入要示的据
允低四位据并行输出
AD1674
据采集
高位和低位合成实际温度,
口的高四位
temp2
P0
返回果,右移四位是因
temp2
P0
口的高四位
disbuf[0] = temp/10000; disbuf[1] = (temp%10000/1000)|0x80;//
可示的实际温度值
disbuf[2] = temp%1000/100; disbuf[3] = temp%100/10; disbuf[4] = temp%10;
小点的位示
空示
示通道号
采集第一通道的据
示采集到的据
disbuf[5] = 15; disbuf[6] = 15;//
disbuf[7] = chn;//
}
*/ void main() { MAX7221_Initial(); while(1) { HEXTOBCD(1);//
/*
主函
display();//
delay_ms(10); } }
原理如下原理如下原理如下原理如下::::