网站大量收购闲置独家精品文档,联系QQ:2885784924

stc89c52驱动ADC0832数模转换与显.doc

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
stc89c52驱动ADC0832数模转换与显

#includereg52.h #includeintrins.h #define uchar unsigned char #define uint unsigned int #define delay4us(){_nop_();_nop_();_nop_();_nop_();} //ADC0832引脚定义 sbit cs=O1^0; sbit clk=P1^1; sbit dio=P1^2; //lcd1602端口定义 sbit rs=P2^0; sbit rw=P2^1; sbit e=P2^2; //一为整数,两位小数的数字电压显示缓冲 uchar display_buffer[]=0.00V; //lcd第一行显示的信息 uchar code line1[]=current Voltage:; void delay(uint ms) { uchar t; while(ms--) for(t=0;t120;t++); } //LCD忙状态检测 bit lcd_busy_check() { bit result; rs=0;rw=1;e=1; delay4us(); result=(bit)(P00x80); e=0;return result; } //led命令 void lcd_write_command(uchar cmd) { while(lcd_busy_check()); rs=0;rw=0;e=0; _nop_();_nop_(); P0=cmd;delay4us(); e=1;delay4us();e=0; } //设置lcd显示位置 void set_disp_pos(uchar pos) { lcd_write_command(pos|0x80); } //写lcd void lcd_write_data(uchar dat) { while(lcd_busy_check()); rs=1;rw=0;e=0; P0=dat;delay4us(); e=1;delay4us();e=0; } //lcd初始化 void lcd_initialise() { lcd_write_command(0x38);delayms(1); lcd_write_command(0x0c);delayms(1); lcd_write_command(0x06);delayms(1); lcd_write_command(0x01);delayms(1); } //获取AD转换结果 uchar get_ad_result() { uchar i,dat1=0,dat2=0; //起始控制位置 cs=0; clk=0; dio=1;_nop_();_nop_(); clk=1;_nop_();_nop_(); //第一个下降沿之前,设DI=1/0 //选择单端/差分(SGL/DIF)模式中的单端输入模式 clk=0;dio=1;_nop_();_nop_(); clk=1_nop_();_nop_(); //第二个下降沿之前,设DI=0/1,选择CHO/CH1 clk=0;dio=0;_nop_();_nop_(); clk=1;dio=1;_nop_();_nop_(); //第三个下降沿之前,设DI=1, clk=0;dio=1;_nop_();_nop_(); //弟4~11,共8个下降沿读数据(MDB-LSB) for(i=0;i8;i++) { clk=1;_nop_();_nop_(); clk=0;_nop_();_nop_(); dat1=dat11|dio; } //弟11~18,共8个下降沿读数据(LSB-MSB) for(i=0;i8;i++) { dat2=dat2|((uchar)(dio)i); clk=1;_nop_();_nop_(); clk=0;_nop_();_nop_(); } cs=1; //如果MDB-LSB和LSB-MSB读取的结果相同,则返回读取的结果,否则返回0 return(dat1==dat2)?dat1 :0; } void main() { uchar i; uint d;//注意d的类型 lcd_initialise(); delayms(10); while(1) { //获取AD转换值,最大值255对应于最高电压5.00v //本例中设计为显示三个数,故使用500 d=get_ad_result()*500.0/255; //将AD转换后得到数据分解为三个数为 display_buffer[0]

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档