📄 text1.c
字号:
#include <reg52.h>
#include <intrins.h>
#include <math.h>
#include <stdio.h>
sbit s4 = P1^0;
sbit s3 = P1^2;
sbit s2 = P1^1;
sbit s1 = P1^3;
sbit Bell = P2^7; //蜂鸣器
sbit key1 = P1^4;
sbit key2 = P1^5;
sbit key3 = P3^6;
sbit key4 = P3^7;
sbit Clock = P2^2; //时钟口线
sbit DataOut = P2^1; //数据输出口线
sbit ChipSelect = P2^0; //片选口线
#define Wait1us {_nop_();}
#define Wait2us {Wait1us;Wait1us;}
#define Wait4us {Wait2us;Wait2us;}
#define Wait8us {Wait4us;Wait4us;}
#define Wait30us {Wait8us;Wait8us;Wait8us;Wait4us;Wait2us;}
// 蜂鸣器鸣叫时间(5毫秒为单位)
unsigned char BellCount;
//
unsigned char BellType;
#define BT_OFF 0 // 关闭声音
#define BT_BUTTON 1 // 按键声
#define BT_WARN 2 // 提示声
#define BT_ALARM 3 // 闹铃(报警)声
#define temp 10
#define dayu 11
#define xiaoyu 12
#define xuanzhe 13
code unsigned char table[10] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char led[4];
unsigned char wendu_up=40;//**************** wen du shang xian definde zhi 40;
unsigned char wendu_low=10;//***************** wen du xia xian definde zhi 10;
unsigned char i=0;
unsigned char timesyb;//******
unsigned char show[4];
unsigned char gewei=0,shiwei=0,scend=0,minute=0;
unsigned char mi=0,mj=0,judgeset=0,dscount=0; //judgeset symble to start set state; dscount symble 5s to out set state;
bit key4syb=0,setsyb=0,out_out=0;
unsigned char ledbuf[4];
void set(void);
void checkkey4(void);
//---------------------片选A/D从外界读温度--------------------------
unsigned char adc_conv()
{
unsigned char i;
unsigned char value;
Clock=0;
ChipSelect=1;
Wait30us
ChipSelect=0;
for(i=0;i<8;i++)
{
value<<=1;
Clock=1;
if(DataOut==1)
value|=0x01;//value+=1;
Clock=0;
}
ChipSelect=1;
return(value);
}
//------------------------延迟约0.1s-----------------
void delay_ms()
{
unsigned int i;
for(i=0;i<100;i++);
}
//-----------------------------延迟约0.4秒---------
void key_delay()
{unsigned int i,j; //stop for 0.4s
for(i=0;i<400;i++)for(j=0;j<1000;i++);
}
//----------------------------显示---------------
void display()
{
P1|=0x0f; //lit off all led
P0=0xff;
s1=0;
P0=show[0];//table[led[0]];
delay_ms();
P1|=0x0f; //lit off all led
P0=0xff;
s2=0;
P0=show[1];//table[led[1]];
delay_ms();
P1|=0x0f; //lit off all led
P0=0xff;
s3=0;
P0=show[2];//table[led[2]];
delay_ms();
P1|=0x0f; //lit off all led
P0=0xff;
s4=0;
P0=show[3];//table[led[3]];
delay_ms();
}
// 蜂鸣器声音控
void BellCtrl(unsigned char BellType)
{
switch (BellType)
{
case BT_OFF: // 关闭声音
Bell = 1;
BellCount = 0;
break;
case BT_BUTTON: // 按键声音
if (BellCount > 0)
{
-- BellCount;
Bell = 0;
Wait8us
Bell = 0;
}
else
{
Bell = 1;
BellType = BT_OFF;
}
break;
case BT_WARN: // 提示2声
if (BellCount > 0)
{
if (BellCount > 150)
Bell = 0;
else if (BellCount > 100)
Bell = 1;
else if (BellCount > 50)
Bell = 0;
else
Bell = 1;
-- BellCount;
}
else
{
Bell = 1;
BellType = BT_OFF;
}
break;
default:break;
}
}
// 蜂鸣器
void BellSet(unsigned char type)
{
switch (type)
{
case BT_OFF:
BellType = BT_OFF;
BellCount = 0;
break;
case BT_BUTTON:
BellType = BT_BUTTON;
BellCount = 4; // 按键声响0.1秒
break;
case BT_WARN:
BellType = BT_WARN;
BellCount = 200; //
break;
default:
break;
}
}
void main()
{
float k,temp1;
unsigned char tmpl,BellType = BT_OFF,BellCount=0;
wendu_up=50;//******** wen du shang xian definde zhi 50;
wendu_low=5;//******** wen du xia xian definde zhi 5;
Bell = 1;
TMOD=0x21;
PT1=1;
EA=1;
ET0=1;
ET1=1;
TH0=0x4c;//*********************
TL0=0x00;//**********************
TH1=0x6c;
TL1=0x6c;
timesyb=6;
TR0=0;//ding shi 0
TR1=1;//start ding shi 1
delay_ms();
while(1)
{ tmpl=adc_conv();
temp1=(float)tmpl;
k=log(temp1/(255-temp1));
temp1=k/3380+1/298.15;
temp1=1/temp1-270.15;
tmpl=(unsigned char)temp1;
led[0]=(tmpl%100)/10;
led[1]=tmpl%10;
show[0]=table[led[0]];//******************
show[1]=table[led[1]];//************
show[2]=0xbf;//******************
show[3]=0xbf;//************
if(tmpl>wendu_up||tmpl<wendu_low)
{BellCtrl(BT_WARN);}
checkkey4();
display();
}
}
/*---------------------------------------------------------------------------------------------------------------------------------------*/
void restart_time0(void)
{ TR0=0;
TH0=0x4c;
TL0=0x00;
dscount=0;
TR0=1;
}
void showtime(void)
{
ledbuf[0]=minute/10;
ledbuf[1]=minute%10;
ledbuf[2]=scend/10;
ledbuf[3]=scend%10;
show[0]=table[ledbuf[0]];
show[1]=table[ledbuf[1]]&0x7f;
show[2]=table[ledbuf[2]];
show[3]=table[ledbuf[3]];
display();
}
void time1(void)interrupt 3 //multiple 80*80=1s
{ if(mi<80)
{ if(mj<80)
mj++;
else {mj=0;mi++;
if(key4syb==0)display();
else showtime();//+++++++++++++++++主要的显示与叫;
}
}
else {mi=0;scend++;
if(scend==60){scend=0;minute++;
if(minute==60)
minute=0;
}
}
}
/*-------------------------------------------------------------------------------------------------------------------------------------*/
void time0(void)interrupt 1 //ding shi 50ms
{ TR0=0;
if(out_out==0)
{
if(key4syb==1&&setsyb==0)
{key4=1;display();delay_ms();
if(key4==0)
{judgeset++;TR0=1;}
else
{judgeset=0;key4syb=0;}
if(judgeset==60) //have keeping key4 for 3s,enter set state;
{setsyb=1;
key4syb=0;
TR0=0;TH0=0x4c;TL0=0x00;TR0=1;
set(); //______-where to get into the set state
}
}
if(dscount<100) /*count 5 scends*/
{dscount++;TH0=0x4c;TL0=0x00;TR0=1;}
else {
setsyb=0; //return to normal state
show[0]=table[led[0]]; //set to the run state
show[1]=table[led[1]];
show[2]=table[led[2]];
show[3]=table[led[3]];
TR0=0;TH0=0x4c;TL0=0x00; out_out=1;
}
}
else out_out=0;
}
/*----------------------------------------------------------------------------------------------------------------------------------*/
void checkkey4(void)
{ if(setsyb==0)
{key4=1;Wait8us//+++++++++++++++++++++++++++++++++have key
if(key4==0){key4syb=1;
TR0=1;BellSet(BT_BUTTON);
showtime();}//+++++++++++++++++++++++++++++++++++++=show time
}
}
void set(void)
{
unsigned char state=0;
unsigned char facestate=0,set_up_tempt=1,set_donw_temp=2,set_time=3,set_scend=4,set_minute=5;
do
switch (state)
{case 0:led[0]=wendu_up/10;
led[1]=wendu_up%10;
led[2]=wendu_low/10;
led[3]=wendu_low%10;
show[0]=table[led[0]]; //show tempter
show[1]=table[led[1]];
show[2]=table[led[2]];
show[3]=table[led[3]];
display();
if(key1==0)
{key1=1;display();delay_ms();
if(key1==0) //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++have key
{restart_time0();BellSet(BT_BUTTON);
state=set_time;
showtime();while(key1==0);}break;
}
if(key2==0)
{key2=1;display();delay_ms();
if(key2==0) //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++have key
{restart_time0();BellSet(BT_BUTTON);
state=set_up_tempt;
show[2]=0xff;show[3]=0xff;display();while(key2==0);}break;
}
if(key3==0)
{key3=1;display();delay_ms();
if(key3==0) //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++have key
{restart_time0();BellSet(BT_BUTTON);
state=set_donw_temp;
show[0]=0xff;show[1]=0xff;display();while(key3==0);}break;
}
break;
case 1: display();
if(key1==0)
{key1=1;display();delay_ms();
if(key1==0) //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++have key
{restart_time0();BellSet(BT_BUTTON);
state=facestate;
while(key1==0);}break;
}
if(key2==0)
{key2=1;display();delay_ms();
if(key2==0) //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++have key
{restart_time0();BellSet(BT_BUTTON);
wendu_up++;
show[0]=table[wendu_up/10];show[1]=table[wendu_up%10];display();while(key2==0);}break;
}
if(key3==0)
{key3=1;display();delay_ms();
if(key3==0) //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++have key
{restart_time0();BellSet(BT_BUTTON);
wendu_up--;
show[0]=table[wendu_up/10];show[1]=table[wendu_up%10];display();while(key3==0);}break;
}
break;
case 2: display();
if(key1==0)
{key1=1;display();delay_ms();
if(key1==0) //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++have key
{restart_time0();BellSet(BT_BUTTON);
state=facestate;
while(key1==0);}break;
}
if(key2==0)
{key2=1;display();delay_ms();
if(key2==0) //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++have key
{restart_time0();BellSet(BT_BUTTON);
wendu_low++;
show[2]=table[wendu_low/10];show[3]=table[wendu_low%10];display();while(key2==0);}break;
}
if(key3==0)
{key3=1;display();delay_ms();
if(key3==0) //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++have key
{restart_time0();BellSet(BT_BUTTON);
wendu_low--;
show[2]=table[wendu_low/10];show[3]=table[wendu_low%10];display();while(key3==0);}break;
}
break;
case 3:showtime();
if(key1==0)
{key1=1;display();delay_ms();//+++++++++++++++++++++++++++++++++have key
if(key1==0)
{restart_time0();BellSet(BT_BUTTON);
state=facestate;
while(key1==0);}break;
}
if(key2==0)
{key2=1;display();delay_ms();
if(key2==0) //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++have key
{restart_time0();BellSet(BT_BUTTON);
state=set_minute;
show[2]=0x07;show[3]=0x01;display();while(key2==0);}break;
}
if(key3==0)
{key3=1;display();delay_ms();
if(key3==0) //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++have key
{restart_time0();BellSet(BT_BUTTON);
state=set_scend;
show[0]=0x07;show[1]=0x01;display();while(key3==0);}break;
}
if(key4==0)
{key4=1;display();delay_ms();
if(key4==0) //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++have key
{//BellCtrl(BT_BUTTON);
setsyb=0; //out set state;
while(key4==0);}break;
}
break;
case 4:if(key1==0)
{key1=1;display();delay_ms();//+++++++++++++++++++++++++++++++++have key
if(key1==0)
{restart_time0();BellSet(BT_BUTTON);
state=set_time;
while(key1==0);}break;
}
if(key2==0)
{key2=1;display();delay_ms();
if(key2==0) //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++have key
{restart_time0();BellSet(BT_BUTTON);
scend++;
show[2]=table[scend/10];show[3]=table[scend%10];display();key_delay();}break;
}
if(key3==0)
{key2=1;display();delay_ms();
if(key3==0) //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++have key
{restart_time0();BellSet(BT_BUTTON);
scend--;
show[2]=table[scend/10];show[3]=table[scend%10];display();key_delay();}break;
}
break;
case 5:if(key1==0)
{key1=1;display();delay_ms();//+++++++++++++++++++++++++++++++++have key
if(key1==0)
{restart_time0();BellSet(BT_BUTTON);
state=set_time;
while(key1==0);}break;
}
if(key2==0)
{key2=1;display();delay_ms();
if(key2==0) //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++have key
{restart_time0();BellSet(BT_BUTTON);
minute++;
show[0]=table[minute/10];show[1]=table[minute%10];display();key_delay();}break;
}
if(key3==0)
{key3=1;display();delay_ms();
if(key3==0) //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++have key
{restart_time0();BellSet(BT_BUTTON);
minute--;
show[0]=table[minute/10];show[1]=table[minute%10];display();key_delay();}break;
}
break;
default:state=facestate; break;
}
while(setsyb==1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -