本帖最后由 74521 于 2019-6-10 12:51 編輯
sbit key1=P0^0;
sbit key2=P0^1;
sbit led1=P0^6;
sbit led2=P0^7;
u8 num[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
/*
此函數功能是將所有I/O口配置為準雙向I/O口
*/
int b=20;
int temp;
int i;
int j;
unsigned char code CharCode1[]=" 大學";
unsigned char code CharCode2[]="設定溫度: ";
unsigned char code CharCode3[]="環境溫度: 度";
unsigned char code CharCode4[]=" 制作 :";
char num1;
unsigned int aa=0,bb=0,cc=0,dd=0,ee=0;
void LcdDisplay(int);
void init12864xian(); //初始化LCD12864顯示實驗名稱
/*
此函數功能是將所有I/O口配置為準雙向I/O口
*/
void init_GPIO()
{
P0M0=P0M1=0x00;
P1M0=P1M1=0x00;
P2M0=P2M1=0x00;
P3M0=P3M1=0x00;
P4M0=P4M1=0x00;
P5M0=P5M1=0x00;
}
/*
主函數
*/
u8 key()
{
u8 num=0;
P0=0xff;
if(key1==0)
{
delay(10);
if(key1==0)
{
b=b+1;
while(key1==0);
}
}
if(key2==0)
{
delay(10);
if(key2==0)
{
b=b-1;
while(key2==0);
}
}
}
void main()
{
u8 key_num=0;
init_GPIO();
LCD12864_Init(); //初始化LCD12864
init12864xian(); //初始化LCD12864顯示實驗名稱
while(1)
{
LcdDisplay(Ds18b20ReadTemp()); //實時讀取溫度
key();
if(key_num!=0)
P2=~num[key_num-1];
LCD12864_SetWindow(1, 5);
LCD12864_WriteData(b/10%10+0x30);
LCD12864_WriteData(b%10+0x30); //顯示設定值
char i=temp,j=b;
if(i>j)
{
led1=1;
}
else
{
led1=0;
}
}
}
/*
溫度額讀取及計算顯示函數
*/
void LcdDisplay(int temp) //lcd顯示
{
float tp;
if(temp< 0) //當溫度值為負數
{
temp=temp-1; //因為讀取的溫度是實際溫度的補碼,所以減1,再取反求出原碼
temp=~temp;
tp=temp;
temp=tp*0.0625*100+0.5;
//留兩個小數點就*100,+0.5是四舍五入,因為C語言浮點數轉換為整型的時候把小數點
//后面的數自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
//算由?.5,還是在小數點后面。
}
else
{
tp=temp; temp=tp*0.0625*100+0.5;
}
// aa= temp / 10000;
bb = temp % 10000 / 1000;
cc = temp % 1000 / 100 ;
dd = temp % 100 / 10;
ee = temp % 10;
LCD12864_SetWindow(2,5);
// LCD12864_WriteData(aa+0x30);
LCD12864_WriteData(bb+0x30);
LCD12864_WriteData(cc+0x30);
LCD12864_WriteData('.');
LCD12864_WriteData(dd+0x30);
// LCD12864_WriteData(ee+0x30);
}
/*
初始化LCD12864顯示實驗名稱
*/
void init12864xian()
{
unsigned char i;
LCD12864_SetWindow(0, 0);
while(CharCode1!='\0')
{
LCD12864_WriteData(CharCode1);
i++;
}
i=0;
LCD12864_SetWindow(1,0);
while(CharCode2!='\0')
{
LCD12864_WriteData(CharCode2);
i++;
}
// LCD12864_SetWindow(1,7);
i=0;
LCD12864_SetWindow(2, 0);
while(CharCode3!='\0')
{
LCD12864_WriteData(CharCode3);
i++;
}
i=0;
LCD12864_SetWindow(3, 0);
while(CharCode4!='\0')
{
LCD12864_WriteData(CharCode4);
i++;
}
// LCD12864_WriteData('度');
|