资源描述
洛阳理工学院实验报告
系部
计算机系
班级
B140502
学号
B14050226
姓名
韩亚辉
课程名称
单片机原理及应用
实验日期
2016/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 <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;
}
实验总结:
这次实验中间遇到了一些困难,刚开始无法程序无法运行,自己没有找到错误,后来通过向同学请教才找到了错误。之后在里边加入了中断才能顺利仿真。通过这次实验自己对于单片机的了解更加深了一步,同时也了解到了自己的短处,感觉收获很大。
展开阅读全文