各位朋友幫忙看下 單片機源程序如下:
#include<stc12c5a60s2.h>
#define uchar unsigned char
#define uint unsigned int
sbit go=P1^7;
sbit back=P3^7;
sbit turn_left=P1^6;
sbit turn_right=P3^6;
sbit turn_whistle=P1^5;
sbit turn_light=P3^5;
sbit whistle=P3^3;
sbit light=P3^2;
sbit quciken=P1^4;
sbit moderate=P3^4;
void delayms();
void keyscan();
uchar light_a=0,pwm_n=0;
uint speed=0;
//延時函數
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
//按鍵函數
void keyscan()
{
//按鍵控制前進
if(go==0)
{
delayms(10);
if(go==0)
{
P0=0X96;
while(!go);
}
}
else
{
P0=0x00;
}
//按鍵控制后退
if(back==0)
{
delayms(10);
if(back==0)
{
P0=0X69;
while(!back);
}
}
else
{
P0=0x00;
}
//按鍵控制左轉
if(turn_left==0)
{
delayms(10);
if(turn_left==0)
{
P0=0Xa5;
while(!turn_left);
}
}
else
{
P0=0x00;
}
//按鍵控制右轉
if(turn_right==0)
{
delayms(10);
if(turn_right==0)
{
P0=0X5a;
while(!turn_right);
}
}
else
{
P0=0x00;
}
//按鍵控制鳴笛
if(turn_whistle==0)
{
delayms(10);
if(turn_whistle==0)
{
whistle=0;
while(!turn_whistle);
}
}
else
{
whistle=1;
}
//按鍵控制亮燈
if(turn_light==0)
{
delayms(10);
if(turn_light==0)
{
light_a++;
if(light_a==1)
{
light=0;
}
if(light_a>=2)
{
light_a=0;
light=1;
}
while(!turn_light);
}
}
//按鍵控制減速
if(quciken==0)
{
delayms(10);
if(quciken==0)
{
speed=speed+2;
if(speed>=10)
{
speed=10;
}
while(!quciken);
}
}
//按鍵控制加速
if(moderate==0)
{
delayms(10);
if(moderate==0)
{
speed=speed-2;
if(speed<=1)
{
speed=0;
}
while(!moderate);
}
}
}
void main()
{
TMOD=0x01;//定時器0為工作方式1
TH0=(65536-917)/256;//5ms定時初值設置
TL0=(65536-917)%256;
EA=1;//開總中斷
ET0=1;//開定時器0中斷
TR0=1;//啟動定時器0中斷
while(1)
{
keyscan();
if(pwm_n>=speed)
{
P2=0x00;
}
if(pwm_n<speed)
{
P2=0xf0;
}
}
}
void tim0()interrupt 1
{
TH0=(65536-917)/256;//5ms定時初值設置
TL0=(65536-917)%256;
pwm_n++;
if(pwm_n>=9)
{
pwm_n=0;
}
}
|