资源描述
8通道的数字电压表
设计方案
目录
第一章 设计分析 1矚慫润厲钐瘗睞枥庑赖。
第二章 硬件电路分析 3聞創沟燴鐺險爱氇谴净。
2.1单片机AT89C51的分析 3残骛楼諍锩瀨濟溆塹籟。
2.2 ADC0808的分析 4酽锕极額閉镇桧猪訣锥。
2.3显示译码器和LED分析 5彈贸摄尔霁毙攬砖卤庑。
第三章 程序设计分析 6謀荞抟箧飆鐸怼类蒋薔。
3.1主函数 6厦礴恳蹒骈時盡继價骚。
3.2A/D转换函数 6茕桢广鳓鯡选块网羈泪。
3.4中断服务函数 6鹅娅尽損鹌惨歷茏鴛賴。
第四章 调试过程分析及仿真 7籟丛妈羥为贍偾蛏练淨。
第五章 总结 8預頌圣鉉儐歲龈讶骅籴。
第六章 附录 9渗釤呛俨匀谔鱉调硯錦。
第一章 设计分析
设计一个8通道的电压表,基于AT89X51单片机(在professional中使用的AT89C51)和ADC0809(在professional中使用的ADC0808)芯片实现模数转换,由74247显示译码器和4位LED数码管连接并显示,具有通道自选和量程(0-5v的电压)变换的功能。铙誅卧泻噦圣骋贶頂廡。
设计方案如下:
采用定时器/计数器T0、T1定时,T0定时溢出中断时对P3.7取反,输出频率为10KHZ的方波信号,作为ADC0808的转换时钟信号,T1定时1MS,定时溢出中断后,在中断服务程序中完成在数码管显示A/D转换结果的任务。擁締凤袜备訊顎轮烂蔷。
采用主程序、子程序结构。主程序中完成定时器的初始化设置,产生A/D转换的启动,在转换过程中判别转换是否结束。当转换结束时,让输入允许OE有效,将转换结果通过P0口读到单片机内部RAM单元格储存。将二进制数转换为十进制数的程序设计成子程序,在主程序中调用。将LED数码管的动态显示设计成子程序,在T1的中断服务程序中调用。贓熱俣阃歲匱阊邺镓騷。
开始
T0,T1的初始化
允许T0,TI中断,启动定时
转换结束
允许输入ADC0808输出
将转换结果读入到单片机
禁止输出ADC0808输出
调用数制转换子程序
启动A/D转换器开始转换
no
yes
坛摶乡囂忏蒌鍥铃氈淚。
第二章 硬件电路分析
2.1单片机AT89C51的分析
AT89C51 的引脚
(1) 工作电源端
Vcc:接+5V电源
Vss:接地
(2) 晶振引脚(时钟电路)
XTAL1:芯片内部振荡电路输入端。
XTAL2:芯片内部振荡电路输出端
(3) 并行I/O口引脚
(4) 控制引脚
ALE:地址锁存使能。当ALE为高电平时,P0口上的信息为低8位地址,在ALE信号的下降沿时将P0口上的低8位地址送地址锁存器锁存起来;在ALE为低电平期间,P0口上的信息为指令或数据信息,这样就能实现低位地址的数据分离。蜡變黲癟報伥铉锚鈰赘。
RST: 复位信号。复位信号是高电平有效,高电平有效的持续时间为2个机器周期以上。单片机的复位方式可由手动复位方式完成。買鲷鴯譖昙膚遙闫撷凄。
2.2 ADC0808的分析
ADC0808是一种较为常用的8路模拟输入量,芯片的主要部分是一个8位的逐次比较式 A/D转换器。为了能实现8路模拟信号的分时采集,在芯片内部设置了多路模拟开关及通道地址锁存和译码电路,因此能够对多路模拟信号进行分时采集和转换。转换后的数据送入三态输出数据锁存器。綾镝鯛駕櫬鹕踪韦辚糴。
ADC0808的引脚排布
IN0~IN7:8路模拟量输入端
DB0~DB7:数字量输入端
START:启动脉冲信号输入端,脉冲上升沿复位0808,下降沿启动A/D 转换
ALE:地址锁存信号,高电平有效时把三个地址信号送入地址所存器,并经地址译码得到地址输出,用以选择相应的模拟输入通道。驅踬髏彦浃绥譎饴憂锦。
EOC:转换结束信号。转换开始时变低,转换结束时变高,变高时降转换结果打入三态输出锁存器。
OE:输出允许信号输入端
CLOCK:时钟输入信号,最高允许值为640KHZ
VREF(+):正基准电压输入端
VREF(-):负基准电压输入端
GND:接地
Vcc:电源电压
2.3显示译码器和LED分析
共阳极的七段译码器是将十进制的数转化成字形码在与P1口的高四位位控码共同作用下显示出当前电压。
第三章 程序设计分析
3.1主函数
主程序内容首先是程序初始化,初始化的内容有定时器初始化,外部中断初始化,然后一个无限循环,循环内容为P2赋值,控制所选通道,调用A/D转换程序和调用BCD显示程序。猫虿驢绘燈鮒诛髅貺庑。
3.2A/D转换函数
START赋值启动转换,进行转换,然后在判断是否转换结束,如果结束之后就允许输出信号,读入转化二进制,然后在通过译码器把二进制转换为十进制输出显示。锹籁饗迳琐筆襖鸥娅薔。
3.3BCD显示函数
输出所选通道,进行延时,然后输出整数和小数显示代码,点亮小数点,进行延时,
3.4中断服务函数
定时器中断向CLOCK输入方波信号,部中断控制所选通道。
第四章 调试过程分析及仿真
写出程序后,进行目标构造,修改错误产生hex文件。作出图,并对其进行仿真。
仿真效果如下:
第五章 总结
这份作业其实做了很久,我觉得关键还是编程,一直没有编好程序,所以其他的所有东西都不能做。即使老师分析过一通道和八通道的程序,还是不会啊。然后后来写出来的程序有又很多的错误。最后请教同学,帮助我改错,最后终于对了。所以,以后要好好学习。不然写个程序都不会。还要多一点的实际操作,对程序的输入还要更加仔细点。不然每次都把时间花费在找错误上面。细心,细心,在细心啊。第六章 附录構氽頑黉碩饨荠龈话骛。
#include <reg51.h>
unsigned char code dispcode[4]={0x10,0x20,0x40,0x80};輒峄陽檉簖疖網儂號泶。
unsigned char dispbuf[3];
unsigned char M[8]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};尧侧閆繭絳闕绚勵蜆贅。
unsigned char N[8]={0,1,2,3,4,5,6,7};
unsigned char i,g;
unsigned char t=0;
sbit DP=P3^5;
sbit CLK=P3^7;
sbit ST=P3^0;
sbit OE=P3^1;
sbit EOC=P3^2;
void bcd();
void main()
{
TMOD=0x02;
IE=0x86;
TCON=0x04;
IP=0;
TH0=206;
TL0=206;
TR0=1;
while(1)
{
P2=M[t];
bcd();
ST=0;
ST=1;
ST=0;
while(EOC==0)
{;}
OE=1;
g=P0;
OE=0;
dispbuf[0]=g/51;
dispbuf[1]=((g%51)*10)/51;
}
}
void bcd()
{
P1=N[t]|dispcode[0];
for(i=0;i<100;i++);
P1=dispcode[2]|dispbuf[0];
DP=0;
for(i=0;i<100;i++);
P1=dispcode[3]|dispbuf[1];
DP=1;
for(i=0;i<100;i++);
}
void EXT1()interrupt 3
{
if(t<7)t++;
else t=0;
}
void t0()interrupt 1
{
CLK=~CLK;
}
12
展开阅读全文