📄 tmp36.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 + -