基于51单片机的电压采集与显示系统的研究与开发内容摘要:

918171615IN 3IN 4IN 5IN 6IN 7S T A R TE O CD3OEC L O C KV c cV1G N DD1IN 2IN 1IN 0A D D AA D D BA D D CA L ED7D6D5D4D0V2D2A D C 0 8 0 9【精品文档】世界上,成功的有两种人,一种人是傻子,一种人是疯子。 傻子是会吃亏的人,疯子是会行动的人。 AT89C52 单片机 AT89C51 是 51 系列的一个型号,它是 ATMEL 公司生产的。 AT89C52 是一个低电压,高性能 CMOS 8 位单片机,片内含 8k bytes 的可反复擦写的 Flash 只读程序存储器和 256 bytes 的随机存取数据存储器( RAM),器件采用 ATMEL 公司的高密度、非易失性存储技术生产,兼容标准 MCS51指令系统,片内置通用 8位中央处理器和 Flash存储单元, AT89C51 有 40 个引脚, 32个外部双向输入 /输出( I/O)端口,同时内含 2个外中断口, 3 个 16 位可编程定时计数器 ,2 个全双工串行通信口, 2 个读写口线,AT89C51可以按照常规方法进行编程 ,但不可以在线编程。 AT89C51的主要功能特性有:兼容 MCS51指令系统 , 8k可反复擦写 (1000次) Flash ROM ,32个双向 I/O口 , 256x8bit内部 RAM, 3 个 16位可编程定时 /计数器中断 , 时钟频率 024MHz,2 个串行中断 ,可编程 UART 串行通道 , 2 个外部中断源 ,共 8 个中断源 ,2 个读写中断口线 ,3 级加密位 ,低功耗空闲和掉电模式 ,软件设置睡眠和唤醒功能。 而在本次设计中只需要用到最基本的 4 个输入输出 I/O 口功能。 通过汇编或是 C 语言编程,可以用指令对单片机的各输入输出进行控制,还可以进行各种基本运算。 八段数码管和 74LS47 八段数码管比七段数码管多路一位小数点,实际是 8 个 LED 摆放排列而成。 当特定的某几个数码管点亮时,就显示了特定的数字形状。 有共阳极和共阴极之分,共阳极是指 8 个输入端 a、 b、 c、 d、 e、 f、 g、 dp 要输入低电平才会是相应 LED 点亮,共阴极则须输入高电平。 本次 设计用的是共阳极的数码管。 图 2 是其结构原理图。 图 2 八段数码管结构 【精品文档】世界上,成功的有两种人,一种人是傻子,一种人是疯子。 傻子是会吃亏的人,疯子是会行动的人。 74LS47 译码芯片 74LS47 是常用的 BCD 对七段显示器译码器 /驱动器,可对共阳极七段数码管进行译码功能。 引脚图如图 3 所示例。 如当输入 DCBA=0010 则输出 abcdefg=0010010。 故使显示器显示 2。 其四位 BCD 码与对应的译码及数码管显示关系为: DCBA=0000,abcdefg=1000000,数码管显示 0; DCBA=0001,abcdefg=1111001,数码管显示 1; DCBA=0010,abcdefg=0100100,数码管显示 2; DCBA=0011,abcdefg=0110000,数码管显示 3; DCBA=0100,abcdefg=0011001,数码管显示 4; DCBA=0101,abcdefg=0010010,数码管显示 5; DCBA=0110,abcdefg=0000011,数码管显示 6; DCBA=0111,abcdefg=1111000,数码管显示 7; DCBA=1000,abcdefg=0000000,数码管显示 8; DCBA=1001,abcdefg=0011000,数码管显示 9; B I / R B O4R B I5LT3A7B1D6C2a13b12c11d10e9f15g14 图 3 74LS47 芯片 系统整体工作原理 现对整体系统的硬件和软件工作原理进行分析。 . 1 硬件原理 将各单元电路整合后可以得到完整的系统硬件电路 , 原理:由单片机的 P3 口的几根口线控制 ADC0809 的几个控制端,当 P3 口的几根口线依次输出地址选择、地址所存信号、开始( START)信号等的有效电平后, A/D 被启动,从相应的模拟输入通道采入模拟量,并经行转换,转换完成后, AD 的标志端口 EOC 有低电平变为高电平,单片机查询到这一状态后,【精品文档】世界上,成功的有两种人,一种人是傻子,一种人是疯子。 傻子是会吃亏的人,疯子是会行动的人。 由 对 AD 的 OE 置有效,使转换后的八位二进制数从锁存器中输出到 单片机的 P0 口。 单片机内部对这一二进制数进行计算等必要处理后从 P1 口输出到数码管显示部分显示出来。 然后单片机启动 A/D 进行下一路通道的转换,这就是通过改变 P0P3 输出到 A/D 的地址办到的。 地址不同,选择通道不同。 其它的控制方法不变。 本次设计只用到两路,故转换会在两路之间循环进行。 其中待测信号源由两个滑阻分压形成,改变滑线端位置,则分压改变,输入到 A/D 的模拟电压值变化。 滑阻的分压在 010V 变化,对此,可改变 A/D 的基准电压 Vref( +), Vref( )接地不变。 Vref( +)接 5V 时,则可对 05V 的电 压进行准确的转换。 若超出,则转换后的值一直是 8 位 1,即 11111111。 不能正确量化。 此时,将 Vref( +)接 10V,则可对 010V 的模拟电压进行正确的量化转换。 由以上可知图中的双刀双掷开关实际上起到了电压表量程选择的作用。 一路开关选择 5V 或 10V 电压,另一路选择高低电平将与量程对应的信号传到单片机的 口, 达到对电压值的显示。 . 2 软件原理分析 对上面的硬件部分,按照软件流程框图进行软件设计。 用 C 语言进行程序的编写。 程序如下: include define uc unsigned char define ui unsigned int sbit L_OE=P3^4。 //对各控制引脚进行定义; sbit L_EOC=P3^5。 sbit L_ALE=P3^6。 sbit L_START=P3^7。 sbit L2=P2^0。 void delay(ui x) //延时子程序,延时时间由实参传值确定; {uc i。 while(x) {for(i=0。 i10。 i++) {。 } } } //主程序; void main() { void display5in0(uc zhi)。 //各个子程序的声明,延时程序在前则不必; void warning(uc zhi)。 void display10in0(uc zhi)。 void display5in1(uc zhi)。 void display10in1(uc zhi)。 void AD_IN0()。 【精品文档】世界上,成功的有两种人,一种人是傻子,一种人是疯子。 傻子是会吃亏的人,疯子是会行动的人。 void AD_IN1()。 uc aa,bb。 while(1) //设置大循环,模数转换不停进行; { AD_IN0()。 //调用通道 0 转换子程序; aa=P0。 //将转换后的数字量给变量 aa; if(aa==0xff) //判断是否超出量程; {warning(aa)。 } //超出则调用警告子程序; else if(L2==0)display5in0(aa)。 /*判断量程,若是 5V,则调用通道 0 的5V 显示子程序; */ else if(L2==1)display10in0(aa)。 //否则调用通道 0的 10V显示子程序; AD_IN1()。 //通道 1 转换子程序; bb=P0。 //同上,将转换后的数字量传 给变量 bb; if(bb==0xff) //判断是否超出量程; {warning(bb)。 } //超出则警告; else if(L2==0)display5in1(bb。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。