#include <reg52.h>
sbit SEV_PWM = P1^0; //設定PWM輸出的I/O端口
unsigned char count = 0;
unsigned char SEV_conut =8;
sbit K6=P1^1;//設置兩個按鍵,代表抬起和按下。根據實際硬件資源編寫。
sbit K7=P1^2;
sbit LED=P1^3; /*延時程序*/
void delay(unsigned char i)
{
unsigned char j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
/*定時器T0初始化*/
void Com_Init() {
TMOD &= 0x00;
TMOD |= 0x01; //定時器T0設置成方式1
TH0 = 0xff; //定時常數 0.1ms 晶振為11.0592MHz
TL0 = 0xa4;
ET0 = 1;
TR0 = 1;
EA=1;
} /*T0中斷初始化*/
void Time0_Init() interrupt 1 {
TR0 = 0;
TH0 = 0xff; //重裝時間常數 0.1ms
TL0 = 0xa4;
if(count <= SEV_conut) //5==0° 10==90°
{
SEV_PWM = 1;
}
else {
SEV_PWM = 0;
}
count++;
if (count >= 200) //T = 20ms清零
{
count = 0;
}
TR0 = 1; //開啟T0
}
void main(){
Com_Init();
while(1) {
if(K6==0)
{
delay(10);
if(K6==0)
{
SEV_conut =5;//5代表0.5ms
count=0;
}
}
if(K7==0)
{
delay(10);
if(K7==0)
{
SEV_conut =8;
count=0;
}
}
//SEV_conut =5;//舵機恢復到0°的位置
//count=0;//讓定時器重新計數
//約延時2s
//SEV_conut =8;//8這個值是作者調試的角度,得到現象是觸控筆向下按壓屏幕
//count=0;
//Delay(100000);
//延時函數寫得不好,讀者可改寫。
}
}
|