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

📄 key_disp.txt

📁 基于51单片机的温度和电压采集与循环显示的控制程序
💻 TXT
字号:
#include <REG51.H>      //"D:\Keil\C51
#include <ABSACC.H>

#include <ADC_TEMP.H>

extern unsigned char ReadAdc();//读ADC转化的数字量
extern void DispVol(unsigned char v); //将电压值输入Dispbuf中
extern void LcdLightOn();
extern void LcdLightOff();
extern void LcdPuts(unsigned char *s);
extern void LcdClearme(unsigned char ac);/*自定义函数************/
extern int LM75A_GetTemp();//读温度值
extern void DispTemp(int t);//显示温度值

extern uchar v1,v2;//旧电压值和新电压值
extern int t1,t2;//旧温度值和新温度值

Code uchar disp_seg[]=
{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00,0xF3,0x40,0x3D,0x39};
//0   1     2    3    4     5   6    7    8    9    全灭 p    -     V    C   的数码管字型数据hgfedcba

uchar DispBuf[8]; //其中的数字指示是disp_seg[]中第几位码
 
uchar bdata key_flag=0;           //定义键盘状态标志位
sbit key_first_flag=key_flag^0;
sbit key_delay_flag=key_flag^1;
sbit key_valid_flag=key_flag^2;	

uchar key_value;    //key_value=0:no key,or key_value=1-8 stand for key1-key8

void DispClear();   //清除数码管的所有显示
void DsipP();       //显示p
void DispInit();    //数码管扫描显示初始化

/*
函数:T1INTSVC()
功能:定时器T1的中断服务函数
*/
void T1INTSVC() interrupt 3
{
	code unsigned char com[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
	static uchar key_value_temp,n=0;
        uchar key_in,i;

	TR1 = 0;
	TH1 = 0xF8;
	TL1 = 0xCD;//0xfc66:1ms for 11.0592MHz,0xf8cd:2ms,0xb800:20ms,0x4c00:50ms

        P1 = 0xFF;		//暂停显示
        if((DispBuf[n]&0x80)==0x80)     //带小数点显示
          { DispBuf[n]=DispBuf[n]&0x7f;
            LED_OUT=~(disp_seg[DispBuf[n]]|0x80);//更新扫描数据
          }
        else  
            LED_OUT=~disp_seg[DispBuf[n]];	
        P1 = ~com[n];	//重新显示

        if(key_first_flag==0)
          { key_in=KEY_IN;
            if(key_in!=0xff)
               { for(i=0;i<n;i++)  //n:当前扫描键
                   key_in=key_in>>1;
                 if((key_in&0x01)==0x00) //若键按下则对应KEY_IN的输入口为0
                    { key_first_flag=1;  //置标志
                      key_value_flag=i;  //暂存
                    }
               }
          }
         else if(key_delay_flag==0&&n==key_value_temp)
           { key_in=KEY_IN;
             for(i=0;i<n;i++)
               key_in=key_in>>1;
             if((key_in&0x01)==0x00)  //一轮扫描之后 8*2ms=16ms,第一次按下的键仍被按下
               key_delay_flag=1;
           }
         else if(key_delay_flag==1&&n==key_value_temp)
           { key_in=KEY_IN;
             for(i=0;i<n;i++)
               key_in=key_in>>1;
             if((key_in&0x01)==0x01) //在一轮扫描之后按键已释放,有效
               { key_valid_flag=1;
                 key_value=key_value_temp+1;
               }
           }
          n++;
	  n &= 0x07;
          
          v2=ReadAdc();
          if((v2!=v1)&&(key_value_process==1||key_value_process==3||key_value_process==4))
            { 
               DispClear();
               DispVol(v2);
               
               if(key_value_process==4)
                 { LcdClearme(16);  //自定义函数
                   LcdPuts(DispBuf); 
                   LcdLightOn();
                   LcdLightOff(); 
                 }
               v1=v2;
            }

          t2=LM75A_GetTemp();
          if((t2!=t1)&&(key_value_process==2||key_value_process==3||key_value_process==4))
            { DispClear();
              DispTemp(t2);

              if(key_value_process==4)
                 { LcdClearme(48);  //自定义函数
                   LcdPuts(DispBuf); 
                   LcdLightOn();
                   LcdLightOff(); 
                 }
              t1=t2;
            }

           TR1 = 1;
}

/*
函数:DispClear()
功能:清除数码管的所有显示
*/
void DispClear()
{  unsigned char i;
   
   for(i=0;i<8;i++)
     { DispBuf[i]=0x0A;
     }
}

/*
函数:DispP()
功能:显示“P       ”
*/
void DsipP()
{ DispClear();
  DispBuf[7]=0x0B;//disp_seg[]的第11(0x0B)个显示码
}              

/*
函数:DispInit()
功能:数码管扫描显示初始化
*/               
void DispInit()
{       DispClear();
	EA = 0;
	TMOD &= 0x0F;
	TMOD |= 0x10;
	TH1 = 0xF8;
	TL1 = 0xCD;
	TR1 = 1;
        ET1 = 1;
	EA = 1;
} 

⌨️ 快捷键说明

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