?? cap02.c
字號:
//#include <reg51.h>
#include <REG2051.H>
//#include <intrins.h>
unsigned char i,j,n,t,DispBuf[4];
unsigned int cap;
unsigned char code
BitTab[4]={0xbf,0xdf,0xef,0xf7};//位驅動碼
unsigned char code
DispTab[11]={0xfe,0x70,0xed,0xf9,0x73,0xdb,0xdf,0xf0,0xff,0xfb,0x40};//字形碼
//sbit P1_2=P1^2;
//sbit P3_6=P3^6;
main() //主程序
{ TMOD=0x11;//定時器T0、T1均工作于定時方式1
TH1=0xec;
TL1=0x78;//T1定時時間為5ms
IE=0X88; //開中斷
TR1=1; //開定時器T1
P1_2=0; //電容放電
for(;;); //無限循環,定時中斷返回點
}
Timer1() interrupt 3 //定時中斷服務程序
{ TH1=0xec;
TL1=0x78;
t=BitTab[j]; //取位值
P1=P1|0x78; //P1.3~P1.6送1
P1=P1&t; //P1.3-P1.6輸出取出的位值
if(j==0 && DispBuf[j]==0)t=DispTab[10];//最高位為0時,取空格字形碼
else
{
t=DispBuf[j]; //取出待顯示的數
t=DispTab[t]; //取字形碼
}
P3=t; //字型碼由P3輸出顯示
// if(j==1) P1_0=1;else P1_0=0;//設置小數點
j++; //j作為數碼管的計數器,取值0-3,顯示程序通過它確認顯示哪個數碼管
if(j==4) j=0;
n++;
if(n==48) //每過48個中斷測一次電容量
{
n=0;
TH0=0;
TL0=0;
P1_2=1; //電容開始充電
TR0=1; //開定時器T0
//for(i=0;i>10000;i++) {_nop_();_nop_();_nop_();}
while (AOUT == 0);
//for(;AOUT == 0;); //判斷充電電壓達到參考電壓否
TR0=0; //充電電壓達到參考電壓,關定時器T0
P1_2=0; //電容放電
cap=TL0|(TH0<<8); //取定時器T0中的數值
cap=cap-3; //修正誤差
if(cap>=10000)
{
DispBuf[3]=10;
DispBuf[2]=10;
DispBuf[1]=10;
DispBuf[0]=1; //超量程,最高位顯示1,其余各位不顯示(滅)
}
if(cap<10000) //不超量程,取各位數值
{
DispBuf[3]=cap%10;//取個位數
cap=cap/10;
DispBuf[2]=cap%10;//取十位數
cap=cap/10;
DispBuf[1]=cap%10;//取百位數
DispBuf[0]=cap/10;//取千位數
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -