《毕业论文:基于单片机实训板的数字电压表设计》.doc

《毕业论文:基于单片机实训板的数字电压表设计》.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于单片机实训板的数字电压表设计 基于单片机实训板的电压表设计简介 TLC549是德州仪器公司(TI)推出的CMOS 8位A/D转换器。该芯片有一个模拟输入端口,3态的数据串行输出接口可以方便的和微处理器或外围设备连接。TLC549仅仅使用输入/输出时钟(I/O CLOCK)和芯片选择(/CS)信号控制数据。最大的输入输出时钟(I/O CLOCK)为1.1MHz。 三.电路原理分析: 电容C7、C8、C9、C10和L1组成电源滤波电路;R34和C13组成模拟电压调节电路;P3为被测模拟信号输入接口,当被测模拟信号为外部电压时,电压值由P3的2脚输入,当被测模拟电压为内部电压时可将P3 的2脚 和3脚短接,则所测量的电压为板上R34输出的电压。 TLC549时序图 四、源程序 /**************************************** 实验名称: 数字电压表 功能介绍:电压采样范围0-5V,精度位±20mV, AD最高转换速率可达到17us.硬件资源介绍:数码管段码对应P00-P07(a-dp),低电平有效 数码管位码经74hc138译码对应P20-P22。 AD_CS-P1.0 AD_CLK-P1.1 AD_IO-P1.2 详细情况请参照原理图. 单位: 长沙科瑞特电子有限公司研发部编写时间:2007-05-31 *****************************************/ #includereg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int #define SET_CS() AD_CS=0//CS 低电平有效; #define CLR_CS() AD_CS=1 #define Vref 512 sbit AD_CLK = P1^0; sbit AD_IO = P1^1; sbit AD_CS = P1^2; uchar code led_code[18]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80, //段码0x90,0x88,0x83,0xc6,0xa1,0x86,0x81,0x7f,0xff}; uchar data dis_data[4]={4,4,0,0}; //显示缓冲区 uchar idata dis_bit[4]={0x7f,0xbf,0xdf,0xef};//位码单元void delay(uint n); //延时子程序 void display(uchar *p,uchar n);//显示子程序 uchar adc_start(void); //AD转换程序 void data_switch(uchar ddata); //数值转换子程序 void main(void) { uchar temp; uchar i;while(1) {// temp= adc_start(); // data_switch(temp); //输出获得的数据 for(i=0;i100;i++) display(dis_data,3);} }void delay(uint n) //延时子程序 { while(n)n--; } void display(uchar *p,uchar n) { uchar i; for(i=0;in;i++){P2 =i0x07; if(i==0x02)P0 = led_code[p[i]]0x7f; elseP0 = led_code[p[i]];delay(30);P0=0xff;} }uchar adc_start(void) //AD转换程序 {char i,ad_data=0x00;AD_CLK=0;CLR_CS();_nop_();SET_CS();_nop_(); for( i=8;i0;i--){AD_CLK=1;//上升沿读数据AD_IO=1;//读P1时置一ad_data = 1;//左移一位,最高位先得到if(AD_IO)ad_data |=0x01;elsead_data =0xfe;AD_CLK=0;} return ad_data;} void data_switch(uchar ddata) { long temp; temp= ddata; temp= temp*Vref/256;dis_data[2]=(uint)temp/100; //最高位 dis_data[1]=(uint)temp%100/10; dis_dat

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档