久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
6通道PPM轉(zhuǎn)PWM信號(hào)解碼單片機(jī)源程序
[打印本頁(yè)]
作者:
bjgaocl
時(shí)間:
2019-9-14 23:09
標(biāo)題:
6通道PPM轉(zhuǎn)PWM信號(hào)解碼單片機(jī)源程序
//PPM 解碼程序
//用INT0接PPM信號(hào)
//T0計(jì)數(shù),用來(lái)測(cè)量脈寬
//注意,這個(gè)不是標(biāo)準(zhǔn)的PPM信號(hào),剛好和PPM信號(hào)相位相反
//測(cè)得的PPM信號(hào)在LCD上顯示
//PPM信號(hào)取自天地飛6A接收機(jī)
# include <stc.h>
# include <intrins.h>
# define DataPort P0
sbit RS=P2^4;
sbit RW=P2^5;
sbit EN=P2^6;
unsigned char channel=0,i=0;
unsigned int xdata PPM_channel1[10],PPM_channel2[10],PPM_channel3[10],PPM_channel4[10],PPM_channel5[10],PPM_channel6[10];
bit Timer0_OverFlowFlag=0;//定時(shí)器0的溢出標(biāo)志,如果溢出,則有問(wèn)題;
unsigned char qian,bai,shi,ge;
# define RS_CLR RS=0;
# define RS_SET RS=1;
# define RW_SET RW=1;
# define RW_CLR RW=0;
# define EN_CLR EN=0;
# define EN_SET EN=1;
//和LCD顯示有關(guān)的函數(shù)定義
void LCD_Check_Busy(void); //查忙函數(shù)
void LCD_Clear(void);//清屏函數(shù)
void LCD_Init(void);//lcd初始化函數(shù)
void LCD_Write_Com(unsigned char com);//控制字寫(xiě)入函數(shù)
void LCD_Write_Data(unsigned char Data);//數(shù)據(jù)寫(xiě)入函數(shù)
void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data);//寫(xiě)入單個(gè)字符
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s);//寫(xiě)入字符串
unsigned int filter(unsigned int *s);//中值平局濾波;
void DepartNum(unsigned int temp);//用于分解要顯示的數(shù)據(jù)
void DelayUs2x(unsigned char t);
void DelayMs(unsigned int t);
void main(void)
{
unsigned char *InitIform;
unsigned int temp;
InitIform="Init_is_OK";
LCD_Init();
DelayMs(10);
LCD_Write_String(3,0,InitIform);
//初始化Timer0
TMOD=0x01;//timer0 方式1
ET0=1;//允許timer0中斷
//初始化INT0
IT0=1;//負(fù)跳變觸發(fā)中斷;
EX0=1;
EA=1;
DelayMs(10000);
while(1)
{
temp=filter(PPM_channel1);
DepartNum(temp);
LCD_Write_Char(0,0,'A');
LCD_Write_Char(1,0,qian);
LCD_Write_Char(2,0,bai);
LCD_Write_Char(3,0,shi);
LCD_Write_Char(4,0,ge);
temp=filter(PPM_channel2);
DepartNum(temp);
LCD_Write_Char(5,0,'B');
LCD_Write_Char(6,0,qian);
LCD_Write_Char(7,0,bai);
LCD_Write_Char(8,0,shi);
LCD_Write_Char(9,0,ge);
temp=filter(PPM_channel3);
DepartNum(temp);
LCD_Write_Char(10,0,'C');
LCD_Write_Char(11,0,qian);
LCD_Write_Char(12,0,bai);
LCD_Write_Char(13,0,shi);
LCD_Write_Char(14,0,ge);
temp=filter(PPM_channel4);
DepartNum(temp);
LCD_Write_Char(0,1,'D');
LCD_Write_Char(1,1,qian);
LCD_Write_Char(2,1,bai);
LCD_Write_Char(3,1,shi);
LCD_Write_Char(4,1,ge);
temp=filter(PPM_channel5);
DepartNum(temp);
LCD_Write_Char(5,1,'E');
LCD_Write_Char(6,1,qian);
LCD_Write_Char(7,1,bai);
LCD_Write_Char(8,1,shi);
LCD_Write_Char(9,1,ge);
temp=filter(PPM_channel6);
DepartNum(temp);
LCD_Write_Char(10,1,'F');
LCD_Write_Char(11,1,qian);
LCD_Write_Char(12,1,bai);
LCD_Write_Char(13,1,shi);
LCD_Write_Char(14,1,ge);
// DelayMs(1000);
}
}
void DelayUs2x(unsigned char t)
{
while(--t);
}
void DelayMs(unsigned int t)
{
while(t--)
{
//大致延時(shí)1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
//查忙函數(shù)
void LCD_Check_Busy(void)
{
unsigned char i=255;
DataPort= 0xff;
RS_CLR;
RW_SET;
EN_SET;
while(i--&&(DataPort&0x80));
EN_CLR;
}
//控制字寫(xiě)入函數(shù),入口參數(shù)是控制字
void LCD_Write_Com(unsigned char com)
{
LCD_Check_Busy();
RS_CLR;
RW_CLR;
DataPort=com;
EN_SET;
_nop_();
EN_CLR;
}
//寫(xiě)入數(shù)據(jù),入口參數(shù)是要寫(xiě)入的數(shù)據(jù)
void LCD_Write_Data(unsigned char Data)
{
LCD_Check_Busy();
RS_SET;
RW_CLR;
DataPort=Data;
EN_SET;
_nop_();
EN_CLR;
}
//清屏函數(shù)
void LCD_Clear(void )
{
LCD_Write_Com(0x01);
DelayMs(5);
}
//LCD顯示字符串,入口參數(shù)是 字符顯示的位置X(0-15),顯示的行數(shù)y(0,1 ),*S顯示的字符串
void LCD_Write_String(unsigned char x,unsigned char y, unsigned char *s)
{
if(y==0) LCD_Write_Com(0x80+x);
else LCD_Write_Com(0xc0+x);
while(*s)
{
LCD_Write_Data(*s);
s++;
}
}
//LCD顯示字符串,入口參數(shù)是 字符顯示的位置X(0-15),顯示的行數(shù)y(0,1 ),Data顯示的字符
void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)
{
if(y==0) LCD_Write_Com(0x80+x);
else LCD_Write_Com(0xc0+x);
DelayMs(1);//a little delay for simulation
LCD_Write_Data(Data);
}
//lcd初始化函數(shù)
void LCD_Init(void)
{
LCD_Write_Com(0x38);// set the display model
DelayMs(5);
LCD_Write_Com(0x08);//turn down the display
//LCD_Write_Com(0x01);//clear the display
LCD_Clear();
LCD_Write_Com(0x06);//set the 光標(biāo) moving model
DelayMs(5);
LCD_Write_Com(0x0c);//顯示開(kāi)和光標(biāo)設(shè)置
}
/****************************************
用于顯示的數(shù)位分解函數(shù),把數(shù)據(jù)轉(zhuǎn)化為ASCII碼
入口參數(shù)是要顯示的數(shù)據(jù)
****************************************/
void DepartNum(unsigned int temp)
{
qian=temp/1000+0x30;
bai=temp%1000/100+0x30;
shi=temp%100/10+0x30;
ge= temp%10+0x30;
}
void ISIR_INT0(void) interrupt 0
{
unsigned int PPM_temp;
if(TR0)
{
TR0=0;//停止計(jì)數(shù);
PPM_temp=TH0;
PPM_temp=(PPM_temp<<8)|TL0;
TH0=0;
TL0=0;
TR0=1;//給TH0和TL0賦初值后重新啟動(dòng)定時(shí)器
}
else
{
TH0=0;//如果是第一次啟動(dòng)中斷,則啟動(dòng)timer0
TL0=0;
TR0=1;
}
if(PPM_temp>3000|| Timer0_OverFlowFlag)//判斷引導(dǎo)區(qū)
{
channel=0;
Timer0_OverFlowFlag=0;
i++;
if(i==10) i=0;
}
switch(channel)
{
case 1: PPM_channel1[i]=PPM_temp; break;
case 2: PPM_channel2[i]=PPM_temp; break;
case 3: PPM_channel3[i]=PPM_temp; break;
case 4: PPM_channel4[i]=PPM_temp; break;
case 5: PPM_channel5[i]=PPM_temp; break;
case 6: PPM_channel6[i]=PPM_temp; break;
case 7: break;
case 8: break;
default:break;
}
channel++;
}
void ISIR_Timer0(void) interrupt 1
{
Timer0_OverFlowFlag=1;
}
unsigned int filter(unsigned int *s)
{
unsigned char k,j;
unsigned int sum=0;
unsigned int temp;
for(k=0;k<9;k++)
for(j=k+1;j<10;j++)
if(s[k]>s[j])
{
temp=s[k];
s[k]=s[j];
s[j]=temp;
}
for(k=1;k<9;k++)
sum+=s[k];
sum=sum/8;
return sum;
}
復(fù)制代碼
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
欧美性乱
|
日韩欧美国产一区二区
|
国产精品a久久久久
|
久久精品成人一区
|
国产成人福利视频在线观看
|
国产精品欧美大片
|
亚洲成人免费在线观看
|
亚洲精品99久久久久久
|
日本中文字幕在线视频
|
国产精品久久久亚洲
|
精品国产一区二区三区久久久蜜月
|
粉嫩高清一区二区三区
|
久久精品国产一区二区电影
|
亚洲精品免费视频
|
91九色婷婷
|
国产精品中文字幕在线
|
日韩精品av一区二区三区
|
狠狠久久
|
九色91视频
|
国产成人精品一区二区三
|
国产精品福利在线观看
|
日韩av在线不卡
|
波多野结衣在线观看一区二区三区
|
亚洲美女一区
|
久久精品视频网站
|
中文字幕一区二区三区四区五区
|
国产精品毛片久久久久久
|
国产乱码精品一区二三赶尸艳谈
|
国产色婷婷精品综合在线手机播放
|
99r在线
|
国产一区二区自拍
|
在线免费激情视频
|
黄色免费三级
|
精品区一区二区
|
久草新视频
|
日韩久草
|
久久国产传媒
|
国产一区二区三区四区五区加勒比
|
欧美一区二区三区日韩
|
成人三级在线观看
|
中文字幕不卡视频在线观看
|