⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adc0804.c

📁 简单的8位AD采样
💻 C
字号:
//flow light and beep 
#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit ad_rd=P3^7;  //IO口定义
sbit ad_wr=P3^6;
sbit ad_cs=P3^4;
sbit dula=P2^6;
sbit wela=P2^7;

uchar a,A1,A2,A2t,A3,adval;
uchar code table[]={
						0x3f,0x06,0x5b,0x4f,
						0x66,0x6d,0x7d,0x07,
						0x7f,0x6f,0x77,0x7c,
						0x39,0x5e,0x79,0x71
					};
void adzhuanhuan();
void display(uchar bai,uchar shi,uchar ge);

/*
void delay10ms()
{
	unsigned char a=0,b=0;
    for(a=100;a>0;a--)
    for(b=225;b>0;b--);
}
*/

//拧动AD旁边的电位器,会在数码管的前三位显示0-255之间的数值。这就是把模拟电压转换成数字信号。

void delay(unsigned char i)		//延时程序
{
	unsigned char j=0,k=0;
	for(j=i;j>0;j--)
    for(k=125;k>0;k--);
}

void main()
{ 
	while(1)
	{   
		adzhuanhuan();
	}
}

void adzhuanhuan()
{
    delay(5);
	ad_cs=0;
    ad_wr=0;			//AD写入(随便写个什么都行,主要是为了启动AD转换)
    _nop_();
    ad_wr=1;
	ad_cs=1;
//  wela=0;              //关闭有AD片选信号锁存器的锁存端以防止在操作数码管时使AD的片选发生变化
	for(a=70;a>0;a--)    //需要注意的是ADC0804在写和读之间的时间间隔要足够长否则无法读出数据
    {                    //这里把显示部分放这里的原因也是为了增加写读之间的时间间隔                                                                                                                                                                                                                           
        display(A1,A2,A3);
    }	//送去显示各位。

//    wela=1;                   //重新打开有AD片选信号锁存器的锁存端
    P1=0xff;                  //读取P1口之前先给其写全1
//    P0=0;                     //选通ADCS
	ad_cs=0;
    ad_rd=0;                   //AD读使能

    adval=P1;					//AD数据读取赋给P1口

    ad_rd=1;
	ad_cs=1;
    ad_wr=1;
    P1=adval;                    //同时把AD的值送八个发光二极显示
 
    A1=adval/100;		//分出百,十,和个位
    A2t=adval%100;
    A2=A2t/10;
    A3=A2t%10;

	for(a=20;a>0;a--)    //需要注意的是ADC0804在写和读之间的时间间隔要足够长否则无法读出数据
    {                    //这里把显示部分放这里的原因也是为了增加写读之间的时间间隔                                                                                                                                                                                                                           
        display(A1,A2,A3);
    }	//送去显示各位。
}
void display(uchar bai,uchar shi,uchar ge)
{
        dula=1;
		P0=table[bai];
		dula=0;
		P0=0xff;
		wela=1;
		P0=0xfe;
		wela=0;
		delay(1);
		wela=1;
		P0=0xff;
		wela=0;

		dula=1;
		P0=table[shi];
		dula=0;
		P0=0xff;
		wela=1;
		P0=0xfd;
		wela=0;
		delay(1);

		wela=1;
		P0=0xff;
		wela=0;

		dula=1;
		P0=table[ge];
		dula=0;
		P0=0xff;
		wela=1;
		P0=0xfb;
		wela=0;
		delay(1);

		wela=1;
		P0=0xff;
		wela=0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -