仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include <reg52.h>
- #include <intrins.h>
- #include <stdio.h>
- #define uint unsigned int
- #define uchar unsigned char
- #define ADC_PORT P0
- #define DATA_PORT P1
- sbit START=P3^6;
- sbit OE=P3^7;
- sbit AD_ALE=P2^0;
- sbit EOC=P3^3;
- sbit LCDRW = P2^2; //定义LCD引脚
- sbit LCDRS = P2^3;
- sbit LCDEN = P2^1;
- sbit CLK = P3^5;
- uint dat;
- //--------------------------------------------
- // 延时函数
- //--------------------------------------------
- void delay_ms(uint t)
- {
- int j;
- for(;t!=0;t--)
- for (j=0;j<110;j++);
- }
- //--------------------------------------------
- // 写数据函数 _可用于显示一个字符
- //--------------------------------------------
- void write_data(uint dat)
- {
- LCDRS=1; //数据
- DATA_PORT=dat; //把数据总到P口
- delay_ms(1); //当晶振较高时加延时
- LCDEN=1;
- delay_ms(1); //当晶振较高时加延时
- LCDEN=0; //关使能
- }
- //--------------------------------------------
- // 写命令函数 ——可用于定位显示地址
- //--------------------------------------------
- void write_com(uint com)
- {
- LCDRS=0; //命令
- DATA_PORT=com;
- delay_ms(1); //当晶振较高时加延时
- LCDEN=1;
- delay_ms(1); //当晶振较高时加延时
- LCDEN=0;
- }
- //--------------------------------------------
- // 1602初始化
- //--------------------------------------------
- void lcd_init()
- {
- LCDEN=0;
- LCDRW=0;
- LCDRS=0;
- write_com(0x36); //set text home address
- write_com(0x38);
- write_com(0x0c); //开显示,不显示光标 0x0f为开显示,开光标
- write_com(0x06); //写一个字符后地址加一
- write_com(0x01); //显示清零,数据指针清零
- write_com(0x80+0); //定位到,第一行开头
- }
- //--------------------------------------------
- // 打印函数——字符串
- //--------------------------------------------
- void print_string(uchar* str)
- {
- int i;
- for(i=0;str[i]!=0;i++)
- {
- write_data(str[i]);
- }
- }
- //--------------------------------------------------------------
- //字符串——打印函数,自行定位 x:列 y:行(y=1:第1行:y=2:第2行)
- //--------------------------------------------------------------
- void print_string_location(uint x,uint y,uchar* str)
- {
- int i;
- if(y==1) //第1行
- {
- for(i=0;str[i]!=0;i++)
- {
- write_com(0x80+(x++)); //定位到,第1行 +x 处显示
- write_data(str[i]);
- }
- }
- else if(y==2) //第2行
- {
- for(i=0;str[i]!=0;i++)
- {
- write_com(0x80+0x40+(x++)); //定位到,第2行 +x 处显示
- write_data(str[i]);
- }
- }
- }
- //--------------------------------------------
- // AD0809初始化-端口3
- //--------------------------------------------
- void Ad0809Init3(void)
- {
-
- AD_ALE=0;
- START=1;
- OE=1;
- START=0;delay_ms(5);START=1;
-
- while(EOC==1);
- OE=0;
- dat=ADC_PORT;
- OE=1;
- }
- void print_data0()
- {
- char z[18];
- print_string_location(0,1,"DATA:"); //显示DATA:字符串
- sprintf((char*)z,"%d ",dat);//合并参数字符串
- print_string_location(0,2,z); //显示电阻值
- }
- void main()
- {
- lcd_init();
- while(1)
- {
- P0=0xf3;
- Ad0809Init3();
- dat=dat*19.60784;
- print_data0();
- }
- }
复制代码
所有资料51hei提供下载:
ADC0809.rar
(75.01 KB, 下载次数: 96)
|