久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
6通道PPM轉PWM信號解碼單片機源程序
[打印本頁]
作者:
bjgaocl
時間:
2019-9-14 23:09
標題:
6通道PPM轉PWM信號解碼單片機源程序
//PPM 解碼程序
//用INT0接PPM信號
//T0計數,用來測量脈寬
//注意,這個不是標準的PPM信號,剛好和PPM信號相位相反
//測得的PPM信號在LCD上顯示
//PPM信號取自天地飛6A接收機
# 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;//定時器0的溢出標志,如果溢出,則有問題;
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顯示有關的函數定義
void LCD_Check_Busy(void); //查忙函數
void LCD_Clear(void);//清屏函數
void LCD_Init(void);//lcd初始化函數
void LCD_Write_Com(unsigned char com);//控制字寫入函數
void LCD_Write_Data(unsigned char Data);//數據寫入函數
void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data);//寫入單個字符
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s);//寫入字符串
unsigned int filter(unsigned int *s);//中值平局濾波;
void DepartNum(unsigned int temp);//用于分解要顯示的數據
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;//負跳變觸發中斷;
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--)
{
//大致延時1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
//查忙函數
void LCD_Check_Busy(void)
{
unsigned char i=255;
DataPort= 0xff;
RS_CLR;
RW_SET;
EN_SET;
while(i--&&(DataPort&0x80));
EN_CLR;
}
//控制字寫入函數,入口參數是控制字
void LCD_Write_Com(unsigned char com)
{
LCD_Check_Busy();
RS_CLR;
RW_CLR;
DataPort=com;
EN_SET;
_nop_();
EN_CLR;
}
//寫入數據,入口參數是要寫入的數據
void LCD_Write_Data(unsigned char Data)
{
LCD_Check_Busy();
RS_SET;
RW_CLR;
DataPort=Data;
EN_SET;
_nop_();
EN_CLR;
}
//清屏函數
void LCD_Clear(void )
{
LCD_Write_Com(0x01);
DelayMs(5);
}
//LCD顯示字符串,入口參數是 字符顯示的位置X(0-15),顯示的行數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顯示字符串,入口參數是 字符顯示的位置X(0-15),顯示的行數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初始化函數
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 光標 moving model
DelayMs(5);
LCD_Write_Com(0x0c);//顯示開和光標設置
}
/****************************************
用于顯示的數位分解函數,把數據轉化為ASCII碼
入口參數是要顯示的數據
****************************************/
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;//停止計數;
PPM_temp=TH0;
PPM_temp=(PPM_temp<<8)|TL0;
TH0=0;
TL0=0;
TR0=1;//給TH0和TL0賦初值后重新啟動定時器
}
else
{
TH0=0;//如果是第一次啟動中斷,則啟動timer0
TL0=0;
TR0=1;
}
if(PPM_temp>3000|| Timer0_OverFlowFlag)//判斷引導區
{
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;
}
復制代碼
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
欧美精品亚洲精品
|
欧美亚洲国产精品
|
人与拘一级a毛片
|
天天操夜夜干
|
国产黄色片视频
|
精品视频免费
|
国产中文字幕在线播放
|
日日不卡av
|
视频一区二区三区在线观看
|
人人草在线视频
|
av在线播放不卡
|
www.毛片
|
欧美在线激情
|
黄色录像一级片
|
国产精品1区2区
|
日韩天堂在线
|
www.黄色
|
不用播放器的av
|
999久久久久久久久6666
|
九九影视理伦片
|
亚洲综合在线播放
|
欧美日韩二区三区
|
国产一级视频在线观看
|
一区二区三区影院
|
国产免费一区二区三区最新不卡
|
欧美日韩成人在线观看
|
黄色三级av
|
又色又爽又黄gif动态图
|
亚洲乱码在线
|
国产女优在线
|
欧美一级欧美三级在线观看
|
秘密爱大尺度做爰呻吟
|
久视频在线
|
一区二区国产在线
|
欧美视频在线观看一区
|
久久久久久久97
|
午夜国产在线
|
亚洲裸体视频
|
一区二区三区久久久
|
国产美女在线播放
|
www.huangse
|