洛阳理工学院实验报告
系部 计算机系 班级 B1学号 B1405022姓名 6 实验日期 成绩 2016/6/1 韩亚辉 40502 课程名称 实验名称 单片机原理及应用 直流数字电压表设计 实验目得:掌握LED 动态显示与A/D转换接口设计方法。 实验条件:装有Keil u Vision3编译软件与ISIS 7Professional仿真软件得电脑。 一、实验要求: (1)数码管动态显示编程; (2)A/D转换查询法编程; (3)考察延时量对动态显示效果得影响。 二、实验步骤: (1)提前阅读与实验7相关得阅读材料; (2)参照实验原理图,在ISIS中完成电路原理图得绘制; (3)采用uVision3进行C51动态显示与A/D转换得编程及调试; 三、运行结果: 仿真运行截图如下图所示: 四、实验程序代码: #include <reg51、h> 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;//第三位位码清0 P0=table[ad_result/100]; //输出第三位得字模 delay(10); //延时10ms led2=1; //第三位位码置1 led1=0; //第二位位码清0 P0=table[(ad_result/10)%10]; //输出第二位得字模 delay(10);//延时10ms led1=1; //第二位位码置1 led0=0; //最低位位码清0 P0=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置1 ad_result=P1; //读取AD转换结果 _oe=0; //使能OE置0 disp();//动态显示函数调用 } ﻩ } void Timer0_INT() interrupt 1 { _clk = !_clk; } 实验总结: 这次实验中间遇到了一些困难,刚开始无法程序无法运行,自己没有找到错误,后来通过向同学请教才找到了错误。之后在里边加入了中断才能顺利仿真。通过这次实验自己对于单片机得了解更加深了一步,同时也了解到了自己得短处,感觉收获很大。
ﻩ
因篇幅问题不能全部显示,请点此查看更多更全内容