基于51单片机的直流数字电压表系统。 采用掌握LED动态显示和A/D转换接口的设计方法,制作直流数字电压表。 用到了ADC0808芯片和四位七段LED显示器。 将待显示的数据拆解为3位十进制数,并分时的显示在其相应的数码管上。一次完整的输出过程:最低位数据传送P0口—P2.3清零—软件延时—P2.3置1—中间位数据送P0口—P2.2清零—软件延时—P2.2置1—最高位数据送P0口—P2.1清零—软件延时—P2.1置1,如此循环。 启动信号与输出使能信号(START、ALT、OE)均由软件方式的正脉冲提供;结束信号(EOC)由P2.6的高电平提供。A/D转换时钟信号由T0定时方式2中断提供(设系统的振荡频率为12MHz)。一次完整的A/D转换过程:发出启动信号—查询EOC标志—发出OE置1信号—读取A/D结果—发出OE清零信号,如此无限循环。 仿真原理图如下:
单片机C语言程序如下: #include <reg51.h> sbit _st= P2^5; sbit _eoc=P2^6; sbit _oe=P2^7; sbit led0=P2^3; sbit led1=P2^2; sbit led2=P2^1; sbit led3=P2^0; unsigned char ad_result=0; unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //×ÖÄ££¬êééÏ158ò3 unsigned char table2[]={0x3e}; void delay(unsigned int time) { unsigned int j=0; for(;time>0;time--) for(j=0;j<125;j++); } void disp(void) { led3=0; P0=table[ad_result/100]; delay(10); led3=1; led2=0; P0=table[(ad_result/10)%10]; delay(10); led2=1; led1=0; P0=table[(ad_result/1)%10]; delay(10); led1=1; led0=0; P0=table2[0]; delay(10); led0=1; } void main(void) { while(1) { _st=0;_st=1;_st=0; while(!_eoc); _oe=1; ad_result=P1; _oe=0; disp(); } } 附件下载(包含Protues工程和C语言程序):
text7.rar
(64.53 KB, 下载次数: 50)
|