您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > ADC0804模数转换与显示
ADC数模转换与现实(扩展用1602带电阻值显示)实验目的:1.掌握ADC的使用控制方法。2.实验内容:基本要求:设计一程序采集ADC0809第3通道的电压值,将其转换为数字量,并在数码管上显示;5V显示为255,0V显示为000。3.扩展要求:将转换结果以用1602表现出当前电阻值。C程序:#includereg52.h//52系列单片机头文件#includeintrins.h//包含_nop_函数所在的头文件#defineuintunsignedint//宏定义#defineucharunsignedcharsbitCS=P2^1;//ADC0804CS端sbitwr=P2^4;//ADC0804WR端sbitrd=P2^5;//ADC0804RD端sbitlcd1=P2^3;//lcd锁存器sbitlcden=P2^2;//lcd1602EN端sbitlcdrs=P2^0;//lcd1602RS端sbitdula=P2^7;//段选端sbitwela=P2^6;//位选端//floatr;ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};voiddelay(uintxms)//延时函数{uinti,j;for(i=xms;i0;i--)for(j=110;j0;j--);}voiddisplay(ucharbai,ucharshi,ucharge)//数码管显示函数{dula=1;//打开段选P0=table[bai];//送入百位dula=0;//关闭段选P0=0xff;//消隐wela=1;//打开位选P0=0x7e;//选择第一位wela=0;//关闭位选P0=0;//消隐delay(5);//延时dula=1;P0=table[shi];dula=0;P0=0xff;wela=1;P0=0x7d;wela=0;P0=0;delay(5);dula=1;P0=table[ge];dula=0;P0=0xff;wela=1;P0=0x7b;wela=0;P0=0;delay(5);}voidwrite_com(ucharcom)//1602写指令{lcdrs=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}voidwrite_data(uchardata1)//1602写数据{lcdrs=1;P0=data1;delay(5);lcden=1;delay(5);lcden=0;}voidinit()//1602初始化{dula=0;//关闭段选wela=0;//关闭位选lcden=0;//lcden置于低电平write_com(0x38);//设置16*2显示,5*7点阵,8位数据接口write_com(0x0c);//设置开显示,不显示光标write_com(0x06);//写一个字符后地址加1write_com(0x01);//显示清0,数据指针清0}voidlcd_display(uintge,F1,F2,F3,F4)//lcd_显示(F1小数点后一位F2小数点后两位F3F4){wela=0;dula=0;lcden=1;lcd1=1;//打开lcd锁存器//write_com(0x01);write_com(0x80);//选择在1602第一行显示write_data(48+ge);//ascii码48写入个位delay(5);//延时write_data('.');delay(5);write_data(48+F1);delay(5);write_data(48+F2);delay(5);write_data(48+F3);delay(5);write_data(48+F4);delay(5);write_data('K');delay(5);lcd1=0;//关闭锁存器}voidmain()//主程序{uchara,A1,A2,A3,shu;uintge,F1,F2,F3,F4;floatr;init();CS=0;while(1){r=(255-shu)/256;//转换公式wr=1;_nop_();wr=0;//启动A/D转换_nop_();wr=1;for(a=10;a0;a--){display(A1,A2,A3);}P1=0xff;//读取P1口之前先给其写全1rd=1;//选通AD0804CS端_nop_();rd=0;//A/D读使能_nop_();shu=P1;//A/D数据读取赋给P1口rd=1;A1=shu/100;//数码管分出百十个A2=shu%100/10;A3=shu%10;ge=(int)r%10;//(int)字符型强制转换成整形1602分出个位跟小数点后四位F1=(int)(r*10)%10;F2=(int)(r*100)%10;F3=(int)(r*1000)%10;F4=(int)(r*10000)%10;lcd_display(ge,F1,F2,F3,F4);}}仿真图:
本文标题:ADC0804模数转换与显示
链接地址:https://www.777doc.com/doc-4492848 .html