📄 last.c
字号:
#include <reg52.h>
#include <intrins.h>
#include <math.h>
sbit s1 = P1^3; //数码管位控用于片选LED信号
sbit s2 = P1^1;
sbit s3 = P1^2;
sbit s4 = P1^0;
sbit bell = P2^7; //BELL
sbit key1 = P1^4; //key1
sbit key2 = P1^5; //key2
sbit key3 = P3^6; //key3
sbit key4 = P3^7; //key4
sbit Clk_549 = P2^2; //时钟口线
sbit DataOut = P2^1; //数据输出口线
sbit Cs_549 = P2^0; //片选
//#-----------------------------
#define Wait1us {_nop_();}
#define Wait2us {_nop_();_nop_();}
#define Wait4us {Wait2us;Wait2us;}
#define Wait8us {Wait4us;Wait4us;}
#define Wait30us {Wait8us;Wait8us;Wait8us;Wait4us;Wait2us;}
unsigned char code table0[]={0xc0, 0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//无小数点
unsigned char led[4];
unsigned int a1=20,a2=30;
unsigned int i,m;
unsigned int tmp;
unsigned int min=30,sec=0,hour=8,htemp=0;
unsigned int ds_hour=0,ds_min=0,ds_sec=0,ds_temp1=0;
bit ds_flag = 0,ds_start = 0,timechange=0,ds_start_flag=0,js_flag=0,js_start =0 ;
unsigned char mod = 0 , key = 0;
unsigned long int js_temp =0 , ds_temp = 0 ;
//------------------------------
unsigned int code table_tmp[]={9942,9757,9581,9412,9250,9094,8945,8800,8661,8527,8396,8270,8148,8030,7914,7802,7693,7587,7484,7383,7285,7188,7094,7003,6913,6825,6738,6654,6571,6490,6410,6332,6255,6179,6105,6031,5960,5889,5819,5750,5683,5616,5550,5485,5421,5358,5296,5234,5173,5113,5054,4995,4937,4880,4823,4767,4711,4656,4602,4548,4495,4442,4389,4337,4286,4235,4184,4134,4084,4035,3986,3937,3889,3841,3793,3746,3699,3652,3606,3560,3514,3469,3423,3378,3333,3289,3245,3201,3157,3113,3070,3026,2983,2941,2898,2855,2813,2771,2729,2687,2645,2604,2562,2521,2479,2438,2397,2356,2315,2275,2234,2193,2153,2112,2072,2032,1991,1951,1911,1871,1831,1791,1751,1711,1671,1631,1591,1551,1511,1470,1430,1390,1350,1310,1270,1230,1189,1149,1108,1068,1027,987,946,905,864,823,782,741,699,658,616,574,532,490,448,405,363,320,277,233,190,146,102,57,13,0};
//-------------------------------
void delay_ms(unsigned int i) // ims延时
{
unsigned int j;
for(;i>0;i--);
for(j=0;j<110;j++);
}
unsigned char getkey()
{
if(key1==0){delay_ms(1);if(key1==0){i=0;while(key1==0)
{ delay_ms(3000);i++;} if( i> 10) {return(10);} else {return(1);}}}
if(key4==0){delay_ms(1);if(key4==0){while(key4==0); return(4);}}
if(key2==0){delay_ms(1);if(key2==0){while(key2==0); return(2);}}
if(key3==0){delay_ms(1);if(key3==0){while(key3==0); return(3);}}
return(0);
}
//--------------------------------
//AD转换电路
unsigned char adc_549()
{
unsigned char ConvertValue = 0;
unsigned char i;
/* Cs_549 = 1; //芯片复位
Cs_549 = 0;
Cs_549 = 1;
Clk_549 = 0;
Wait4us;
Cs_549 = 0; //芯片起始
Wait4us; //等待延时
for (i = 0; i < 8; i ++) //输入采样转换时钟
{
Clk_549 = 1;
Clk_549 = 0;
} */
Cs_549 = 1; //开始转换
Clk_549 = 0;
Wait30us; //等待转换结束
Cs_549 = 0; //读取转换结果
Wait4us;
for (i = 0; i < 8; i ++) //
{
Clk_549 = 1;
ConvertValue <<= 1;
ConvertValue |= DataOut;
Clk_549 = 0;
}
Cs_549 = 1;
return (ConvertValue); //
}
void display()
{
P1|=0x0f; //lit off all led
P0=0xff;
s4=0;
P0=table0[led[0]];
delay_ms(1);
P1|=0x0f; //lit off all led
P0=0xff;
s3=0;
P0=table0[led[1]];
delay_ms(1);
P1|=0x0f; //lit off all led
P0=0xff;
s2=0;
P0=table0[led[2]]&0x7f;
delay_ms(1);
P1|=0x0f; //lit off all led
P0=0xff;
s1=0;
P0=table0[led[3]];
delay_ms(1);
P1|=0x0f; //lit off all led
P0=0xff;
delay_ms(1);
delay_ms(1);
}
void settemp()
{
while(1)
{
key =getkey();
if(key==4){break;}
if(key==2){a1++;}
if(key==3){a1--;}
led[3]=a1/10 ;
led[2]=a1%10;
led[1]=10;
led[0]=10;
display();
if(key==1){
while(1)
{
key = getkey();
if(key==2){a2++;}
if(key==3){a2--;}
led[3]= 10;
led[2]= 10;
led[1]=a2/10;
led[0]=a2%10;
display();
if(key==1){break;}
} }
}
}
void setds()
{
while(1)
{
ds_start_flag=0;
key=getkey();
if(key==4){break;}
if(key==2){if(ds_hour < 24) ds_hour++;ds_start_flag=1;}
if(key==3){if(ds_hour >= 1) ds_hour--;ds_start_flag=1;}
led[3]=ds_hour/10 ;
led[2]=ds_hour%10;
led[1]=10;
led[0]=10;
display();
if(key==1)
{
while(1)
{
key = getkey();
if(key==2){if(ds_min<60) ds_min++;ds_start_flag=1;}
if(key==3){if(ds_min >=1) ds_min--;ds_start_flag=1;}
led[3]=10 ;
led[2]=10;
led[1]=ds_min/10;
led[0]=ds_min%10;
display();
if(key==1){break;}
}
if(ds_start_flag ==1) ds_start = 1;
}
}
}
void settime()
{
while(1)
{
key=getkey();
if(key==4){break;}
if(key==2){if(hour < 24) hour++;}
if(key==3){if(hour >= 1) hour--;}
led[3]=hour/10 ;
led[2]=hour%10;
led[1]=10;
led[0]=10;
display();
if(key==1)
{
while(1)
{
key=getkey();
if(key==2){if(min < 60) min++;}
if(key==3){if(min >= 1) min--;}
led[3]=10 ;
led[2]=10 ;
led[1]=min/10;
led[0]=min%10;
display();
if(key==1){break;}
}
}
}
}
void timer0()interrupt 1
{
bell=~bell;delay_ms(100);
TH0=0;TL0=0;
if (tmp>=(a1*100)) TR0=0;
}
void timer1()interrupt 3
{
htemp++;
TH1=0xdc;
TL1=0x00;
// if(htemp==1)
if(htemp == 100)
{
htemp = 0 ;
sec++;
ds_flag = 1;
js_flag = 1;
if(sec == 60)
{
sec = 0 ;
min++;
if(min == 60)
{
min = 0;
hour++;
if(hour == 24) hour =0;
}
}
}
}
//#-----------------------
void showtemp()
{
/* float temp,k;
tmp=adc_549();
// if( fabs(tmp-tmp2) > 1 ) //过滤消除变化太快。
{
//AD转换,调用子程序
temp=(float)tmp; //转换数据类型
k=log(temp/(255.0-temp));
temp=k/3380+1/298.15;
temp=1/temp-273.15;
tmp=(unsigned int)(temp*100);//转换成4位整数
}
if (tmp>=(a2*100))bell=0;
else if(tmp<(a1*100)) TR0=1;
else bell=1;
led[3]=tmp/1000;
led[2]=tmp%1000/100;
led[1]=tmp%100/10;
led[0]=tmp%10;
for(i=0;i<50;i++)display();
}
//---------
void showtime()
{
key=getkey();
if(key==4){timechange = ~timechange;}
if(timechange == 1)
{
led[3]=(min/10)%10;
led[2]=min%10;
led[1]=(sec/10)%10;
led[0]=sec%10;
}
else{
led[3]=(hour/10)%10;
led[2]=hour%10;
led[1]=(min/10)%10;
led[0]=min%10;
}
for(i=0;i<50;i++) display();
}
//------------
void showds()
{
key=getkey();
if(key==4){timechange = ~timechange;}
if(ds_start == 1)
{
if(ds_flag ==1)
{
ds_flag = 0;
ds_temp++;
}
}
ds_temp1=ds_hour*3600+ds_min*60+ds_sec;
ds_temp1=ds_temp1-ds_temp;
if(timechange == 1)
{
led[3]=ds_temp1/3600/10;
led[2]=ds_temp1/3600%10;
led[1]=ds_temp1%3600/60/10;
led[0]=ds_temp1%3600/60%10;
}else
{
led[3]=ds_temp1%3600/60/10;
led[2]=ds_temp1%3600/60%10;
led[1]=ds_temp1%3600%60/10;
led[0]=ds_temp1%3600%60%10;
}
for(i=0;i<50;i++) display();
if(ds_temp1 == 0 & ds_start == 1)
{
ds_start = 0;
ds_temp = 0;
ds_hour=0;
ds_min=0;
ds_sec=0;
// TR0=1;
while(1)
{
for(i=0;i<5000;i++){_nop_();}
bell=~bell;
key=getkey();
if(key==4){break;}
delay_ms(3000);
led[3]=0;
led[2]=0;
led[1]=0;
led[0]=0;
for(i=0;i<50;i++) display();
}
}
*/
}
//---------------------
void showjs()
{
key=getkey();
if(key==4){ timechange = ~timechange;}
if(key==2){js_start = ~js_start;}
if(key==3){js_temp = 0;}
if(js_start == 1)
{
if(js_flag ==1)
{
js_flag = 0;
js_temp ++;
}
}
if(timechange == 0)
{
led[3]=js_temp%3600/60/10;
led[2]=js_temp%3600/60%10;
led[1]=js_temp%3600%60/10;
led[0]=js_temp%3600%60%10;
}else
{
led[3]=js_temp/3600/10;
led[2]=js_temp/3600%10;
led[1]=js_temp%3600/60/10;
led[0]=js_temp%3600/60%10;
}
for(i=0;i<50;i++) display();
}
//---------------------
void showmode()
{
if(mod ==0) showtemp();
// if(mod==1) showtime();
// if(mod==2) showds();
if(mod == 3) showjs();
}
void mode_edit()
{
if ( mod == 0) settemp();
if (mod ==1 ) settime();
if (mod == 2) setds();
}
//---------------
//---------------
//---------------
void main()
{
TMOD=0x11;EA=1;
ET0=1;TH0=0x00;TL0=0x00;TR0=0;
ET1=1;TH1=0xdc;TL1=0x00;TR1=1;
while(1)
{
key = getkey();
if(key == 1){mod = (mod + 1) % 4;}
if(key ==10 ){mode_edit();}
showmode();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -