?? key_disp.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; //定義鍵盤狀態(tài)標志位
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 + -