久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
單片機舵機按鍵控制程序單片機問題
[打印本頁]
作者:
J.C.Maxwell
時間:
2018-12-10 10:43
標題:
單片機舵機按鍵控制程序單片機問題
STC89C52RC單片機控制六路舵機的按鍵程序怎么寫? 是這樣嗎?
#include <reg52.h>
#include <math.h>
typedef unsigned char uchar;
typedef unsigned int uint;
uchar flag1; //舵機按鍵標志
uchar flag2; //舵機按鍵標志
uchar flag3; //舵機按鍵標志
uchar flag4; //舵機按鍵標志
uchar flag5; //舵機按鍵標志
uchar flag6; //舵機按鍵標志
uchar order=0;
sbit KEY1_1=P1^0; //第一路按鍵1
sbit KEY1_2=P1^1; //第一路按鍵2
sbit PWM_OUT1=P2^1; //第一路PWM輸出口
sbit KEY2_1=P1^2; //第二路按鍵1
sbit KEY2_2=P1^3; //第二路按鍵2
sbit PWM_OUT2=P2^2; //第二路PWM輸出口
sbit KEY3_1=P1^4; //第三路按鍵1
sbit KEY3_2=P1^5; //第三路按鍵2
sbit PWM_OUT3=P2^3; //第三路PWM輸出口
sbit KEY4_1=P1^6; //第四路按鍵1
sbit KEY4_2=P1^7; //第四路按鍵2
sbit PWM_OUT4=P2^4; //第四路PWM輸出口
sbit KEY5_1=P3^2; //第五路按鍵1
sbit KEY5_2=P3^3; //第五路按鍵2
sbit PWM_OUT5=P2^5; //第五路PWM輸出口
sbit KEY6_1=P3^4; //第六路按鍵1
sbit KEY6_2=P3^5; //第六路按鍵2
sbit PWM_OUT6=P2^6; //第六路PWM輸出口
uint PWM_Value1; //定義pwm值
uint PWM_Value2;
uint PWM_Value3;
uint PWM_Value4;
uint PWM_Value5;
uint PWM_Value6;
void Delay(unsigned int s) //延遲子函數
{
unsigned int i;
for(i=0; i<s; i++);
for(i=0; i<s; i++);
}
/*定時器初始化*/
void Init_Timer0()
{
TMOD=0x11;
TH0=(65536-1500)/256;
TL0=(65536-1500)%256;
EA = 1;
ET0 = 1;
TR0 = 1;
PT0=1;
}
/*主函數*/
void main(void)
{
Delay(6000);
PWM_Value1 = 1250; //pwm初值為1500
PWM_Value2 = 1250;
PWM_Value3 = 1250;
PWM_Value4 = 1250;
PWM_Value5 = 1250;
PWM_Value6 = 1250;
Init_Timer0();
while(1)
{
/*第一路*/
if((KEY1_1 ==0 )||(KEY1_2 ==0 )) //按鍵1或按鍵2被按下
{
if(KEY1_1 ==0 ) //確認按鍵1被按下
{
flag1 = 1; //標志位賦值1
}
if(KEY1_2 ==0 ) //確認按鍵2被按下
{
flag1 = 2; //標志位賦值2
}
}
else
{
flag1 = 0; //否則標志位為0
}
Delay(20); //延時20ms
/*第二路*/
if((KEY2_1 ==0 )||(KEY2_2 ==0 )) //按鍵1或按鍵2被按下
{
if(KEY2_1 ==0 ) //確認按鍵1被按下
{
flag2 = 1; //標志位賦值1
}
if(KEY2_2 ==0 ) //確認按鍵2被按下
{
flag2 = 2; //標志位賦值2
}
}
else
{
flag2 = 0; //否則標志位為0
}
Delay(20); //延時20ms
/*第三路*/
if((KEY3_1 ==0 )||(KEY3_2 ==0 )) //按鍵1或按鍵2被按下
{
if(KEY3_1 ==0 ) //確認按鍵1被按下
{
flag3 = 1; //標志位賦值1
}
if(KEY3_2 ==0 ) //確認按鍵2被按下
{
flag3 = 2; //標志位賦值2
}
}
else
{
flag3 = 0; //否則標志位為0
}
Delay(20); //延時20ms
/*第四路*/
if((KEY4_1 ==0 )||(KEY4_2 ==0 )) //按鍵1或按鍵2被按下
{
if(KEY4_1 ==0 ) //確認按鍵1被按下
{
flag4 = 1; //標志位賦值1
}
if(KEY4_2 ==0 ) //確認按鍵2被按下
{
flag4 = 2; //標志位賦值2
}
}
else
{
flag4 = 0; //否則標志位為0
}
Delay(20); //延時20ms
/*第五路*/
if((KEY5_1 ==0 )||(KEY5_2 ==0 )) //按鍵1或按鍵2被按下
{
if(KEY5_1 ==0 ) //確認按鍵1被按下
{
flag5 = 1; //標志位賦值1
}
if(KEY5_2 ==0 ) //確認按鍵2被按下
{
flag5 = 2; //標志位賦值2
}
}
else
{
flag5 = 0; //否則標志位為0
}
Delay(20); //延時20ms
/*第六路*/
if((KEY6_1 ==0 )||(KEY6_2 ==0 )) //按鍵1或按鍵2被按下
{
if(KEY6_1 ==0 ) //確認按鍵1被按下
{
flag6 = 1; //標志位賦值1
}
if(KEY6_2 ==0 ) //確認按鍵2被按下
{
flag6 = 2; //標志位賦值2
}
}
else
{
flag6 = 0; //否則標志位為0
}
Delay(20); //延時20ms
}
}
/*****中斷程序*******/
void timer0(void) interrupt 1
{
if(flag1==1) PWM_Value1 += 10; //如果標志位為1時,pwm的值加1
if(flag1==2) PWM_Value1 -= 10; //如果標志位為2時,pwm的值減1
if(PWM_Value1>=2500) //如果pwm的值大于2500
PWM_Value1 = 2500; //則保持在2500
if(PWM_Value1<=500) //如果pwm的值小于500
PWM_Value1=500; //則保持在500
if(flag2==1) PWM_Value2 += 10; //如果標志位為1時,pwm的值加1
if(flag2==2) PWM_Value2 -= 10; //如果標志位為2時,pwm的值減1
if(PWM_Value2>=2500) //如果pwm的值大于2500
PWM_Value2 = 2500; //則保持在2500
if(PWM_Value2<=500) //如果pwm的值小于500
PWM_Value2=500; //則保持在500
if(flag3==1) PWM_Value3 += 10; //如果標志位為1時,pwm的值加1
if(flag3==2) PWM_Value3 -= 10; //如果標志位為2時,pwm的值減1
if(PWM_Value3>=2500) //如果pwm的值大于2500
PWM_Value3 = 2500; //則保持在2500
if(PWM_Value3<=500) //如果pwm的值小于500
PWM_Value3=500; //則保持在500
if(flag4==1) PWM_Value4 += 10; //如果標志位為1時,pwm的值加1
if(flag4==2) PWM_Value4 -= 10; //如果標志位為2時,pwm的值減1
if(PWM_Value4>=2500) //如果pwm的值大于2500
PWM_Value4 = 2500; //則保持在2500
if(PWM_Value4<=500) //如果pwm的值小于500
PWM_Value4=500; //則保持在500
if(flag5==1) PWM_Value5 += 10; //如果標志位為1時,pwm的值加1
if(flag5==2) PWM_Value5 -= 10; //如果標志位為2時,pwm的值減1
if(PWM_Value5>=2500) //如果pwm的值大于2500
PWM_Value5 = 2500; //則保持在2500
if(PWM_Value5<=500) //如果pwm的值小于500
PWM_Value5=500; //則保持在500
if(flag6==1) PWM_Value6 += 10; //如果標志位為1時,pwm的值加1
if(flag6==2) PWM_Value6 -= 10; //如果標志位為2時,pwm的值減1
if(PWM_Value6>=2500) //如果pwm的值大于2500
PWM_Value6 = 2500; //則保持在2500
if(PWM_Value6<=500) //如果pwm的值小于500
PWM_Value6=500; //則保持在500
switch(order)
{
case 1:(PWM_OUT1=1);
TH0=(65536-PWM_Value1)>>8;
TL0=(uchar)(65536-PWM_Value1);
break;
case 2:(PWM_OUT1=0);
TH0=(65536-(5000-PWM_Value1))>>8;
TL0=(uchar)(65536-(5000-PWM_Value1));
break;
case 3:
TH0=60536>>8;
TL0=(uchar)60536;
break;
case 4:
TH0=60536>>8;
TL0=(uchar)60536;
order=0;
break;
case 5:(PWM_OUT2=1);
TH0=(65536-PWM_Value2)>>8;
TL0=(uchar)(65536-PWM_Value2);
break;
case 6:(PWM_OUT2=0);
TH0=(65536-(5000-PWM_Value2))>>8;
TL0=(uchar)(65536-(5000-PWM_Value2));
break;
case 7:
TH0=60536>>8;
TL0=(uchar)60536;
break;
case 8:
TH0=60536>>8;
TL0=(uchar)60536;
order=0;
break;
case 9:(PWM_OUT3=1);
TH0=(65536-PWM_Value3)>>8;
TL0=(uchar)(65536-PWM_Value3);
break;
case 10:(PWM_OUT3=0);
TH0=(65536-(5000-PWM_Value3))>>8;
TL0=(uchar)(65536-(5000-PWM_Value3));
break;
case 11:
TH0=60536>>8;
TL0=(uchar)60536;
break;
case 12:
TH0=60536>>8;
TL0=(uchar)60536;
order=0;
break;
case 13:(PWM_OUT4=1);
TH0=(65536-PWM_Value4)>>8;
TL0=(uchar)(65536-PWM_Value4);
break;
case 14:(PWM_OUT4=0);
TH0=(65536-(5000-PWM_Value4))>>8;
TL0=(uchar)(65536-(5000-PWM_Value4));
break;
case 15:
TH0=60536>>8;
TL0=(uchar)60536;
break;
case 16:
TH0=60536>>8;
TL0=(uchar)60536;
order=0;
break;
case 17:(PWM_OUT5=1);
TH0=(65536-PWM_Value5)>>8;
TL0=(uchar)(65536-PWM_Value5);
break;
case 18:(PWM_OUT5=0);
TH0=(65536-(5000-PWM_Value5))>>8;
TL0=(uchar)(65536-(5000-PWM_Value5));
break;
case 19:
TH0=60536>>8;
TL0=(uchar)60536;
break;
case 20:
TH0=60536>>8;
TL0=(uchar)60536;
order=0;
break;
case 21:(PWM_OUT6=1);
TH0=(65536-PWM_Value6)>>8;
TL0=(uchar)(65536-PWM_Value6);
break;
case 22:(PWM_OUT6=0);
TH0=(65536-(5000-PWM_Value6))>>8;
TL0=(uchar)(65536-(5000-PWM_Value6));
break;
case 23:
TH0=60536>>8;
TL0=(uchar)60536;
break;
case 24:
TH0=60536>>8;
TL0=(uchar)60536;
order=0;
break;
default: order=0;
break;
}
order++;
}
復制代碼
作者:
1ZAQ
時間:
2024-5-9 14:36
可以,沒什么問題
作者:
clclcl123
時間:
2024-5-9 15:54
是這樣寫的
作者:
Hephaestus
時間:
2024-5-11 22:12
你親自測試一下不就知道好用不好用了嗎?
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
成人深夜福利在线观看
|
欧美一二三
|
色网在线看
|
人人爽日日躁夜夜躁尤物
|
国产一级一级毛片
|
欧美黑人巨大videos精品
|
www亚洲精品
|
日韩一及片
|
成人欧美一区二区三区在线观看
|
久久99久久99精品免视看婷婷
|
亚洲欧美成人
|
亚洲欧美日韩系列
|
欧美精品在线免费观看
|
亚洲毛片在线观看
|
久久久久久看片
|
成人精品鲁一区一区二区
|
秋霞影院一区二区
|
国产欧美在线视频
|
日本一区二区在线视频
|
亚洲精品综合
|
亚洲一区二区视频
|
福利视频一区
|
人人叉
|
亚洲一二三区不卡
|
成人黄在线观看
|
国产色网
|
国产一区二区高清在线
|
久久一级大片
|
久久久久久久久久久久久9999
|
日韩精品久久久
|
伊人成人免费视频
|
色偷偷888欧美精品久久久
|
欧美性大战xxxxx久久久
|
国产一区二区三区四区五区加勒比
|
欧美精品一区三区
|
综合精品久久久
|
国产精品99久久久久久久久久久久
|
国产欧美精品在线
|
国产精品福利在线观看
|
色综合久
|
jlzzjlzz国产精品久久
|