洛阳理工学院实验报告系部计算机系班级B140502学号B14050226姓名韩亚辉课程名称单片机原理及应用实验日期2024/6/1实验名称直流数字电压表设计成绩实验目的:掌握 LED 动态显示和 A/D 转换接口设计方法.实验条件:装有 Keil u Vision3 编译软件和 ISIS 7Professional 仿真软件的电脑。一、实验要求:(1)数码管动态显示编程;(2)A/D 转换查询法编程;(3)考察延时量对动态显示效果的影响。二、实验步骤:(1)提前阅读与实验 7 相关的阅读材料;(2)参照实验原理图,在 ISIS 中完成电路原理图的绘制;(3)采纳 uVision3 进行 C51 动态显示和 A/D 转换的编程及调试;三、运行结果:仿真运行截图如下图所示:四、实验程序代码:#include sbit _clk=P2^4;sbit ALE=P2^5; sbit _st = P2^5; //定义 AD 启动位,_st sbit _eoc = P2^6; //定义 AD 结束位,_eoc sbit _oe = P2^7; //定义 AD 使能位,_oe sbit led0 = P2^3; //定义数码管最低位,led0 sbit led1 = P2^2;//定义数码管第二位,led1 sbit led2 = P2^1;//定义数码管第三位,led2 unsigned char ad_result=0; //定义 AD 转换结果变量,ad_result unsigned char table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//定义十进制显示字模数组,table[] void delay(unsigned int time) //延时函数{ unsigned int j = 0; for(;time〉0;time--)for(j=0;j〈125;j++); }void disp(void)//显示函数{ led2=0;//第三位位码清 0P0=table[ad_result/100]; //输出第三位的字模delay(10); //延时 10ms led2=1; //第三位位码置 1led1=0; //第二位位码清 0P0=table[(ad_result/10)%10]; //输出第二位的字模delay(10);//延时 10ms led1=1; //第二位位码置 1led0=0; //最低位位码清 0P0=table[ad_result%10]; //输出最低位的字模delay(10); //延时 10ms led0=1; //最低位位码置 1 } void main(void) { TMOD = 0x02; TH0 = 206; TL0 = 206; TR0=1; EA=1; ET0=1; ALE=0; ALE=1; while(1) { _st=0;_st=1;_st=0; //模拟启动时序,发出启动 AD 转换脉冲while(!_eoc);//查询 EOC 标志,若 EOC=0,原地等待_oe=1; //若 EOC=1,使能 OE 置 1ad_result=P1; //读取 AD 转换结果_oe=0; //使能 OE 置 0disp();//动态显示函数调用}}void Timer0_INT() interrupt 1 { _clk = !_clk; } 实验总结:这次实验中间遇到了一些困难,刚开始无法程序无法运行,自己没有找到错误,后来通过向同学请教才找到了错误。之后在里边加入了中断才能顺利仿真。通过这次实验自己对于单片机的了解更加深了一步,同时也了解到了自己的短处,感觉收获很大。