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

📄 lcddis.c

📁 单片机的仿真实例!用的是Proteus作的,大家有需要的尽管下吧
💻 C
字号:
/************************
ADC0832实验
************************/
#include <intrins.h>
#include <reg51.h>

#define ulong unsigned long
#define uint unsigned int
#define uchar unsigned char

sbit ADCS =P3^0;  //ADC0832 chip seclect
sbit ADDI =P3^2;  //ADC0832 data in
sbit ADDO =P3^2;  //ADC0832 data out
sbit ADCLK =P3^1;  //ADC0832 clock signal
unsigned char readad[2];


void  Adc0832(unsigned char channel);

/************
读ADC0832函数
************/

//采集并返回
void Adc0832(unsigned char channel)
{
 	uchar i=0;
	uchar j;
	uint dat=0;
	uchar ndat=0;

	if(channel==0)channel=2;
	if(channel==1)channel=3;
	ADDI=1;
	_nop_();
	_nop_();
	ADCS=0;//拉低CS端
	_nop_();
	_nop_();
	ADCLK=1;//拉高CLK端
	_nop_();
	_nop_();
	ADCLK=0;//拉低CLK端,形成下降沿1
	_nop_();
	_nop_();
	ADCLK=1;//拉高CLK端
	ADDI=channel&0x1;
	_nop_();
	_nop_();
	ADCLK=0;//拉低CLK端,形成下降沿2
	_nop_();
	_nop_();
	ADCLK=1;//拉高CLK端
	ADDI=(channel>>1)&0x1;
	_nop_();
	_nop_();
	ADCLK=0;//拉低CLK端,形成下降沿3
	ADDI=1;//控制命令结束 
	_nop_();
	_nop_();
	dat=0;
	for(i=0;i<8;i++)
	{
		dat|=ADDO;//收数据
		ADCLK=1;
		_nop_();
		_nop_();
		ADCLK=0;//形成一次时钟脉冲
		_nop_();
		_nop_();
		dat<<=1;
		if(i==7)dat|=ADDO;
	}  
	for(i=0;i<8;i++)
	{
		j=0;
		j=j|ADDO;//收数据
		ADCLK=1;
		_nop_();
		_nop_();
		ADCLK=0;//形成一次时钟脉冲
		_nop_();
		_nop_();
		j=j<<7;
		ndat=ndat|j;
		if(i<7)ndat>>=1;
	}
	ADCS=1;//拉低CS端
	ADCLK=0;//拉低CLK端
	ADDO=1;//拉高数据端,回到初始状态
	readad[0]=dat;
	readad[1]=ndat;
	//dat<<=8;
	//dat|=ndat;
 	//return(dat);            //return ad data
}




/////////////lcd variable/////////////////
#include <absacc.h>

#define REG0   XBYTE[0x0000]
#define REG1   XBYTE[0x0001]
#define REG2   XBYTE[0x0002]
#define REG3   XBYTE[0x0003]

unsigned char bdata busyflag;
unsigned char dat,datn,count;

unsigned char word1[16]={"CH = "};
code unsigned char word2[16]={"  by LiXueli "};
code unsigned char word3[16]={"www.bitc.edu.cn!"};
code unsigned char word4[16]={"bitclxl@126.com!"};
code unsigned char  word5[16]={"  Wellcome To "};
code unsigned char  word6[16]={" Proteus Tools!"};
code unsigned char  word7[16]={"This Programme "};
code unsigned char  word8[16]={"  by LiXueli "};

sbit busyflag_7=busyflag^7;
sbit p10=P1^0;
sbit p11=P1^1;
sbit p12=P1^2;
/////////////////end of lcd variable////////////
///////////////start  of  lcd 1602/////////////////
void busy()
{
	do
	{
		busyflag=REG1;
	}while(busyflag_7);
}

void wrc(unsigned char wcon)
{
	busy();
	REG0=wcon;
}

void wrd(unsigned char wdat)
{
	busy();
	REG2=wdat;
}

void rdd()
{
	busy();
	dat=REG3;
}

void lcdint()
{
	wrc(0x38);
	wrc(0x01);
	wrc(0x06);
	wrc(0x0c);
}
void wrn(unsigned char word[])
{
	unsigned char i;
	for(i=0;i<16;i++)
	{
		wrd(word[i]);
	}
}
//////////////end of lcd 1602///////////////////////
////////////// data process//////////////////////
void Tempprocess()
{
	float tt;
	tt=readad[0]/255.0*5.0;
	word1[4]=(unsigned char )(tt);
	word1[5]='.';
	word1[6]=(unsigned char )(tt*10-word1[4]*10);
	word1[7]=(unsigned char )(tt*100-word1[4]*100-word1[6]*10);
	word1[8]=(unsigned char )(tt*1000-word1[4]*1000-word1[6]*100-word1[7]*10);
	word1[9]=(unsigned char )(tt*10000-word1[4]*10000-word1[6]*1000-word1[7]*100-word1[8]*10);
	word1[4]+=48;
	word1[6]+=48;
	word1[7]+=48;
	word1[8]+=48;
	word1[9]+=48;
	word1[10]='V';
}
///////////////////// end of process/////////////

void main()
{
		lcdint();//初始化液晶
		wrc(0x80);
		wrn(word5);
		wrc(0xc0);
		wrn(word6);

        while(1)
		{
            //if(p10==0) //判断P1.0是否按下
			{				
				Adc0832(0);
				Tempprocess();
				wrc(0x80);
				word1[2]='0';
				wrn(word1);
				Adc0832(1);
				Tempprocess();
				wrc(0xc0);
				word1[2]='1';
				wrn(word1);
			}
			if(p11==0)//判断P1.1是否按下
			{
				Adc0832(0);
				P2=readad[1];
				wrc(0x80);
				wrn(word3);
				wrc(0xc0);
				wrn(word4);
			}
			if(p12==0)//判断P1.2是否按下
			{
				wrc(0x80);
				wrn(word7);
				wrc(0xc0);
				wrn(word8);
			}
		}
}

⌨️ 快捷键说明

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