proteus和keil的仿真实验报告Word下载.doc
《proteus和keil的仿真实验报告Word下载.doc》由会员分享,可在线阅读,更多相关《proteus和keil的仿真实验报告Word下载.doc(5页珍藏版)》请在冰豆网上搜索。
![proteus和keil的仿真实验报告Word下载.doc](https://file1.bdocx.com/fileroot1/2022-10/5/ebeb39c4-1779-41f4-8dd1-66e676b2b489/ebeb39c4-1779-41f4-8dd1-66e676b2b4891.gif)
2008080303137
陈柏宇学号:
2008080303113
李冉学号:
2008080303119
张茜学号:
2008080303104
一、实验任务:
利用单片机AT89C51与A/D转换器件ADC0808设计一个数字电压表,能够测量0~5V之间的直流电压值,并用4位数码管显示该电压值。
设计任务要求:
硬件设计:
利用Proteus软件绘制原理图;
软件设计:
利用Keil软件进行程序设计;
完成软硬件调试:
Proteus和Keil联调,实现选题要求的功能;
二、实验设计:
1、硬件设计:
单
片
机
1.1设计框图:
电压输入
显示
模数转换
1.2proteus原理电路
2、软件设计:
2.1程序源代码:
#include<
reg51.h>
#defineucharunsignedchar //宏定义
#defineuintunsignedint
//定义管脚
sbitSTART=P3^2;
sbitOE=P3^0;
sbitEOC=P3^1;
sbitP07=P0^7;
sbitCLK=P3^4;
uchardataled[4];
uintdatatvdata;
//定义输出电压值变量
ucharcodetv[]={0xf7,0xfb,0xfd,0xfe};
//led动态显示控制位选数组
ucharcodea[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//led上显示段选数组,0~9,阴极管
voiddelay(void)//延时程序
{
uinti;
for(i=0;
i<
100;
i++)
for(i=0;
i++);
//对于12mhz单片机,10ms延时
}
voidled_display(void)//数码管显示模块
uchark,temp;
led[0]=tvdata%10;
//个位
led[1]=tvdata/10%10;
//十位
led[2]=tvdata/100%10;
//百位
led[3]=tvdata/1000;
//千位
for(k=0;
k<
4;
k++) //利用for循环进行动态显示
{
P2=tv[k];
//位选信号赋值给P2口
temp=led[k];
//段选信号赋值给临时变量temp
P0=a[temp];
//temp赋值给P0口
if(k==3) //点亮第四个数码管的小数点
{
P07=1;
//高位点亮
}
delay();
//延时
}
}
voidmain(void) //主控制模块
ET0=1;
//允许定时器中断
EA=1;
//开启中断总开关
TMOD=0x02;
//设置定时工作状态,定时器0工作在方式2
TH0=216;
//在寄存器中装入初始值,
TL0=216;
TR0=1;
//启动定时器0
while
(1)
{
START=1;
//启动转换
START=0;
while(EOC==0);
//等待模数转换结束
OE=1;
//输入高电平,打开输出三态门,输出数字量
tvdata=P1;
//读取P1口的值给输出电压值变量
tvdata*=5000/255.000;
//因为输出值在0~255之间,所以应该放大到0~5000
OE=0;
//关闭三态门,禁止输出
led_display();
//LED上显示测得电压值
}
voidt0(void)interrupt1using0//定时中断函数,使用寄存器组0,产生adc0808的驱动时钟脉冲
CLK=~CLK;
//clk电平取反
三、联调结果
5