單片機(jī)熱量計(jì):
1、測量流速,計(jì)算流量。
2、設(shè)置比熱,測量溫度,計(jì)算熱量。
3、LCD1602顯示當(dāng)前時(shí)間和測量結(jié)果。
4、按鍵設(shè)置系統(tǒng)參數(shù),比熱、時(shí)間。
說明:仿真很卡,按鈕要多按幾秒鐘才會有反應(yīng)。
sbit lie2=P1^2;
sbit lie3=P1^1;
sbit lie4=P1^0;
sbit beep=P1^5;//蜂鳴器
sbit smg1=P2^2;//數(shù)碼管
sbit smg2=P2^3;
sbit smg3=P2^4;
//數(shù)碼管編碼
uchar code smgduan0[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//顯示0~9,無小數(shù)點(diǎn)
uchar code smgduan1[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//顯示0~9,有小數(shù)點(diǎn)
uchar time=0,mode=0;//系統(tǒng)變量
uchar miao=0;//計(jì)時(shí)
uchar beep_time=0;//蜂鳴器計(jì)時(shí)
uchar fena=0,fenb=0;//分?jǐn)?shù)
//延時(shí)
void delay(uint i)
{
while(i--);
}
//按鍵檢測
uchar key=0;
uchar key_scan()
{
uchar i=0;
h1=0;h2=0;h3=0;
if((P1 & 0x0f)!=0x0f)
{
delay(1000);
if((P1 & 0x0f)!=0x0f)
{
h1=0;h2=1;h3=1;
if(!lie1)
i=1;
if(!lie2)
i=2;
if(!lie3)
i=3;
if(!lie4)
i=4;
h1=1;h2=0;h3=1;
if(!lie1)
i=5;
if(!lie2)
i=6;
if(!lie3)
i=7;
if(!lie4)
i=8;
h1=1;h2=1;h3=0;
if(!lie1)
i=9;
if(!lie2)
i=10;
if(!lie3)
i=11;
if(!lie4)
i=12;
}
}
if(key!=i)
{
key=i;
return key;
}
else
return 0;
}
//主函數(shù)
void main()
{
uchar i=0;
beep=0;
TMOD|=0X01;
TH0=0X3C;
TL0=0XB0;
ET0=1;//打開定時(shí)器0中斷允許
EA=1;//打開總中斷
TR0=1;//打開定時(shí)器
while(1)
{
i=key_scan();//讀取按鍵
if(mode==0) //設(shè)置模式
{
if(i==9)//開始
{
mode=1;
miao=24;
}
}
else
{
if(i==2)//A加1
{
if(fena<99)
fena++;
}
if(i==3)//A加2
{
if(fena<98)
fena+=2;
}
if(i==4)//A加3
{
if(fena<97)
fena+=3;
}
if(i==6)//B加1
{
if(fenb<99)
fenb++;
}
if(i==7)//B加2
{
if(fenb<98)
fenb+=2;
}
if(i==8)//B加3
{
if(fenb<97)
fenb+=3;
}
}
if(i==10)//暫停
{
資料借鑒于此紛傳
閱讀全文