📄 22.c
字号:
#include <REGX51.H>
#include "ds18b20.h"
#define NO 3
//==================数码管段选IO口定义========================
sbit bit1=P2^7;
sbit bit2=P2^6;
sbit bit3=P2^5;
sbit bit4=P2^4;
unsigned char code table[]={0x3d,0x3b,0x37,0x2f,0x1f,0x3f,0xc0,0xa0,0x60,0xe0,
0x3d,0x3f,0x60,0xe0,0x3b,0x3f,0xa0,0xe0,0x37,0x3f,0xc0,0xe0,0x2f,0x1f,0x3f};// zuoyouliudong
unsigned char code DisplayCode[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xFF,0xef,0x40};//显示编码,xianshudian
unsigned char code DisplayCode1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x39};//wu xianshudian
unsigned char DisplayBuffer[4]={0,0,0,10}; //显示缓冲
unsigned int temperature =0;
unsigned char set,n=0;
unsigned char temp_h=0;
unsigned char temp_l=0;
unsigned char tcount2s;
void displaytemperature1()
{ static unsigned char count;
DisplayBuffer[0] = temperature/100; // 十位
DisplayBuffer[1] = (temperature/10)%10; // 个位
DisplayBuffer[2] = (temperature/1)%10; // 小数点位
switch(count)
{
case 1:
P0=DisplayCode1[DisplayBuffer[3]]; //字符C
bit4=0;bit3=1;bit2=1;bit1=1;
break;
case 2:
P0=DisplayCode1[DisplayBuffer[2]]; //小数点位
bit1=1;bit4=1;bit3=0;bit2=1;
break;
case 3: P0=DisplayCode[DisplayBuffer[1]]; // 个位
bit2=0;bit1=1;bit4=1;bit3=1;
break;
case 4:
P0=DisplayCode1[DisplayBuffer[0]]; //十位
bit3=1;bit2=1;bit1=0;bit4=1;
break;
default:break;
}
count++;
if(count==5)
count=0;
}
void Delay1ms(unsigned char k) //延时函数,1毫秒
{
unsigned char i,j;
for(i=0;i<k;i++)
for(j=0;j<120;j++);
}
void displaytemperature2(void)
{
P0=DisplayCode1[temp_h];
bit1=1; //十位
Delay1ms(NO);
bit1=0;
P0=DisplayCode[temp_l];
bit2=1; //个位
Delay1ms(NO);
bit2=0;
P0=DisplayCode1[0];
bit3=1;
Delay1ms(NO);
bit3=0;
P0=DisplayCode1[10];
bit4=1;
Delay1ms(NO);
bit4=0;
}
void scan_key()
{ Delay1ms(2);
if(P1_0==1)
set++;
if(set>=2)
set=0;
F0:if(P1_0==1)goto F0; //按键未释放,在此等候//
}
temperaturealarm()
{
if(temperature>(temp_h*100+temp_l*10)&(temp_h*100+temp_l*10)>=150)
{
P3_0=0;
// Delay1ms(5);
}
if(temperature<(temp_h*100+temp_l*10)&(temp_h*100+temp_l*10)<150)
{
P3_0=0;
// Delay1ms(5);
}
}
void temp_change()
{
unsigned char m;
if(P1_1==1) //十位加一
Delay1ms(5);
if(P1_1==1)
temp_h=temp_h+1;
if(temp_h==10)
temp_h=0;
for(m=0;m<8;m++)
{ displaytemperature2();}
if(P1_2==1)
Delay1ms(5);
if(P1_2==1) //十位减一
temp_h=temp_h-1;
if(temp_h==0)
temp_h=0;
for(m=0;m<8;m++)
{displaytemperature2();}
if(P1_3==1)
Delay1ms(5);
if(P1_3==1)
temp_l=temp_l+1; // //个位加一
if(temp_l==10)
temp_l=0;
for(m=0;m<8;m++)
{displaytemperature2();}
if(P1_4==1)
Delay1ms(10);
if(P1_4==1) //个位减一
temp_l=temp_l-1;
if(temp_l==0)
temp_l=0;
for(m=0;m<8;m++)
{displaytemperature2();}
}
main()
{
P1=0x00;
while(1)
{
temperature=Read_Temperature();
temperature=temperature*0.625;
displaytemperature1();
temperaturealarm();
if(P1_0==1)
scan_key();
tcount2s++;
if(tcount2s==15)
{ switch(n)
{
case 0: P3=table[n];
break;
case 1: P3=table[n];
break;
case 2: P3=table[n];
break;
case 3: P3=table[n];
break;
case 4: P3=table[n];
break;
case 5: P3=table[n];
break;
case 6: P1=table[n];
break;
case 7: P1=table[n];
break;
case 8: P1=table[n];
break;
case 9: P1=table[n]; //////////////////////////////////////////////////////
break;
case 10: P3=table[n]; //p3.1 //0x3d,0x3f,0x60,0xe0,0x3b,0x3f,0xa0,0xe0,0x37,0x3f,0xc0,0xe0,0x2f,0x1f,0x3f
break; // 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
case 11: P3=table[n];
break;
case 12: P1=table[n]; // p1.7
break;
case 13: P1=table[n];
break;
case 14: P3=table[n]; //p3.2
break;
case 15: P3=table[n];
break;
case 16: P1=table[n]; //1.6
break;
case 17: P1=table[n];
break;
case 18: P3=table[n]; //3.3
break;
case 19: P3=table[n];
break;
case 20: P1=table[n]; //1.5
break;
case 21: P1=table[n];
break;
case 22: P3=table[n];//3.4
break;
case 23: P3=table[n];//3.5
break;
case 24: P3=table[n];//p3灭
break;
default:break;
}
n++;
if(n==25)
n=0;
}
if( tcount2s>=20)
tcount2s=0;
switch(set)
{
case 1:
temp_change();
break;
default:
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -