基于51单片机的ADC0832数字电压表(仿真+程序)_第1页
基于51单片机的ADC0832数字电压表(仿真+程序)_第2页
基于51单片机的ADC0832数字电压表(仿真+程序)_第3页
基于51单片机的ADC0832数字电压表(仿真+程序)_第4页
基于51单片机的ADC0832数字电压表(仿真+程序)_第5页
全文预览已结束

下载本文档

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

文档简介

1、仿真图:/*包含头文件*/#include <reg52.h>#include <intrins.h>/*端口定义*/sbit CS = P35;sbit Clk = P33;sbit DATI = P34;sbit DATO = P34;sbit P20=P20 ;/*定义全局变量*/unsigned char dat = 0x00; /AD值unsigned char count = 0x00; /定时器计数unsigned char CH; /通道变量unsigned char dis = 0x00, 0x00, 0x00; /显示数值/*共阳LED段码表*/un

2、signed char code tab=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;char code tablewe= 0xfd,0xfb,0xf7,0xef,0xdf,0xfe ;/*函数功能:AD转换子程序入口参数:CH 出口参数:dat*/unsigned char adc0832(unsigned char CH) unsigned char i,test,adval; adval = 0x00; test = 0x00; Clk = 0; /初始化 DATI = 1; _nop_(); CS = 0; _nop_(); Cl

3、k = 1; _nop_(); if ( CH = 0x00 ) /通道选择 Clk = 0; DATI = 1; /通道0的第一位 _nop_(); Clk = 1; _nop_(); Clk = 0; DATI = 0; /通道0的第二位 _nop_(); Clk = 1; _nop_(); else Clk = 0; DATI = 1; /通道1的第一位 _nop_(); Clk = 1; _nop_(); Clk = 0; DATI = 1; /通道1的第二位 _nop_(); Clk = 1; _nop_(); Clk = 0; DATI = 1; for( i = 0;i <

4、 8;i+ ) /读取前8位的值 _nop_(); adval <<= 1; Clk = 1; _nop_(); Clk = 0; if (DATO) adval |= 0x01; else adval |= 0x00; for (i = 0; i < 8; i+) /读取后8位的值 test >>= 1; if (DATO) test |= 0x80; else test |= 0x00; _nop_(); Clk = 1; _nop_(); Clk = 0; if (adval = test) /比较前8位与后8位的值,如果不相同舍去。若一直出现显示为零,请将

5、该行去掉 dat = test; _nop_(); CS = 1; /释放ADC0832 DATO = 1; Clk = 1; return dat;/*函数功能:延时子程序*/void delay(void) int k; for(k=10;k<500;k+);/*函数功能:将0-255级换算成0.00-5.00的电压数值*/void convdata(unsigned char i) dis0 = i/51; /个位 dis1 = (i%51)*10/51*2; /小数点后第一位 dis2 = (i%51)*10%51)*10/51*2; /小数点后第二位/*函数功能:数码管显示子程

6、序*/void display(void) P2=0xff; P0=tabdis0 & 0x7f; /显示个位和小数点delay(); P2=0xfd; P2=0xff; P0=tabdis1; /显示小数点后第一位delay(); P2=0xfb; P2=0xff; P0=tabdis2; /显示小数点后第二位delay(); P2=0xf7; P2=0xff; P0=0xff; /显示小数点后第二位delay(); P2=0xfe; /*函数功能:主程序*/void main(void) P2=0xff; /端口初始化 P0=0xff; delay(); CH = 0x00; /在

7、这里选择通道 0x00或0x01 TMOD = 0x01; /设置中断 TH0=(65536-50000)/256;/定时器1初值定时50msTL0=(65536-50000)%256; IE = 0x82; TR0 = 1; while(1) /主循环 dat = adc0832(CH); convdata(dat); /数据转换 display(); /显示数值 /*函数功能:定时器中断延时程序 这一段的作用时隔一段时间抽样一次 否侧显示的最后一位会不稳定*void timer0(void) interrupt 1 TMOD = 0x01; TH0=(65536-50000)/256;/定时器1

温馨提示

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

评论

0/150

提交评论