|
51hei.png (84.93 KB, 下載次數: 66)
下載附件
2020-11-18 21:44 上傳
- #include"stc15f2k60s2.h"
- #include"iic.h"
- #include"onewire.h"
- #define u8 unsigned char
- #define u16 unsigned int
- code u8 dx[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
- code u8 wx[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
- void init_ct107d();
- void Timer0Init();
- void dig_display();
- void key_deal();
- void dig_deal();
- void led_deal();
- u8 sj[8]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
- u8 read_key_val();
- u8 show_number=0;
- u8 dig_count=0;
- u8 key_read;
- u8 key_lock_20ms=0;
- u8 t_max=30;t_min=20;
- u8 change_tmax,change_tmin;
- u8 temp=88;
- u16 ds18b20_ds400ms=0;
- u16 da_ds200ms=0;
- bit key_lock = 1;
- bit smg_show_mode = 0;
- bit ds18b20_key = 1;
- bit change_on = 0;
- bit da_key = 1;
- bit error_state = 0;
- bit change_sign = 1;
- void main()
- {
- init_ct107d();
- Timer0Init();
- while(temp>80)temp = rd_temperature();
- while(1)
- {
- //按鍵
- if(key_lock==1)
- {
- key_lock = 0;
- key_read = read_key_val();
- if(key_read!=0)
- {
- key_deal();
- }
- }
- //溫度
- if(ds18b20_key==1)
- {
- temp = rd_temperature();
- change_sign=1;
- ds18b20_key=0;
- }
- if(da_key==1)
- {
- //DA
- if(temp>t_max)
- {
- pcf8591_dac(209);//4.0v
- }
- else
- {
- if(temp>=t_min)
- {
- pcf8591_dac(157);//3.0v
- }
- else
- {
- pcf8591_dac(105);//2.0v
- }
- }
- da_key=0;
- }
- if(change_sign==1)
- {
- led_deal();
- change_sign=0;
- }
- dig_deal();
- }
- }
- void init_ct107d()
- {
- P0=0;
- P2=(P2&0X1F)|0XC0; //數碼管
- P2=(P2&0X1F)|0XA0; //外設
- P2=0;
- P0=0XFF;
- P2=(P2&0X1F)|0X80; //led
- P2=0;
- }
- void Timer0Init(void) //1毫秒@12.000MHz
- {
- AUXR &= 0x7F; //定時器時鐘12T模式
- TMOD &= 0xF0; //設置定時器模式
- TMOD |= 0x01; //設置定時器模式
- TL0 = 0x18; //設置定時初值
- TH0 = 0xFC; //設置定時初值
- TF0 = 0; //清除TF0標志
- TR0 = 1; //定時器0開始計時
- ET0=1;
- EA=1;
- }
- void time0() interrupt 1
- {
- TL0 = 0x18; //設置定時初值
- TH0 = 0xFC; //設置定時初值
- dig_display();
- //按鍵讀取定時
- key_lock_20ms++;
- if(key_lock_20ms>=20)
- {
- key_lock_20ms=0;
- key_lock=1;
- }
- //溫度讀取定時
- if(ds18b20_key==0)
- {
- ds18b20_ds400ms++;
- if(ds18b20_ds400ms>=400)
- {
- ds18b20_ds400ms=0;
- ds18b20_key=1;
- }
- }
- //da響應時間
- if(da_key==0)
- {
- da_ds200ms++;
- if(da_ds200ms>=200)
- {
- da_ds200ms=0;
- da_key=1;
- }
- }
- }
- void dig_display()
- {
- P0=0xff;P2=(P2&0X1F)|0XE0;P2=0;
- P0=wx[dig_count];P2=(P2&0X1F)|0XC0;P2=0;
- P0=sj[dig_count];P2=(P2&0X1F)|0XE0;P2=0;
- dig_count++;
- if(dig_count>7)dig_count=0;
- }
- u8 read_key_val()
- {
- static u8 key_state=0;
- u8 key_new;
- u8 key_val=0;
- key_new=P3&0X0F;
- switch(key_state)
- {
- case(0):if(key_new!=0x0f){key_state=1;}break;
- case(1):
- if(key_new==0x0f){key_state=0;}
- else
- {
- switch(key_new)
- {
- case(0x07):key_val=4;break; //s4
- case(0x0b):key_val=5;break; //s5
- case(0x0d):key_val=6;break; //s6
- case(0x0e):key_val=7;break; //s7
- default:key_val=0;break;
- }
- key_state=2;
- }break;
- case(2):if(key_new==0x0f){key_state=0;}break;
- }
- return key_val;
- }
- void key_deal()
- {
- switch(key_read)
- {
- case(4):
- if(smg_show_mode==0)
- {
- smg_show_mode = 1;
- change_tmax = t_max;
- change_tmin = t_min;
- change_on = 0;
- }
- else
- {
- if(change_tmax>=change_tmin)
- {
- t_max = change_tmax;
- t_min = change_tmin;
- change_sign=1;
- if(error_state==1)error_state=0;
- }
- else
- {
- error_state=1;
- }
- smg_show_mode = 0;
- }
- break;
- case(5):
- if(smg_show_mode==1)
- {
- change_on=~change_on;
- }
- break;
- case(6):
- if(smg_show_mode==1)
- {
- if(change_on==1)
- {
- change_tmax++;
- if(change_tmax>99)change_tmax=0;
- }
- else
- {
- change_tmin++;
- if(change_tmin>99)change_tmin=0;
- }
- }
- break;
- case(7):
- if(smg_show_mode==1)
- {
- if(change_on==1)
- {
- if(change_tmax==0)
- {
- change_tmax=99;
- }
- else change_tmax--;
- }
- else
- {
- if(change_tmin==0)
- {
- change_tmin=99;
- }
- else change_tmin--;
- }
- }
- break;
- }
- }
- void dig_deal()
- {
- u8 i;
- if(smg_show_mode==0)
- {
- sj[0]=0xc6;
- for(i=1;i<6;i++)sj[i]=0xff;
- sj[6]=dx[temp/10];
- sj[7]=dx[temp%10];
- }
- else
- {
- sj[0]=0x8c;sj[1]=0xff;sj[2]=0xff;sj[5]=0xff;
- sj[3]=dx[change_tmax/10];sj[4]=dx[change_tmax%10];
- sj[6]=dx[change_tmin/10];sj[7]=dx[change_tmin%10];
- }
- }
- void led_deal()
- {
- if(temp>t_max)
- {
- if(error_state==1)
- {
- P0=0XF6;
- }
- else{P0=0XFe;}
- }
- else
- {
- if(temp>=t_min)
- {
- if(error_state==1)
- {
- P0=0XF5;
- }
- else{P0=0XFD;}
- }
- else
- {
- if(error_state==1)
- {
- P0=0XF3;
- }
- else{P0=0XFB;}
- }
- }
- P2=(P2&0X1F)|0X80;P2=0;
- }
復制代碼 |
-
1.png
(116.69 KB, 下載次數: 63)
下載附件
2020-11-18 20:54 上傳
-
-
省賽.zip
2020-11-18 20:54 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
815.66 KB, 下載次數: 57, 下載積分: 黑幣 -5
題目+源碼
評分
-
查看全部評分
|