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

📄 v.c

📁 LCD1602用作电压表的程序。其中包括了AD、DA等此程序
💻 C
字号:
#include<reg51.h>
#include"absacc.h"
#define lcd_1602_DW  XBYTE[0xfdff]
#define lcd_1602_CW  XBYTE[0xfcff]
#define lcd_1602_CR  XBYTE[0xfeff]
#define lcd_1602_DR  XBYTE[0xffff]
#define lcd_line_1			  	0x00
#define lcd_line_2			 	0x40
#define LCD_ClEAR_SCREEN		0x01    //清屏
#define LCD_AC_UP			    0x06	//地址计数器自动+1
#define LCD_SET_7			    0x38    //工作方式设置8位数据总线接口,双行显示字符,5*7字符
#define LCD_SHOW			    0x0C    //显示开
#define uchar unsigned char
#define uint unsigned int
#define SUM  20

sbit  SD0 = P1^0;
sbit  CS  = P1^2;
sbit  CLK = P1^3;
sbit  DIN = P1^1;
sbit  WAY = P1^7;
unsigned long int tmp;                         //数据类型要注意
int i;


//////////判忙函数/////////////////
void WHILE_BUSY(void)						 
{
	while((bit)(lcd_1602_CR & 0x80)) ;		//读回DB7的值,为DB7=1时则等待 。
}
 
 
 void delay(uint x)						
 {
    while(--x);
 }
                                             


 void print0(uchar line,uchar column,uchar da )	 //通过LCD1602内部ROM显示字符
 {
   	WHILE_BUSY();
  	switch(line)
  	{
	 case 1:
    	lcd_1602_CW = 0x80 + column;      //光标定位,即列地址
        delay(10);
	    lcd_1602_DW =da;			 //	显示字符库的内容,数字的高八位编码位0X30
	    break;
	 case 2:
    	lcd_1602_CW = 0xc0 + column;     //光标定位
        delay(10);
	    lcd_1602_DW =da;            
		break;
	 default: break;
      }
 }

void Print(uchar *str,uchar addr)       // 字符数组显示方法。用于不实时改变的字符  
{
 
  WHILE_BUSY();
  lcd_1602_CW = 0x80|addr;				//设置地址。地址范围0--127
  while(*str!='\0')
 {
   WHILE_BUSY();
   lcd_1602_DW = *str;                 
   str++;
   delay(50);
 }
}
void lcd_1602_Init(void)
{ 
  WHILE_BUSY();
  lcd_1602_CW =	  LCD_SET_7;           //写指令,8位接口,双行显示,5*7字符
  WHILE_BUSY();						   //判忙,不忙继续写指令
  lcd_1602_CW  =  LCD_ClEAR_SCREEN;	   //清屏
  WHILE_BUSY();						   //判忙,不忙继续写指令
  lcd_1602_CW =	LCD_AC_UP;			   //地址计数自动加一
   WHILE_BUSY();
  lcd_1602_CW = LCD_SHOW;			   //开显示
}

/******************1543ADC**********/
uint TLC_1543_addr(uchar addr) 
{

     uint date_out=0;
	 uchar k;
     uchar i;
     uchar j;
     CLK=0;
     CS=0;
  for (i=0;i<4;i++) 
      {
          DIN=(bit)(addr&0x08);
		  CLK=1;
		  CLK=0;
          addr<<=1;
      }
  for (j=0;j<6;j++)             //填充6 个CLOCK
    {
      CLK=1;CLK=0;
    }
      CS=1;
      delay(5);

     CS=0;                    //等待AD 转换
     delay(5);
  for(k=0;k<10;k++)
     {
	   SD0=1;                 //非P0口作为数据总线使用时,读入数据前要赋值1,特别
       CLK = 1;			      //是既用于写有用于读的情况下.
       date_out<<=1;
       if(SD0) date_out += 1;
       CLK = 0;
     }
     return(date_out);

}



void main()
{	   
       int tmp1=0,STYLE=1;
	   i=SUM;
   	   lcd_1602_Init();
	
  while(1)
   	{
		   	 Print("10602 START NOW! ",lcd_line_1);
		     Print("voltage",lcd_line_2);
		     print0(2,7,10);                           //":" 
			 						  
	 if(WAY==0)
	   delay(5000);
	 if(WAY==0)
		STYLE++;
	 
	      if(STYLE==2)								  // 0---20挡位的显示函数
	         {
		       tmp1 += TLC_1543_addr(0x01);			   //取50次AD转换的结果,求平均值
			   i--;
			   
		          if(i==0)
		         {	
		           tmp1=tmp1/SUM;
			       tmp=tmp1*49999/1023;
				   tmp=4*tmp;
			       tmp1=0;
			       i=SUM;
			  
				   print0(2,8,tmp/100000 +0x30);
	               print0(2,9,tmp/10000%10+0x30);
			       print0(2,11,tmp/1000%10+0x30);
	               print0(2,12,tmp/100%10+0x30);
				   print0(2,10,0x2e);
			       print0(2,13,0X56);
                 }	
			  }
	      else
           if(STYLE==1)										   //0---5挡位的显示函数
	          {
		             tmp1 += TLC_1543_addr(0x00);			   //取50次AD转换的结果,求平均值
			         i--;
			  
		          if(i==0)
		         {	
		           tmp1=tmp1/SUM;
			       tmp=tmp1*49999/1023;
			       tmp1=0;
			       i=SUM;
			  
				   print0(2,8, tmp/10000 +0x30);
	               print0(2,10,tmp%10000/1000+0x30);
			       print0(2,11,tmp%10000%1000/100+0x30);
	               print0(2,12,tmp%1000%100/10+0x30);
				   print0(2,9,0x2e);
			       print0(2,13,0X56);
                 }	
		      }  
		    
		   		
		   if(STYLE==3)
		      STYLE=1;
			else
			  STYLE+=0;
		  print0(2,15,STYLE+0x30);
		  
	}
	         
        
}
			  
	         

⌨️ 快捷键说明

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