?? systermr1.c
字號:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit p1_0=P1^0;
sbit p1_1=P1^1;
sbit p1_2=P1^2;
sbit p1_3=P1^3;
sbit p1_4=P1^4;
sbit p1_5=P1^5;
sbit p1_6=P1^6;
uchar code table[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,
0x41,0x1f, 0x01,0x09};
uchar key;
bit aut ; /*手動、自動標志位*/
uint fuck; /*計算位*/
uint temp; /*T為溫度的顯示數(shù)值*/
uchar SET_T ; /*額定溫度,用戶設(shè)定*/
uint TM ; /*初始測溫*/
uchar RS; /*滑動電阻,待測*/
uint mytime;
bit flag; /*溫度,速度顯示轉(zhuǎn)換*/
uchar a;
void initial(void) /*初始化程序*/
{
aut=1;
SET_T=30;
TM=19;
mytime=45104;
p1_2=1;
flag=0;
IP=0x00; /*中斷優(yōu)先級*/
TMOD=0X51; /*T1計數(shù)方式1,T0定時方式1*/
PCON=0x00;
TH0=mytime/256; /*晶振為11.0592MHZ*/
TL0=mytime%256; /*設(shè)周期20ms*/
EA=1; /*開中斷*/
ET0=1;
EX0=1; /*外部中斷0*/
TR0=1; /*開定時器0*/
IT0=1; /*下降沿觸發(fā)*/
}
void dlms(void) /*除抖延時子程序*/
{
uint i;
for(i=200;i>0;i--)
{;}
}
void delay_for_count(uint x) /*延時、開計數(shù)器程序*/
{ uchar i;
TH1=0X00; /*T1計數(shù)初值*/
TL1=0X00;
TR1=1;
while(x>0)
{
x-=1;
for(i=0;i<125;i++){;}
}
TR1=0;
}
void delay1(uint x) /*普通延時程序*/
{
uchar i;
while(x>0)
{
x-=1;
for(i=0;i<125;i++){;}
}
}
void timer0(void) interrupt 1 using 1 /*定時器T0用作方波輸出程序*/
{ if(p1_1==1)
{
TH0=mytime/256;
TL0=mytime%256;
}
else
{ TH0=(65536-mytime)/256;
TL0=(65536-mytime)%256;
}
p1_1=!p1_1;
TF0=0;
}
compute(uint x) /*溫度計算程序,X為頻率數(shù)值*/
{
int n;
n=x*0.25+160;
return (n);
}
void display(uint x) /*顯示子程序*/
{
uchar j; /*j為輔助顯示變量*/
uint display[3]; /*用于顯示的各位數(shù)字*/
display[0]=x/100;
display[1]=x/10%10;
display[2]=x%10; /*分離溫度的各位數(shù)字*/
j=display[2];
SBUF=table[j];
while(TI==0);
TI=0;
j=display[1];
SBUF=table[j]&0xfe;
while(TI==0);
TI=0;
j=display[0];
SBUF=table[j];
while(TI==0);
TI=0;
}
void keybardscan(void) /*按鍵掃描程序*/
{
dlms(); /*去抖延時*/
key=(P1&0x78);
if(key!=0)
{ switch(key)
{
case 0x40: aut=!aut; break;
case 0x20: if(flag==0)
mytime=mytime+10000;
else
SET_T=SET_T+1;break;
case 0x10: if(flag==0)
mytime=mytime-10000;
else
SET_T=SET_T-1; break;
case 0x08: flag=1;p1_2=!p1_2; break;
default: break;
}
}
}
void intu0(void) interrupt 0 using 2 /*按鍵中斷程序*/
{
keybardscan();
}
void main(void) /*主程序*/
{
uchar i;
initial(); /*調(diào)用初始化程序*/
while(1)
{
if(aut==1) /*判斷手動、自動*/
{
if(TM>=SET_T)
{ p1_0=0;
p1_1=1;}
else
p1_0=1;
}
else
p1_0=0;
delay_for_count(100); /*延時100ms*/
fuck=TH1*256+TL1;
temp=compute(fuck); /*帶入頻率,計算溫度顯示數(shù)值*/
display(temp); /*調(diào)用顯示程序,T為處理過后的溫度顯示值,為實際值的10倍*/
TM=temp/10;
if(flag==1||a==1)
{
for(i=10;i<=0;i++)
{
delay1(100); /*延時500ms*/
temp=SET_T*10; /*T為額定溫度的10倍,用于顯示*/
display(temp);
}
flag=0;a=0;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -