📄 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为温度的显示数值*/
uchar SET_T ; /*额定温度,用户设定*/
uint TM ; /*初始测温*/
uchar RS; /*滑动电阻,待测*/
uint mytime;
bit flag; /*温度,速度显示转换*/
uchar a;
void initial(void) /*初始化程序*/
{
aut=1;
SET_T=30;
TM=19;
mytime=45104;
p1_2=1;
flag=0;
IP=0x00; /*中断优先级*/
TMOD=0X51; /*T1计数方式1,T0定时方式1*/
PCON=0x00;
TH0=mytime/256; /*晶振为11.0592MHZ*/
TL0=mytime%256; /*设周期20ms*/
EA=1; /*开中断*/
ET0=1;
EX0=1; /*外部中断0*/
TR0=1; /*开定时器0*/
IT0=1; /*下降沿触发*/
}
void dlms(void) /*除抖延时子程序*/
{
uint i;
for(i=200;i>0;i--)
{;}
}
void delay_for_count(uint x) /*延时、开计数器程序*/
{ uchar i;
TH1=0X00; /*T1计数初值*/
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为频率数值*/
{
int n;
n=x*0.25+160;
return (n);
}
void display(uint x) /*显示子程序*/
{
uchar j; /*j为辅助显示变量*/
uint display[3]; /*用于显示的各位数字*/
display[0]=x/100;
display[1]=x/10%10;
display[2]=x%10; /*分离温度的各位数字*/
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(); /*调用初始化程序*/
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); /*带入频率,计算温度显示数值*/
display(temp); /*调用显示程序,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 + -