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

📄 text2.c

📁 tlc1543 1602液晶显示 +c语言
💻 C
字号:
#include <reg52.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int

uchar code welcome[]={"  voltage!       "};
uchar idata lcdtimer[16]={" 0.0000 V       "};
uchar timecount;
bit timeflag;
sbit  e=P2^1;
sbit rs=P2^0;


sbit CS=P1^4;	   //TLC1543与89c52的接口连接线路
sbit DOUT=P1^3;
sbit ADIN=P1^2;
sbit CLOCK=P1^1;
sbit EOC=P1^0;
uint readTLC1543(uchar port);
//void deley ();
/*sbit sdo=p1^0;
sbit addr=p1^1;
sbit cs=p1^2;
sbit clk=p1^3;
sbit eoc=p1^4;*/
//void delay();
//void display();
uint a;	
void delay(uint del1)
{
   uchar del2;
   for(;del1>0;del1--)
		for(del2=100;del2>0;del2--);
}

//void delay(uint time);
//uint a;		//a为全局变量

/*void main()
{
	while(1)
	{
		a=readTLC1543(0x00);
		display();
	}
}*/
uint readTLC1543(uchar port)
{
	uint i ,ad;
	uchar datah,datal;
	CLOCK=0;	  //根据时序图分别设置CS,CLOCK,EOC
	CS=0;
	EOC=1;
	port<<=4;	  //用port的值来选择是哪个AD芯片的哪个通道,实验板上接的是A0和A1,因此port的值可以选择0000或0001
	for(i=0;i<4;i++)//把通道写入TLC1543芯片中
	{
		ADIN=(bit)(port&0x80);
		CLOCK=1;
		CLOCK=0;  //只需要CLOCK一个下降沿就能写入,其他接口的电平不变化
		port<<=1; //根据时序图,先写入MSB即最高位,需要左移,然后继续写下一位
	}
	for(i=0;i<6;i++)//填充6个CLOCK
	{
		CLOCK=1;
		CLOCK=0;
	}
	CS=1;
    delay(100);
	CS=0;	 //等待AD转换

	for(i=0;i<2;i++)  //取D9和D8位,
	{
		DOUT=1;
		CLOCK=1;
		datah<<=1;
		if(DOUT)
			datah|=0x01;
		CLOCK=0;
	}	
	for(i=0;i<8;i++)//取D7~D0位
	{
		DOUT=1;
		CLOCK=1;
		datal<<=1;
		if(DOUT)
			datal|=0x01;
		CLOCK=0;
	}	
	EOC=0;
	CS=1;
	ad=(uint)datah;
	ad<<=8;
	ad|=datal;//处理高位和低位数据,同时把char型转化为了int型,此处对数值的处理算法,参考“温度传感器”
	ad=(ad*0.4887)*100;
	//ad=(float)(	ad*5/1023)*100000;
	return(ad);
}
/*void display()
{
	uint i,temp;
	//uint shu0,shu1,shu2,shu3,shu4;
	temp=a;
	lcdtimer[2]=0x30+temp/10000;
    lcdtimer[3]=0x30+temp%10000/1000;
    lcdtimer[4]=0x30+temp%1000/100;
    lcdtimer[5]=0x30+temp%100/10;
    lcdtimer[6]=0x30+temp%10;
    disp_lcd(0xc0,lcdtimer);

}	
/*void delay(uint time)
{
	uint i;
	for(i=time;i>0; i--)
		{;}
}*/					     

/*void delay(uint del1)
{
   uchar del2;
   for(;del1>0;del1--)
		for(del2=10;del2>0;del2--);
}*/
//液晶显示器判忙函数
//*****************
void busy()
{
   uchar temp;
   temp=0x00;
   rs=0;
   //rw=1;
   while((temp&0x80)==0x80)
   {
     P0=0xff;
     e=1;
     temp=P0;
     e=0;

    }

}
//*************************
//向液晶显示器写命令函数
//***********************
void write_com(uchar temp)
{
   busy();
   rs=0;
   //rw=0;
   P0=temp;
   e=1;
   e=0;
}
//********************
//向液晶显示器写数据函数
//*********************
void write_data(uchar num)
{
   busy();
   rs=1;
   //rw=0;
   P0=num;
   e=1;
   e=0;
}
//*****************************
//*******向液晶显示器写入显示数据函数
//*********************
void disp_lcd(uchar addr,uchar *temp1)
{
      uchar i;
      write_com(addr);
      delay(100);
      for(i=0;i<16;i++)
      {
            write_data(temp1[i]);
			delay(100);
       }
}
//************************
//液晶显示器初始化函数
//***********************
void lcd_ini()
{
   char i;
   for(i=3;i>0;i--)
   {
      P0=0x30;
      rs=0;
      //rw=0;
      e=1;
      e=0;
      delay(100);

   }
   P0=0x38;
   rs=0;
   //rw=0;
   e=1;
   e=0;
   delay(100);
}
//****************
//液晶显示器复位函数
//***************
void lcd_reset()
{
  write_com(0x01);
  delay(100);
  write_com(0x06);
  delay(100);
  write_com(0x0c);
  delay(100);
}
//*********************
//定时器、计时器中断函数
//*********************
void timer0() interrupt 1
{
  TH0=0xdc;
  TL0=0x23;
  if(--timecount==0)
  {
     timecount=100;
     timeflag=1;
  }
}

void main()
{
   lcd_ini();
   lcd_reset();
   disp_lcd(0x80,welcome);
   disp_lcd(0xc0,lcdtimer);
   TMOD=0x01;
   TH0=0xdc;
   TL0=0x23;
   TR0=1;
   IE=0x82;
   timeflag=0;
   timecount=100;

  
  /* while(1)
   {
     if(timeflag==1)
     {
      timeflag=0;
       lcdtimer[11]+=1;
       if(lcdtimer[11]>=0x3a)
       {
			lcdtimer[11]=0x30;
			lcdtimer[10]+=1;
			if(lcdtimer[10]>=0x36)
			{
				lcdtimer[10]=0x30;
				lcdtimer[8]+=1;
				if(lcdtimer[8]>=0x3a)
				{
					lcdtimer[8]=0x30;
					lcdtimer[7]+=1;
					if(lcdtimer[7]>=0x36)
					{
						lcdtimer[7]=0x30;
					}
				}
			}
       }
       disp_lcd(0xc0,lcdtimer);
	   
    }
  
   }*/
  while(1)
	{
		uint temp;
		a=readTLC1543(0x00);
		temp=a;
	    lcdtimer[1]=0x30+temp/10000;
        lcdtimer[3]=0x30+temp%10000/1000;
        lcdtimer[4]=0x30+temp%1000/100;
        lcdtimer[5]=0x30+temp%100/10;
        lcdtimer[6]=0x30+temp%10;
        disp_lcd(0xc0,lcdtimer);   		

	}
}

⌨️ 快捷键说明

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