AD1674(双极性输入—5V-+5V)和MAX7221程序及proteus仿真.doc
-
资源ID:19290351
资源大小:108.50KB
全文页数:6页
- 资源格式: DOC
下载积分:10金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
AD1674(双极性输入—5V-+5V)和MAX7221程序及proteus仿真.doc
AD1674(双极性输入5V+5V)和MAX7221程序及proteus仿真图形中P代表“+”原件清单#include<reg51.h>#include<intrins.h>#define uchar unsigned char #define uint unsigned int#define addo (10.0/4095.0)/转换进率,12位精度(212-1=4095),满量程为10V/*管脚定义*/sbit DIN = P25;sbit SCL = P26;sbit CS = P27;sbit STS = P20;sbit CS1 = P21;sbit A0 = P22;sbit CE = P23;sbit RC = P24;static uchar disbuf8;/显示缓存/*微秒延时函数*/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+);/*向MAX7221串行写一个字节的数据*/void WriteData(uchar dat)uchar i;for(i=0;i<8;i+) DIN = (dat&(0x80>>i)?1:0; SCL = 0; delay_us(2); SCL = 1; delay_us(2);/*向MAX7221中指定的地址写入数据*/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亮度值设置为8/16MAX7221_Write(0x0B,0x07);/扫描显示器的个数为8个MAX7221_Write(0x0C,0x01);/正常操作模式(非掉电模式)MAX7221_Write(0x0F,0x00);/正常显示模式(非测试模式)MAX7221_Write(0x09,0xff);/对07的8个数据进行B型BCD译码/*LED显示函数*/void display(void)uchar i;for(i=0;i<8;i+) MAX7221_Write(i+1,disbufi);/*读取AD1674转换结果*/uint AD1674_Read(void) uint temp; uchar temp1,temp2; CS1 = 1; CE = 0; /初始化,关闭数据采集 CS1 = 0; A0 = 0; RC = 0; CE = 1; /CE=1,CS1=0,RC=0,A0=0启动12位温度转换 _nop_(); while(STS=1);/等待数据采集结束 CE = 0; /芯片使能关闭 RC = 1; A0 = 0; CE = 1; /CE=1,CS1=0,RC=1,12/8=1,A0=0允许高八位数据并行输出 _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;/关闭AD1674数据采集 temp = (temp1<<8)|temp2;/高位和低位合成实际温度,temp2为P0口的高四位temp=temp>>4; /返回转换结果,右移四位是因为temp2为P0口的高四位/*if(temp<0x800) temp=0x800-temp;disbuf0=10; */if(temp>0x000)&&(temp<0x800)temp=0x800-temp;disbuf0=10; if(temp=0x000)temp=temp+2047; disbuf0=10;if(temp=0x800) temp=temp-0x800; disbuf0=0;if(temp>0x800) temp=temp-0x800; disbuf0=14; return (temp);/*向缓冲器中写入要显示的数据*/void HEXTOBCD(uchar chn) uint temp; temp = (int)(AD1674_Read()*addo*10000);/转换为可显示的实际温度值 disbuf1 = temp/10000; disbuf2 = (temp%10000/1000)|0x80;/带小数点的位显示 disbuf3 = temp%1000/100; disbuf4 = temp%100/10; disbuf5 = temp%10; disbuf6 = 15;/空显示 disbuf7 = chn;/显示通道号/*主函数*/void main()MAX7221_Initial();while(1) HEXTOBCD(1);/采集第一通道的数据 display();/显示采集到的数据 delay_ms(10);