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

📄 tmp36.c

📁 基于aduc834单片机的温度采集系统
💻 C
字号:
#include <ADI/ADuC834.h>
#include <intrins.h>
#include"ziku.h" 

long int g_TemperatureL;
int g_TemperatureI;

/***************宏定义及位定义*********************/
#define busy 0x80
#define uchar unsigned char
#define uint unsigned int
#define LCD_DATA P0
void LCD_Clr();
sbit LCD_RS=P2^3;   
sbit LCD_RW=P2^4;       
sbit LCD_EN=P2^5; 
sbit LCD_CSA=P2^6;
sbit LCD_CSB=P2^7;
sbit LCD_RST=P2^2;

void delay(int ms) 
{ 
uchar i; 
while(ms--) 
{ 
for(i=0;i<250;i++) 
{ 
_nop_(); 
_nop_(); 
_nop_(); 
_nop_(); 
} 
} 
}
//void delay(uint t)
//{
//	uint i,j;
//	for(i=0;i<t;i++)
//	for(j=0;j<110;j++);
//}

/***************AD转换器初始化*******************/
void ADC_Init(void)
{
	SF = 0xFF;     //最慢的转换速度效果最好
	ADC0CON = 0x0F;//一通道,单极性,内部参考电源,输入范围0~2.56V
	ADCMODE = 0x23;//连续转换
}

/***************读液晶状态字*********************/
unsigned char ReadLCDStatus(void) 
{ 
 LCD_DATA = 0xFF;  
 LCD_RS = 0; 
 LCD_RW = 1; 
 LCD_EN = 0; 
 LCD_EN = 0; 
 LCD_EN = 1;
 while (LCD_DATA & busy); //检测忙信号 
// delay(1); 
 LCD_EN = 0; 
 return(P0); 
} 

/*****************写液晶命令*********************/
void WriteLCD_Command(uchar Command)     
{
	ReadLCDStatus ();		
   	LCD_RS = 0;       
  	LCD_RW = 0;       
  	LCD_DATA = Command; 	
  	LCD_EN = 1;		
//  	delay(1);
  	LCD_EN = 0;
}

/*****************写液晶数据*********************/
void WriteLCD_Data(unsigned char Data)			
{                        
  ReadLCDStatus(); 
  LCD_RS = 1; 
  LCD_RW = 0; 
  LCD_DATA = Data;
  LCD_EN = 1; 
//  delay(1);
	LCD_EN=0;
}

/*****************初始化液晶*********************/
void LCD_Init()     
{
	WriteLCD_Command(0x3E);
	WriteLCD_Command(0xC0);
	WriteLCD_Command(0x3F);
	LCD_Clr();
	LCD_CSB=0;
	LCD_CSA=1;
}

/*****************显示汉字数据*******************/
/************Page0~7、Rom0~63、汉字数组**********/
void LCD_Display_Word(unsigned char Page,unsigned char Rom,unsigned char *Data)
{
	unsigned char i;
	if(Rom>63)
	{
		LCD_CSB=1;
	  LCD_CSA=0;
	}
	else
	{
		LCD_CSB=0;
	  LCD_CSA=1;
	}
	if((LCD_CSA==1)&&(LCD_CSB==0))
	{
	  WriteLCD_Command(0xB8+Page);//页地址
	  WriteLCD_Command(0x40+Rom);//列地址
	  for(i=0;i<16;i++)
	  {
	  WriteLCD_Data(Data[i]);
    }
    WriteLCD_Command(0xB8+Page+1);//页地址+1
    WriteLCD_Command(0x40+Rom);//列地址
    for(i=16;i<32;i++)
	  {
	  WriteLCD_Data(Data[i]);
    }
  }
  if((LCD_CSA==0)&&(LCD_CSB==1))
  {
  	WriteLCD_Command(0xB8+Page);//页地址
	  WriteLCD_Command(0x40+(Rom-64));//列地址
	  for(i=0;i<16;i++)
	  {
	  WriteLCD_Data(Data[i]);
    }
    WriteLCD_Command(0xB8+Page+1);//页地址+1
    WriteLCD_Command(0x40+(Rom-64));//列地址
    for(i=16;i<32;i++)
	  {
	  WriteLCD_Data(Data[i]);
    }
  }
}

/*****************显示字符数据*******************/
void LCD_Display_Eng(unsigned char Page,unsigned char Rom,unsigned char *Data)
{//页0~7、列0~63、汉字数组
	unsigned char i;
	if(Rom>63)
	{
		LCD_CSB=1;
	  LCD_CSA=0;
	}
	else
	{
		LCD_CSB=0;
	  LCD_CSA=1;
	}
	if((LCD_CSA==1)&&(LCD_CSB==0))
	{
	  WriteLCD_Command(0xB8+Page);//页地址
	  WriteLCD_Command(0x40+Rom);//列地址
	  for(i=0;i<8;i++)
	  {
	  WriteLCD_Data(Data[i]);
    }
    WriteLCD_Command(0xB8+Page+1);//页地址+1
    WriteLCD_Command(0x40+Rom);//列地址
    for(i=8;i<16;i++)
	  {
	  WriteLCD_Data(Data[i]);
    }
  }
  if((LCD_CSA==0)&&(LCD_CSB==1))
  {
  	WriteLCD_Command(0xB8+Page);//页地址
	  WriteLCD_Command(0x40+(Rom-64));//列地址
	  for(i=0;i<8;i++)
	  {
	  WriteLCD_Data(Data[i]);
    }
    WriteLCD_Command(0xB8+Page+1);//页地址+1
    WriteLCD_Command(0x40+(Rom-64));//列地址
    for(i=8;i<16;i++)
	  {
	  WriteLCD_Data(Data[i]);
    }
  }
}

/********************清屏幕**********************/
void LCD_Clr()      
{
  unsigned char j,i;
	WriteLCD_Command(0xB8);
	WriteLCD_Command(0x40);
	for(i=0;i<8;i++)
	{
	  WriteLCD_Command(0xB8+i);
	  WriteLCD_Command(0x40);
		for(j=0;j<128;j++)
	  {
	    WriteLCD_Data(0x00);
	  }
	}
}

/********************显示文档*********************/
void Display_Text(void)
{
  LCD_Display_Word(0,16,dis1); //北
  LCD_Display_Word(0,32,dis2); //斗
  LCD_Display_Word(0,48,dis3); //星
  LCD_Display_Word(0,64,dis4); //工
  LCD_Display_Word(0,80,dis5); //化
  LCD_Display_Word(0,96,dis6); //所
  LCD_Display_Eng(2,32,dis7);  //b
  LCD_Display_Eng(2,40,dis8);  //i
  LCD_Display_Eng(2,48,dis9);  //g
  LCD_Display_Eng(2,56,dis10); //-
  LCD_Display_Eng(2,64,dis11); //d
  LCD_Display_Eng(2,72,dis12); //i
  LCD_Display_Eng(2,80,dis13); //p
  LCD_Display_Eng(2,88,dis14); //p
  LCD_Display_Eng(2,96,dis15); //e
  LCD_Display_Eng(2,104,dis16); //r
  LCD_Display_Eng(4,48,dis17); //1
  LCD_Display_Eng(4,56,dis18); //2
  LCD_Display_Eng(4,64,dis19); //8
  LCD_Display_Eng(4,72,dis20); //6
  LCD_Display_Eng(4,80,dis21); //4
  LCD_Display_Word(6,48,dis22);//王
  LCD_Display_Word(6,64,dis23);//敬
  LCD_Display_Word(6,80,dis24);//明
}

//void Delay400Ms(void) 
//{ 
// unsigned char TempCycA = 5; 
// unsigned int TempCycB; 
// while(TempCycA--) 
// { 
//  TempCycB=7269; 
//  while(TempCycB--); 
// }; 
//} 

void Select_Char(char m_char,unsigned char Page,unsigned char Rom)
{
	switch(m_char)
	{
		case 0:
			LCD_Display_Eng(Page,Rom,dis30);
			break;
		case 1:
			LCD_Display_Eng(Page,Rom,dis17);
			break;
		case 2:
			LCD_Display_Eng(Page,Rom,dis18);
			break;
		case 3:
			LCD_Display_Eng(Page,Rom,dis26);
			break;
		case 4:
			LCD_Display_Eng(Page,Rom,dis21);
			break;
		case 5:
			LCD_Display_Eng(Page,Rom,dis27);
			break;
		case 6:
			LCD_Display_Eng(Page,Rom,dis20);
			break;
		case 7:
			LCD_Display_Eng(Page,Rom,dis28);
			break;
		case 8:
			LCD_Display_Eng(Page,Rom,dis19);
			break;
		case 9:
			LCD_Display_Eng(Page,Rom,dis29);
			break;
		case 10://.
			LCD_Display_Eng(Page,Rom,dis32);
			break;
		case 11://℃
			LCD_Display_Word(Page,Rom,dis31);
			break;
		default:
		  LCD_Display_Eng(Page,Rom,dis33);
		  break;
	}
}

void Display_Temperature(int DTemperature)//顺序十位、个位、点、点后一位
{
	char bai,shi,ge;
	bai = DTemperature/100;
	Select_Char(bai,4,48);
	shi = (DTemperature%100)/10;
	Select_Char(shi,4,56);
	Select_Char(10,4,64);
	ge  = (DTemperature%100)%10;
	Select_Char(ge,4,72);
	Select_Char(11,4,80);
}

int Account_Temperature(long int ATemperature)
{
	int m_Temperature;
	m_Temperature = (ATemperature*128)/(1677722);
	m_Temperature = (m_Temperature-500);
  return m_Temperature;
}

long int Get_Temperature(void)
{
	long int m_Temperature;
	CAL = 0;//启动转换
	RDY0 = 0;//允许写寄存器
	m_Temperature = ADC0H;
	m_Temperature = ADC0M|(m_Temperature<<8);
	m_Temperature = ADC0L|(m_Temperature<<8);
	return m_Temperature;
}

void main(void)
{
	ADC_Init();
	LCD_Init();
	Display_Text();
	while(1)
	{
		g_TemperatureL = 0;
		g_TemperatureL = Get_Temperature();
		g_TemperatureI = Account_Temperature(g_TemperatureL);
		Display_Temperature(g_TemperatureI);
		delay(10);
	}
}

⌨️ 快捷键说明

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