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

📄 cehngxu.c

📁 液晶显示电压proteus
💻 C
字号:
#include<reg52.h>
#include<intrins.h>
sbit  rd=P3^7;
sbit  wr=P3^6;   //adc0804
sbit  cs=P3^0;
   
sbit  en=P3^2;   //液晶
sbit  lcdrs=P3^3;

sbit  ledh=P2^4; //二极管
sbit  ledl=P2^5;


sbit  keyv1=P2^3; //按键
sbit  key0=P2^0;
sbit  keyv2=P2^2;
sbit  keyv3=P2^1;

#define uchar unsigned char
#define uint unsigned   long int

uchar a1,b1,c1,d1,a2,b2,c2,d2,a0,b0,c0,d0,e0,a3,b3,c3,d3,e3,num;
uint shu,R,k,m;

uint  adread();
void adstart();

uchar code table1[]="Voltmeter";
uchar code table2[]="00000V/K  ";

void delay(uint z);	
void init()	;
void write_com(uchar com);
void write_data(uchar date);
void display();
void displayV5(uchar zhengs, uchar shifw, uchar baifw,uchar qianfw); 
void displayV15(uchar zhengs1,uchar zhengs2, uchar shifw, uchar baifw,uchar qianfw);
void displayO(uchar wan, uchar qian, uchar bai,uchar shi,uchar ge);
void main()		  
{
  	init();
	display();	
	while(1)
	{
		
		adstart();
		shu=adread();
		k=adread();
		m=adread();
		delay(1);
		if(shu<254)
		{
		  	     
				 
		  ledl=0;  //绿灯亮,表示ad已读数据
		}

		R=1000*(shu*0.0196)/(5-shu*0.0196);
		a0=R/10000;
		b0=R%10000/1000;
		c0=R%1000/100;			   //dianzu xianshi
		d0=R%100/10;
		e0=R%10;



		shu=shu*196;			  
		a1=shu/10000;
		b1=shu%10000/1000;
		c1=shu%1000/100;		   //电压显现 0-5
		d1=shu%100/10;		
        delay(1);

		k=k*196;
		k=k*2;
		a2=k/10000;
		b2=k%10000/1000;
		c2=k%1000/100;		   //电压显现 0-10
		d2=k%100/10;		
	    delay(1);

		m=m*196;
		m=m*3;
		a3=m/100000;
		b3=m%100000/10000;
		c3=m%10000/1000;		   //电压显现 0-15
		d3=m%1000/100;
		e3=m%100/10;		
	    delay(1);

		if(keyv1==0)
		 {
		  delay(10);
		  if(keyv1==0)
			  {
				displayV5(a1,b1,c1,d1);	//按键按下测0到5伏
			    while(!keyv1);
		   	  }
		 }
		        
		if(keyv2==0)
		{
		  delay(10);
		  if(keyv2==0)					 //	按键按下测0到10伏
			  {
				displayV5(a2,b2,c2,d2);
			    while(!keyv2);
		   	  }
		 }

		  	if(keyv3==0)
		{
		  delay(10);
		  if(keyv3==0)					 //	按键按下测0到15伏
			  {
				displayV15(a3,b3,c3,d3,e3);
			    while(!keyv3);
		   	  }
		 }

		   if(key0==0)
		 { 
		   delay(10);
		   if(key0==0)
			  { 		  				  // 按键按下测电阻
			  
				  displayO(a0,b0,c0,d0,e0);
				  while(!key0);
			  }
		 }
	}  


}
//**************************************************************************
//********************        adc0804	   *********************************
// *************************************************************************
void adstart()	   
{
			 
			 P1=0XFF;
	   	     wr=1;
			 _nop_();  //启动ad转换
			 wr=0;
			 _nop_();
			 wr=1;
			 _nop_();
			 
}			 
			 
 uint  adread()	   //ad	read
 {		 
        uint temp;        
		rd=1;
		_nop_();
		rd=0;	  
		_nop_();	
		rd=1;
		temp=P1;
		return(temp);
 
 }	
 //**************************************************************************
 //***********************液晶1602*******************************************
//***************************************************************************
  void write_com(uchar com)	   //液晶写命令
{
	lcdrs=0;	//command
	P0=com;
	delay(1);
	en=1;
	delay(5);
	en=0;
}

 void write_data(uchar date)
 {
	  lcdrs=1;
	  P0=date;
	  delay(5);
	  en=1;				//液晶写数据
	  delay(5);
	  en=0;

 }
 //***********************************************************
  	void init()	     //初始化
{
	
	
	en=0;		     //液晶使能端
	P2=0XFF;	
	cs=0;            //ad cs端至低	 
	write_com(0x38); 
	write_com(0x0c); //设计开显示,不显示光标
	write_com(0x06); //写一个字符后地址指针加一
	write_com(0x01);//显示清零		
}
//**************************************************************
void delay(uint z)      //延时子函数
{
	uint x,y;
	for(x=z;x>0;x--)
		for(y=110;y>0;y--);
}
//*****************************************************************
//*********************显示函数************************************
void displayV5(uchar zhengs, uchar shifw, uchar baifw,uchar qianfw)
{
            
               
               write_com(0x80+0x44);
             write_data(0x30+zhengs);//0x30代表数字0

               write_com(0x80+0x45);
             write_data('.');

                write_com(0x80+0x46);
             write_data(0x30+shifw);
				   
				  write_com(0x80+0x47);
             write_data(0x30+baifw);

			   write_com(0x80+0x48);
             write_data(0x30+qianfw);

			  write_com(0x80+0x49);
             write_data(0x30);

			 write_com(0x80+0x4a);
             write_data('V');

			   write_com(0x80+0x4b);
             write_data(' ');


}

 void displayO(uchar wan, uchar qian, uchar bai,uchar shi,uchar ge)
{
           
               
               write_com(0x80+0x44);
             write_data(0x30+wan);//0x30代表数字0

               write_com(0x80+0x45);
             write_data(0x30+qian);
			  
			  write_com(0x80+0x46);
			write_data('.');
				   
				  write_com(0x80+0x47);
             write_data(0x30+bai);

			   write_com(0x80+0x48);
             write_data(0x30+shi);


				write_com(0x80+0x49);
             write_data(0x30+ge);

			 write_com(0x80+0x4A);
             write_data(0x30);

				 write_com(0x80+0x4b);
             write_data('k');

}


   void displayV15(uchar zhengs1,uchar zhengs2, uchar shifw, uchar baifw,uchar qianfw)
{
            
               
               write_com(0x80+0x44);
             write_data(0x30+zhengs1);//0x30代表数字0

			  write_com(0x80+0x45);
             write_data(0x30+zhengs2);

               write_com(0x80+0x46);
             write_data('.');

                write_com(0x80+0x47);
             write_data(0x30+shifw);
				   
				  write_com(0x80+0x48);
             write_data(0x30+baifw);

			   write_com(0x80+0x49);
             write_data(0x30+qianfw);

			  write_com(0x80+0x4a);
             write_data(0x30);

			 write_com(0x80+0x4b);
             write_data('V');

		//	   write_com(0x80+0x4b);
        //     write_data(' ');


}

void display()
{
			   
			   write_com(0x80+0X03);
			   for(num=0;num<8;num++)
			   {
				  write_data(table1[num]);
				  delay(5);
				}

            
			 write_com(0x80+0x44);
			   for(num=0;num<10;num++)
			   {
				  write_data(table2[num]);
				  delay(5);
				}
           

}

⌨️ 快捷键说明

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