久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
51單片機控制舵機代碼,可以紅外遙控,也可以按鍵控制
[打印本頁]
作者:
HideMe
時間:
2019-7-23 14:30
標題:
51單片機控制舵機代碼,可以紅外遙控,也可以按鍵控制
#include <reg52.h>
unsigned char count; //0.5ms次數標識
sbit pwm =P1^1 ; //PWM信號輸出
sbit jia =P3^1; //角度增加按鍵檢測IO口
sbit jan =P3^2; //角度減少按鍵檢測IO口
unsigned char jd; //角度標識
sbit IR = P3^2; //定義紅外脈沖數據接口 外部中斷O輸入口
typedef unsigned char INT8U;
typedef unsigned char uchar;
typedef unsigned int INT16U;
typedef unsigned int uint;
uchar IRtime ; //檢測紅外高電平持續時間(脈寬)
uchar IRcord[4]; //此數組用于儲存分離出來的4個字節的數據(用戶碼2個字節+鍵值碼2個字節)
uchar IRdata[33]; //此數組用于儲存紅外的33位數據(第一位為引導碼用戶碼16+鍵值碼16)
bit IRpro_ok, IRok; //第一個用于紅外接收4個字節完畢。IRok用為檢測脈寬完畢
void time0() interrupt 1 //定義定時器0
{
IRtime++; //檢測脈寬,1次為278us
}
void int0() interrupt 0 //定義外部中斷0
{
static uchar i; // 聲明靜態變量(在跳出函數后在回來執行的時候不會丟失數值)i用于把33次高電平的持續時間存入IRdata
static bit startflag; //開始儲存脈寬標志位
if(startflag) //開始接收脈寬檢測
{
if( (IRtime < 53) && (IRtime >= 32) )
i = 0; //如果是引導碼那么執行i=0把他存到IRdata的第一個位
IRdata[i] = IRtime; //以T0的溢出次數來計算脈寬,把這個時間存到數組里面到后面判斷
IRtime = 0; //計數清零,下一個下降沿的時候在存入脈寬
i++; //計數脈寬存入的次數
if(i == 33) //如果存入34次 數組的下標是從0開始i等于33表示執行了34次
{
IRok = 1; //那么表示脈寬檢測完畢
i = 0; //把脈寬計數清零準備下次存入
}
}
else
{
IRtime = 0; //引導碼開始進入把脈寬計數清零開始計數
startflag = 1; //開始處理標志位置1
}
}
void IRcordpro() //提取它的33次脈寬進行數據解碼
{
uchar i, j, k, cord, value;
k = 1; //從第一位脈寬開始取,丟棄引導碼脈寬
for(i = 0; i < 4; i++)
{
for(j = 0; j < 8; j++)
{
cord = IRdata[k]; //把脈寬存入cord
if(cord > 5) //如果脈寬大于我11.0592的t0溢出率為約278us*5=1390那么判斷為1
value = value | 0x80;
if(j < 7)
{
value = value >> 1; //value位左移依次接收8位數據。
}
k++; //每執行一次脈寬位加1
}
IRcord[i] = value; //每處理完一個字節把它放入IRcord數組中。
value = 0; //清零value方便下次在存入數據
}
IRpro_ok = 1; //接收完4個字節后IRpro ok置1表示紅外解碼完成
}
void delay(unsigned char i)//延時
{
unsigned char j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void Time1_Init() //定時器初始化
{
TMOD |= 0x10;//T1 8位自動重裝模塊
TH1 = 0xfe;
TL1 = 0x33;//11.0592M晶振下占空比最大比值是256,輸出100HZ
TR1 = 1;//啟動定時器0
ET1 = 1;//允許定時器0中斷
EA = 1;//總中斷允許
}
void Time1_Int() interrupt 3//中斷程序
{
TH1 = 0xfe;
TL1 = 0x33;//11.0592M晶振下占空比最大比值是256,輸出100HZ
if(count< jd)
pwm=1;
else
pwm=0;
count=(count+1);
if(count==40)
count=0;
// count=count%40;
}
void keyscan() //按鍵掃描
{
if(jia==0) //角度增加按鍵是否按下
{
delay(10); //按下延時,消抖
if(jia==0) //確實按下
{
jd+=2; //角度標識加1
count=0; //按鍵按下 則20ms周期從新開始
if(jd==7)
jd=5; //已經是180度,則保持
while(jia==0); //等待按鍵放開
}
}
if(jan==0) //角度減小按鍵是否按下
{
delay(10);
if(jan==0)
{
jd--; //角度標識減1
count=0;
if(jd==0)
jd=1; //已經是0度,則保持
while(jan==0);
}
}
}
void main()
{
Time1_Init();
TMOD |= 0x02; //定時器0工作方式2,8位自動重裝
TH0 = 0x00; //高8位裝入0那么定時器溢出一次的時間是256個機器周期
TL0 = 0x00;
ET0 = 1; //定時器0中斷
TR0 = 1; //啟動定時器0
IT0 = 1; //設置外部中斷0為跳沿觸發方式,來一個下降沿觸發一次
EX0 = 1; //啟動外部中斷0
jd=5;
count=0;
while(1)
{
if(IRok) //判斷脈寬是否檢測完畢
{
IRcordpro();//根據脈寬解碼出4個字節的數據
IRok = 0; //重新等待脈寬檢測
if(IRpro_ok) //判斷是否解碼完畢
{
switch(IRcord[2])
{
case 0x15:
jd+=2;
count=0;
if(jd==7)
jd=5;
break;
case 0x07:
jd-=2;
count=0;
if(jd==0)
jd=1;
break;
case 0x019:
jd+=1;
count=0;
if(jd==6)
jd=5;
break;
case 0x16:
jd-=1;
count=0;
if(jd==0)
jd=1;
break;
}
IRpro_ok = 0;
}
}
keyscan() ;
}
}
復制代碼
作者:
thomaspang
時間:
2019-7-24 00:54
有仿真圖就好了
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
久久综合伊人
|
国产免费一区二区三区免费视频
|
一区二区三区在线观看视频
|
91视频正在播放
|
99re在线
|
国精产品一区一区三区免费完
|
精品av久久久久电影
|
激情网站
|
四虎影
|
国产精品三级
|
日韩中文字幕久久
|
黄色国产在线视频
|
国产免费一区二区三区
|
av中文字幕在线
|
亚洲国内精品
|
日韩一区二区三区视频
|
国产精品视频网
|
永久看片
|
99pao成人国产永久免费视频
|
中文字幕 视频一区
|
玖玖国产
|
欧美一级黄色网
|
亚洲网站在线播放
|
午夜在线观看免费
|
美女久久久
|
亚洲欧美激情精品一区二区
|
久草资源在线
|
日韩精品视频中文字幕
|
精品久久影院
|
日本成人免费网站
|
久久人人爽人人爽
|
国产一级久久久久
|
毛片区
|
亚洲精品久久久久中文字幕欢迎你
|
精品国产一区二区三区性色av
|
久久久久久久久久久福利观看
|
久久国产成人
|
精品国产乱码久久久久久丨区2区
|
午夜免费观看网站
|
91亚洲欧美
|
日本精品视频
|