单片机课程设计仿真与实践指导 第2版 课件第15章 采用ADC0832的两路电压表设计_第1页
单片机课程设计仿真与实践指导 第2版 课件第15章 采用ADC0832的两路电压表设计_第2页
单片机课程设计仿真与实践指导 第2版 课件第15章 采用ADC0832的两路电压表设计_第3页
单片机课程设计仿真与实践指导 第2版 课件第15章 采用ADC0832的两路电压表设计_第4页
单片机课程设计仿真与实践指导 第2版 课件第15章 采用ADC0832的两路电压表设计_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1项目任务15.1硬件设计15.2第15章采用ADC0832的两路电压表设计程序设计15.3仿真与实验结果15.4215.1项目任务利用单片机STC89C52与ADC0832设计一个两路电压表,可以将两路0~5V之间的模拟直流电压值转换成数字量信号,在LCD1602液晶显示器上实时显示。3图15-2用ADC0832设计的两路电压表的电路原理图15.2硬件设计415.3程序设计#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedint#defineIO_1602P0//IO口sbitRS_1602=P2^0;//1602RS引脚接P2.0sbitRW_1602=P2^1;//1602R/W引脚接P2.1sbitE_1602=P2^2;//1602E引脚接P2.2sbitCS=P1^0;//ADC0832片选引脚接P1.0sbitCLK=P1^1;//ADC0832CLK引脚接P1.1sbitDIO=P1^2;//ADC0832DI、DO引脚接P1.2voiddelay_ms(unsignedintt)//延时子函数晶振11.0592MHz,延时1ms{ucharx,y;for(t;t>0;t--){for(x=0;x<114;x++)for(y=0;y<1;y++);}}voidWr1602Cmd(unsignedchardat)//LCD1602写命令函数{E_1602=0;IO_1602=dat;RS_1602=0;RW_1602=0;E_1602=1;delay_ms(1);E_1602=0;delay_ms(1);}voidWr1602Dat(unsignedchardat)//LCD1602写数据函数{E_1602=0;IO_1602=dat;RS_1602=1;RW_1602=0;E_1602=1;delay_ms(1);E_1602=0;delay_ms(1);}voidInit1602(void)//LCD1602初始化函数{delay_ms(20);Wr1602Cmd(0x38);delay_ms(5);Wr1602Cmd(0x38);delay_ms(5);Wr1602Cmd(0x06);Wr1602Cmd(0x0c);Wr1602Cmd(0x01);//清屏Wr1602Cmd(0x80);//设置地址}ucharRdAdc0832(bitHx)//ADC0832工作时序程序{ucharvalue0,value1,i;CS=1;CLK=0;DIO=1;CS=0;//Adc0832片选有效DIO=1;_nop_();_nop_();_nop_();_nop_();//写StartBit位CLK=1;_nop_();_nop_();_nop_();_nop_();//产生第1个CLK时钟脉冲CLK=0;_nop_();_nop_();_nop_();_nop_();DIO=1;_nop_();_nop_();_nop_();_nop_();//写SGL位CLK=1;_nop_();_nop_();_nop_();_nop_();//产生第2个CLK时钟脉冲CLK=0;_nop_();_nop_();_nop_();_nop_();DIO=Hx;_nop_();_nop_();_nop_();_nop_();//写通道号位515.3程序设计CLK=1;_nop_();_nop_();_nop_();_nop_();//产生第3个CLK时钟脉冲CLK=0;_nop_();_nop_();_nop_();_nop_();DIO=1;for(i=0;i<8;i++)//第4~11个CLK时钟脉冲,下降沿读取数据{CLK=1;_nop_();_nop_();_nop_();_nop_();//产生第4~11个CLK时钟脉冲CLK=0;_nop_();_nop_();_nop_();_nop_();value0<<=1;//上一个CLK时钟脉冲接收的数据向高位移动一位if(DIO==1)value0|=0x01;//当前CLK时钟脉冲接收的数据置位或清零elsevalue0&=0xfe;}for(i=0;i<8;i++)//第12~19个CLK时钟脉冲,下降沿读取数据{value1>>=1;//上一个CLK时钟脉冲接收的数据向低位移动一位if(DIO==1)value1|=0x80;//当前CLK时钟脉冲接收的数据置位或清零elsevalue1&=0x7f;CLK=1;_nop_();_nop_();_nop_();_nop_();//产生第12~19个CLK时钟脉冲CLK=0;_nop_();_nop_();_nop_();_nop_();}CS=1;//Adc0832片选失效return(value0==value1)?value0:0x00;//如果MSB->LSB和LSB->MSB读取的结果相同则返回读取的结果,否则返回0}voidmain()//主程序{unsignedlongi;Init1602();while(1){Wr1602Cmd(0x80+0x03);i=RdAdc0832(0);//读取Adc08320通道的值i=(i*5000/255);Wr1602Dat('C');//显示Adc08320通道的值Wr1602Dat('H');Wr1602Dat('0');Wr1602Dat('=');Wr1602Dat('0'+i/1000);//个位Wr1602Dat('.');Wr1602Dat('0'+i%1000/100);//小数点后一位Wr1602Dat('0'+i%1000%100/10);//小数点后两位Wr1602Dat('0'+i%1000%100%10);//小数点后三位Wr1602Dat('V');Wr1602Cmd(0xC0+0x03);//第二路电压显示引脚CH3i=RdAdc0832(1);//读取Adc08321通道的值i=(i*5000/255);Wr1602Dat('C');//显示Adc08321通道的值Wr1602Dat('H');Wr1602Dat('1');Wr1602Dat('=');Wr1602Dat('0'+i/1000);Wr1602Dat('

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论