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

📄 22.c

📁 数字温度计。用DS18B20实现和8051实现
💻 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 + -