|
預(yù)想功能:上電后,溫度傳感器工作,按下按鍵,電機(jī)工作
現(xiàn)在的現(xiàn)象:下載程序后,溫度正常顯示,按下按鍵,蜂鳴器會(huì)響,按一下響一下,但是電機(jī)不轉(zhuǎn)
單片機(jī)源程序如下:
- #include "reg52.h"
- #include "temp.h"
- typedef unsigned int u16;
- typedef unsigned char u8;
- #define GPIO_MOTOR P1
- sbit LSA=P2^2;
- sbit LSB=P2^3;
- sbit LSC=P2^4;
- sbit L6=P2^5;
- sbit beep=P1^5;
- sbit k3=P3^2;
- u8 displaydata[5];
- u8 code wenduduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//ÏÔê¾0,1,2,3μè
- unsigned char code FFS[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};//·′×a
- unsigned char code FFN[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};//Õy×a
- unsigned char Direction,Speed;
- void Motor();
- //Ñóê±oˉêy,i=1,Ñóê±10us
- void delay(u16 i)
- {
- while(i--);
- }
- //ζè′|àíoˉêy
- void dataprocess(int temp)
- {
- float tp,a;
- if(temp<0)
- {
- displaydata[0]=0x40;
- temp=temp-1;
- temp=~temp;
- tp=temp;
- temp=tp*0.0625*100+0.5;
- }
- else
- {
- displaydata[0]=0x00;
- tp=temp;
- temp=tp*0.0625*100+0.5;
- }
- displaydata[1]=wenduduan[temp%10000/1000];
- displaydata[2]=wenduduan[temp%1000/100]|0x80;
- displaydata[3]=wenduduan[temp%100/10];//
- displaydata[4]=wenduduan[temp%10/1];//
- a=temp/100;
- if(a>22.99)
- {
- L6=0;
- }
- else
- {
- L6=1;
- }
- }
- //êyÂë1üÏÔê¾oˉêy
- void wendudisplay()
- {
- u8 i;
- for(i=0;i<5;i++)
- {
- switch(i)
- {
- case(0):
- LSA=1;LSB=1;LSC=1;break;//ÏÔê¾μú0λ
- case(1):
- LSA=0;LSB=1;LSC=1;break;
- case(2):
- LSA=1;LSB=0;LSC=1;break;
- case(3):
- LSA=0;LSB=0;LSC=1;break;
- case(4):
- LSA=1;LSB=1;LSC=0;break;
- // case(5):
- // LSA=0;LSB=1;LSC=0;break;
- }
- P0=displaydata[i];//·¢Ëíêy¾Y
- delay(100);
- P0=0x00;//Ïûòt
- }
- }
- void main()
- {
-
- Speed=10;
- TMOD=0x10;
- TH1=0x3C;
- TL1=0xB0;
- EA=1;
- ET1=1;
- TR1=0;
-
-
-
- while(1)
- {
- dataprocess(DS18B20readtemp());
- wendudisplay();
- if(k3==0)
- {
- delay(1);
- if(k3==0)
- {
- TR1=1;
- Direction=1;
- Speed=10;
- beep=~beep;
- Motor();
- }
- }
- else
- {
- TR1=0;
- }
-
- }
- }
- void timer() interrupt 3
- {
- static u16 i;
- TH1=0x3C;
- TL1=0xB0;
- i++;
-
- if(i==100)
- {
- delay(5000);
- delay(5000);
- Direction=0;
- Speed=10;
- i=0;
-
- }
- Motor();
- }
復(fù)制代碼
|
|