【51单片机Keil+Proteus8.9+ADC0804】ADC实验 模拟转数字实验

一、实验名称

ADC实验 模拟转数字实验

二、设计思路

电路设计

1.选用AT89C51单片机作为电路核心单元,外接8位单通道AD转换器ADC0804芯片和LM016L显示器以及滑动变阻器等其它常用元器件构成电路。

2.将ADC0804芯片的控制引脚RD,WR,INTR接到AT89C51芯片对应引脚,再将ADC0804电压输入引脚接到滑动变阻器上,作为输入的模拟电压,最后将其数据引脚DB0至DB7接到AT89C51芯片上。

3.将AT89C51单片机所选引脚与LCD控制引脚相连,再将数据通过引脚与LCD接收引脚相连。

代码设计:

1.对AT89C51单片机所用引脚进行定义。

2.构造基本的功能函数:延时函数delay()、LCD控制函lcd_cmd()、LCD数据函lcd_data()、显示函数display()。

3.主函数:先将芯片的引脚和LCD屏幕进行初始化,然后循环执行以下操作:首先进行模拟信号到数字信号的转换,待转换完成之后打开读信号引脚,将转换完成的数据读入芯片,然后将数据的每一位分割出来,关闭读引脚打开写引脚,将每一位依次显示在LCD显示器上,关闭写引脚。

三、原理图

1.将芯片代码进行编译测试,结果正确无任何错误。

  1. 将编译之后的HEX文件加载到芯片内,进行软件仿真。当电阻取值为100%、50%、0% 三个节点时所对应的数值应为255、128、0,由仿真结果显示正确无误。

  2. 电阻为100%:

  3. 电阻为50%:

  4. 电阻为0%:

  5. 六、软件源码

    C语言代码:

    #include<reg51.h>

    sfr mydata = 0x90;

    sbit rd= P2^5;

    sbit wr= P2^6;

    sbit intr= P2^7;

    sbit RS = P2^0;

    sbit EN = P2^1;

    //(0x90)is address of port1, else you can write as : #defintre mydata P1

    void delay(int n)

    {

    int i,j;

    for(i=0;i<n;i++)

    for(j=0;j<255;j++);

    }

    void lcd_cmd(char a)

    {

    P3 = a;

    RS = 0;

    EN = 1;

    delay(10);

    EN = 0;

    }

    void lcd_data(char a)

    {

    P3 = a;

    RS = 1;

    EN = 1;

    delay(10);

    EN = 0;

    }

    void display(char *ptr)

    {

    while(*ptr != '\0')

    {

    lcd_data(*ptr);

    ptr++;

    }

    }

    void main()

    {

    unsigned char value;

    char temp4;

    int i=0;

    lcd_cmd(0x01); //clear screen

    lcd_cmd(0x0E); //Display On, Cursor Blinking

    lcd_cmd(0x38); //2 lines and 5*7 matrix

    lcd_cmd(0x80); //Force Cursor to beginning of first line

    display("ADC Value=");

    lcd_cmd(0xC0); //Force Cursor to beginning of second line

    //mydata = 0xEF;

    intr = 1;

    rd = 1;

    wr = 1;

    while(1)

    {

    i = 0;

    while(intr == 1);

    rd = 0;

    value = mydata;

    while(i < 3)

    {

    tempi = (value % 10) + '0';

    value = value / 10;

    i++;

    }

    for (i = 2; i >= 0; i--)

    {

    lcd_cmd(0x06); //Force Cursor to the next address(move to right)

    lcd_data(tempi);

    }

    rd = 1;

    delay(100);

    lcd_cmd(0xC0); //Force Cursor to beginning of second line

    wr = 0;

    wr = 1;

    }

    }

    复制代码
    六、软件源码
    C语言代码:
    #include<reg51.h>
    sfr mydata = 0x90;
    sbit rd= P2^5;
    sbit wr= P2^6;
    sbit intr= P2^7;
    sbit RS = P2^0;
    sbit EN = P2^1;
     //(0x90)is address of port1, else you can write as : #defintre mydata P1
    
    void delay(int n)
    {
    	int i,j;
    	for(i=0;i<n;i++)
    	for(j=0;j<255;j++);
    }
    void lcd_cmd(char a)
    {
    	P3 = a;
    	RS = 0;
    	EN = 1;
    	delay(10);
    	EN = 0;
    }
    
    void lcd_data(char a)
    {
    	P3 = a;
    	RS = 1;
    	EN = 1;
    	delay(10);
    	EN = 0;
    }
    
    void display(char *ptr)
    {
    	while(*ptr != '\0')
    	{
    		lcd_data(*ptr);
    		ptr++;
    	}
    }
    void main()
    {
    	unsigned char value;
    	char temp[4];
    	int i=0;
    	lcd_cmd(0x01); //clear screen
    	lcd_cmd(0x0E); //Display On, Cursor Blinking
    	lcd_cmd(0x38); //2 lines and 5*7 matrix
    	lcd_cmd(0x80); //Force Cursor to beginning of first line
    	display("ADC Value=");
    	lcd_cmd(0xC0); //Force Cursor to beginning of second line
    	//mydata = 0xEF;
    	intr = 1;
    	rd = 1;
    	wr = 1;
    	while(1)
    	{
    		i = 0;
    		while(intr == 1);
    		rd = 0;
    		value = mydata;
    		while(i < 3)
    		{
    			temp[i] = (value % 10) + '0';
    			value = value / 10;
    			i++;
    		}
    		for (i = 2; i >= 0; i--)
    		{
    			lcd_cmd(0x06); //Force Cursor to the next address(move to right)
    			lcd_data(temp[i]);
    		}
    		rd = 1;
    		delay(100);
    		lcd_cmd(0xC0); //Force Cursor to beginning of second line
    		wr = 0;
    		wr = 1;
    	}
    }
相关推荐
Yiran_G2 分钟前
LoRa在智慧农业中的应用:无线传感网络如何实现远程环境监测?
嵌入式硬件·物联网
佳児素花痴╮8 分钟前
STM32U575RIT6(SPI+数码管+LED)
stm32·单片机·嵌入式硬件
艾芯微科技12 分钟前
B1040A2|DFN1006‑2L 超微型肖特基二极管,便携设备高频整流优选国产器件
网络·单片机·嵌入式硬件·集成测试·51单片机
芯岭技术13 分钟前
XL5301 TOF传感器,XL5300的升级版本,测距距离更远,功耗更低,电压更宽
嵌入式硬件·物联网
SKH.22 分钟前
网络(2)UDP通信
网络·单片机·udp
zcmodeltech31 分钟前
风力发电沙盘模型控制系统设计与灯光联动实现方案——基于STM32与Modbus RTU,服务范围覆盖全国的多场景风力发电沙盘模型定制
网络·数据库·stm32·单片机·嵌入式硬件·能源
离凌寒33 分钟前
一、关于软件定时器模拟任务运行总结
单片机·嵌入式硬件
智闲电子设计1 小时前
STM32 硬件过流保护实战:比较器直连 BKIN,纳秒级关断不靠软件
stm32·单片机·嵌入式硬件
嵌入式阿蔡1 小时前
存储_14:嵌入式存储测试岗面试——可靠性/兼容/车规面试题与项目话术
单片机·嵌入式硬件·面试·嵌入式·存储
Brilliantwxx3 小时前
【PCB】(入门篇) 电子入门系列|从电路分析到 PCB 设计
stm32·单片机·嵌入式硬件