本设计分为三个简单模块,ad 、单片机最小系统,及显示器。程序及仿真可以下载附件
制作出来的实物图如下:
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
proteus仿真
引脚连接及建议:
CLOCK--------P3.0
START---------P3.3
EOC ----------P3.7
OE ------------P3.6
单片机为AT89C51
Ad为ADC0809或者0808
其区别为0809的out1-out8对应单片机的p1.0-p1.7
0808d的out1-out8对应单片机的p1.7-p1.0
显示器为lcd1602
由于仿真原件库的问题,仿真使用的0808,显示器使用的LM016L。
实物使用的0809及1602
关于如何用keil创建工程和生成hex文件,以及proteus如何下载hex文件到单片机,百度有详细步骤。
单片机源程序如下:
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define ufloat unsigned float
- uchar code table[]="THE RES:";
- sbit lcdrs=P2^0;
- sbit lcdrw=P2^1;
- sbit lcden=P2^2;
- sbit OE=P3^6;
- sbit EOC=P3^7;
- sbit CLOCK=P3^0;
- sbit ST=P3^3;
- unsigned char dat[]="00.000k";
- unsigned int tmp;
- float mo;
- unsigned char adc;
- uchar num;
- void delay(uint z)//延时2ms
- {
- uint x,y;
- for (x=z;x>0;x--)
- for (y=110;y>0;y--);
- }
- void write_com(uchar com)//写命令
- {
- lcdrw=0; //低电平为写
- lcdrs=0;//低电平为命令选择
- P0=com;
- delay(5) ;
- lcden=1;
- delay(5) ;
- lcden=0;
- }
- void write_data(uchar date)//写数据
- {
- lcdrw=0;//低电平为写
- lcdrs=1;//高电平为数据选择
- P0=date;
- delay(5);
- lcden=1;
- delay(5);
- lcden=0;
- }
- void init()//初始化
- {
- lcdrw=0;
- lcden=0;
- write_com(0x38) ;//设置 16X2显示,5X7点阵/ /8位数据接口
- write_com(0x0e) ;// 设置为只显示字符,不显示动
- write_com(0x06) ;//写一个字符后地址指针加1
- write_com(0x01);
- }
- void main()
- {
- init() ;//初始化
- EA=1;
- ET0=1;
- TMOD=0x02;
- TL0=206;
- TL0=206;
- TR0=1;
- while(1)
- { ST=0;
- ST=1;
- ST=0;
- while(!EOC);
- OE=1;
- adc=P1;
- tmp=(255000/adc)-1000;
- tmp=10*tmp;
- dat[0]=tmp/100000 +'0';
- dat[1]=tmp/10000%10 +'0';
- dat[3]=tmp/1000%10 +'0';
- dat[4]=tmp/100%10 +'0';
- dat[5]=tmp/10%10 +'0';
- write_com (0x80) ;//从液晶第一行第列开始写数据
- for (num=0; num<9; num++)
- {
- write_data(table[num]) ;
- delay(5) ;
- }
- write_com(0x80+0x40) ;//从液晶第二行第一列开始写数据
- for (num=0;num<7;num++)
- {
- write_data(dat[num]) ;
- delay(5);
- }
- }
- }
- void timer0(void) interrupt 1
- {
- CLOCK=~CLOCK;
- }
复制代码
所有资料51hei提供下载:
分压式电阻测量.zip
(83.16 KB, 下载次数: 129)
|